![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить НД при ассинх. выполнении запроса [D7, MSSQL]
Stanislav © (2005-10-26 14:59:00)Подскажите пожалуйста, как мне получить набор данных, который возвращает запрос в результате ассинхронного выполнения ?
Stanislav (2005-10-27 12:31:00) [1]Спасибо! Все работает!
Stanislav (2005-10-27 12:12:00) [2]Ega23 © (27.10.05 12:09) [14]
Сейчас попробую. Спасибо!
Ega23 (2005-10-27 12:09:00) [3]Set NoCount ON/OFF ?
Stanislav (2005-10-27 12:08:00) [4]sniknik © (27.10.05 11:29) [12]
Спасибо за совет.
Количество это для проверки.
Я вобщем разобрался в чем причина, но как ее устранить ?
В запросе сначала выполняется хранимка, которая ничего не возвращает, а потом Select. Так вот если заремить хранимку, то я получаю НД, а как получить НД и оставить хранимку?
sniknik (2005-10-27 11:29:00) [5]> Привел. Что не правильно?
все! и непонятно по этим кускам чего хочеш сделать, просто по завершению количество получить?
тогда зачем лезеш в компонент в событии которое происходит до того как свойства сего компанента проинициализированы. либо смотри в рекордсете который в это событие приходит...
Form1.ADOConnection1ExecuteComplete
...
ShowMessage(intToStr(Recordset.RecordCount));
либо поставь цикл ожидания пока не откроется полностью... (типа)
тамже (onExecuteComplete)
...
while ADODataSet1.RecordsetState = [stExecuting] do sleep(0);
ShowMessage(intToStr(ADODATASET1.RecordCount));
...
в принципе этот рекордсет, чтотам прходит ты и должен использовать, потому как это и есть тот набор который ты хочеш получить... ->
> как мне получить набор данных, который возвращает запрос в результате ассинхронного выполнения ?
но только осторожнее там, неправильные действия в нем легко сделают твое ассинхронное выполнение синхронным. ;)
Stanislav (2005-10-27 10:19:00) [6]Anatoly Podgoretsky © (26.10.05 16:18) [9]
Привел. Что не правильно?
Stanislav (2005-10-26 16:34:00) [7]При обычном выполнении т.е. EoAsyncExecute=false
Пишу:
AdoDataset.Open;
ShowMessage(AdoDataSet.FieldByName('MyField').asString)
Результат: 150
При Ассинхронном выолнении т.е. EoAsyncExecute=true
AdoDataset.Open;
на событие:
TForm1.ADOConnection1ExecuteComplete
ShowMessage(InttoStr(RecordsAffected)); Результат - 1
ShowMessage(intToStr(ADODATASET1.RecordCount)); Результат ничего, т.е. нет даже сообщения...
Anatoly Podgoretsky (2005-10-26 16:18:00) [8]Так мы будем долго толочь воду в ступе, не можешь сказать словами, то хотя бы приводи код.
Stanislav (2005-10-26 16:08:00) [9]Anatoly Podgoretsky © (26.10.05 15:55) [4]
На событие ADOConnection -> OnExecuteComplite
Проверяю состояние ADODataSet.Active, оно равняется False.
Stanislav (2005-10-26 16:08:00) [10]Удалено модератором
Seg (2005-10-26 16:07:00) [11]После выполнения он остается закрытым.
Кто остается закрытым?
Может просто нужен указатель на завершившийся запрос?
Ega23 (2005-10-26 16:06:00) [12]Попробую побыть телепатом: IsolationLevel ?
Anatoly Podgoretsky (2005-10-26 15:55:00) [13]Попробуй задать вопрос иначе
Stanislav (2005-10-26 15:43:00) [14]А как потом обратится к эти данным?
После выполнения он остается закрытым.
Seg (2005-10-26 15:38:00) [15]Результат возвращается запускающему запросу.
Stanislav (2005-10-26 15:26:00) [16]Скажите хотябы это реально?