Ошибка 2580 Не существует источник записей...

AlTis
Дата: 26.05.2004 17:08:51
Ситуация следующая:
Есть ХП, которая возвр. набор записей.
В ней участвует временная таблица, которая (перед вызовом ХП) успешно формируется.
При открытии формы всё ок – процедура отрабатывает, записи возвращаются.
Далее нажимаю на кнопку, которая меняет входные параметры у формы (которые и являются входными параметрами для ХП) – вылетает ошибка “2580 Не существует источник записей… тратата”, причём вылетает через раз 1-ый раз всё ок, 2-ой раз ошибка.
Если делать пошагово, всё нормально отрабатывает. Убираю брикпоинт - глюки

Подозреваю, что ХП не успевает отрабатывать? Или может ещё что.

Adp (officeXP & 2000)
WinXP
SQL-Server2000

Сервис паки вроде все стоят.
Set nocount on в ХП стоит.
ищ
Дата: 26.05.2004 17:25:28
код давай
и хп и vba
AlTis
Дата: 26.05.2004 17:45:01
код мудреный очень, запутанный.

Выкладываю как есть

ALTER PROCEDURE getAllClientForDepartment
	@DepartmentID INT,
	@flag INT  -- 0 - nonactive, 1 - active, 2 - all 

AS set nocount on DECLARE @CodeField VARCHAR(50) DECLARE @Len INT DECLARE @sql VARCHAR(2000) SET @CodeField = (SELECT CodeField FROM DepartmentTree WHERE ChildID = @DepartmentID) SET @Len = LEN(@CodeField) SET @sql = 'SELECT Department.DepartmentID, Department.DepartmentName, Client.ClientID, Client.ClientCode, Client.ClientName, Client.ClientLegalName, Client.ClientStatus FROM #DepartmentTree INNER JOIN Department ON Department.DepartmentID = #DepartmentTree.ChildID INNER JOIN Client ON Department.DepartmentID = Client.DepartmentID WHERE SUBSTRING(CodeField, 1, ' + CAST(@Len AS VARCHAR(10)) + ') = ''' + @CodeField + ''' AND LEN(CodeField) >= ' + CAST(@Len AS VARCHAR(10)) + ' AND Department.DepartmentType = 1 AND Client.ClientStatus ' SET @sql = @sql + ( SELECT CASE WHEN @flag = 0 THEN ' = 0 ' WHEN @flag = 1 THEN ' = 1 ' WHEN @flag = 2 THEN ' in(0, 1) ' END) + ' ORDER BY ClientName' exec(@sql) --print @sql

+ кнопка
Private Sub bt_Click()


On Error GoTo 999
 
dhCreateTempTable "#DepartmentTree"

Me.InputParameters = "1,2"
Me.RecordSource = "dbo.getAllClientForDepartment"

Exit Sub

999:
dhError
'If Err.Number = 2580 Then Resume 0

End Sub


Делаю по шагам - всё ок, убираю брикпоинт - ошибка
Владимир Саныч
Дата: 26.05.2004 17:50:05
AlTis
Дата: 27.05.2004 01:25:14
2 Владимир Саныч
Ок, а куда в код поставить DoEvents?

всё перепробовал - результат тот
же - ощибка, если пошагово - всё ок.
Даже написал такой изврат
Private Sub bt_Click()


On Error GoTo 999
 
DoEvents
dhCreateTempTable "#DepartmentTree"

DoEvents
Me.InputParameters = "1,2"
DoEvents
Me.RecordSource = "dbo.getAllClientForDepartment"
DoEvents

Exit Sub

999:
dhError
'If Err.Number = 2580 Then Resume 0

End Sub

Как дождаться завершения выполнения ХП?
Владимир Саныч
Дата: 27.05.2004 01:26:56
Я имел в виду поставить перед той строкой, на которой помогает брейкпойнт. Если не получается - значит, я не прав...
paparome
Дата: 27.05.2004 10:28:27
автор
Me.RecordSource = "dbo.getAllClientForDepartment"

автор
ALTER PROCEDURE getAllClientForDepartment


А где во второй строке dbo. ?
ищ
Дата: 27.05.2004 10:37:30
айтис.

ты явно перемудрил.
во -первх, саму процедуру можно упростить до простого select, а не заниматься сложением строк.
во-вторых. при вы полнении в vba Me.InputParameters = "1,2" до Me.RecordSource = "dbo.getAllClientForDepartment"
происходит перезапрос. по сути дела ты послыаешь на сервер дважды запрос: первый раз с новыми параметрами, но со старым источником, а во второй раз с новым источником.
лучше поставь в InputParameters жесткие ссылки на поля формы, а просто меняй сами значения в этих полях и делай простой перезапрос Me.RecordSource =Me.RecordSource