![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Привет Всем! Как бороться с ошибкой. [D5, MSSQL]
@andrew © (2002-03-20 12:42:00)Есть SQL, есть ADOQuery. Есть запрос, который может вернуть 0 строк. Есть код:
with ADOQuery do begin
if Active then Close;
SQL.CLear;
SQL.Append("что-то там")
Open;
end
Так вот если SQL ничего не возвращает на Open, то сделать в дальнейшем ADOQuery.Close невозможно. Выдается ошибка, что мол и Bof и Eof равны "тру", а для этой операции (имеется ввиду Close) требуется наличие строки.
Причем вся эта фигня происходит только в том случае, если софтина запускается на машине, где стоит SQL. Если запускать софт через сетку, то все в порядке. Объясните: что к чему, плиз!
Да и еще! Если перед Close сначала закрывать ADOConnection (что, правда автоматически закроет ADOQuery), то опять же все в порядке. Но мне так плохо, т.к. у меня несколько ADOQuery привязанные к одному ADOConnection, которые мне не нельзя закрывать.
asafr (2002-03-25 18:32:00) [1]Второй пак можно заменить этим:
http://delphi.mastak.ru/download/other6.html
На этой страничке смотри Aepatch.exe (ADO Express Update Pack)
asafr (2002-03-25 18:01:00) [2]Короче... ДЛЯ ВСЕХ КТО НЕ ПОНЯЛ ПОВТОРЯЮ СВОЕ ЖЕ СООБЩЕНИЕ ОТ 20.03.02
"Сервис паки надо установить для Д5 и ADOExpress. В этом ошибка. ADOQuery.Open - здесь ни причем. Паки есть на Борландовском сайте. И в кладовке есть программка по устранению "BOF and EOF...", но только я не знаю - будет ли она работать без сервис пака Д5, но это можно проверить. "
с Access эта ошибка не выскакивает...
Если надо будет, повторю это сообщение позже, ибо ОШИБКА В ЭТОМ...
Romul (2002-03-25 16:52:00) [3]В шестых Delphi эта проблема решена.
@andrew (2002-03-25 12:57:00) [4]Два вопроса:
1 - А где взять 2-й пак? (На борланде устал искать)
2 - А с Делфи 6 все в порядке?
Спасибо!
wicked (2002-03-22 12:09:00) [5]2 TriNeT ©
а мож ты его уже пропатченный поставил?...
хотя, как я заметил, ОЧЕНЬ МНОГОЕзависит от ole db провайдера...
Леша (2002-03-22 09:26:00) [6]Точно, главное апдейты первый и второй поставить.
DiggerAbstract (2002-03-22 04:24:00) [7]ВАМ УЖЕ ГОВОРИЛИ - ЧТО ДЛЯ АДО В ПЯТЕРКЕ НАДО СЕРВИСПАКИ УСТАНОВИТЬ И АПДЕЙТЫ ДЛЯ НЕГО-ЖЕ
TriNeT (2002-03-22 04:13:00) [8]Доброго времени суток, уважаемые.
Интересное кино получается. Тоже работаю с ADO, примерно такие же условия. В чем интересность? А в том, что таких глюков у меня не происходит не только на возвращении пустого набора данных, но и фильтрации пустого набора. Дельфи не пропатчен абсолютно ничем. В качестве базы данных используется Access 2000. Единственное подозрение, может быть вместе с Office устанавливается более новый MDAC, и Дельфи его просто не меняет на свой?
Fay (2002-03-22 02:01:00) [9]Лечится 2-м сервис факом для Delphi
@andrew (2002-03-20 19:35:00) [10]Всем Большое Спасибо. Буду разбираться. Если дойду до чего-нибудь сам - отпишусь.
Дмитрий (2002-03-20 17:05:00) [11]... и - тот же самый глюк вываливается (даже при установленном сервис-паке), если обращаться к AdoQuery.recordset (MoveFirst etc.).
Barmutik (2002-03-20 16:25:00) [12]Такая ошибка была и борляндовцы её пофиксили хот фиксом.
Если раньше курсор возвращался пустой то при попытке закрытия вываливался ексепшин. После фикса эта ошибка пропала.
:)) Зато осталась ещё одна : Если вы вытащили не пустой курсор и
потом фильтранули его так что активный курсор стал пустым опять у Вас будт тоже самое.
Глюки и ещё раз глюки ...
Dok_3D (2002-03-20 15:28:00) [13]Я уже как-то говорил ...
При изменении свойства ADOQuery.SQL.Text, свойство ADOQuery.Active принимает значение False.
И никаких ошибок я тут никогда не наблюдал ...
Дмитрий (2002-03-20 15:17:00) [14]Видал я и такой код:
(вариант, если лень ставить сервис-паки)
try
AdoQuery.Open;
except { EOF && BOF = в рекордсете - пусто }
AdoConnection.Close;
AdoConnection.Open;
end;
asafr (2002-03-20 14:36:00) [15]Сервис паки надо установить для Д5 и ADOExpress. В этом ошибка. ADOQuery.Open - здесь ни причем. Паки есть на Борландовском сайте. И в кладовке есть программка по устранению "BOF and EOF...", но только я не знаю - будет ли она работать без сервис пака Д5, но это можно проверить.
sniknik (2002-03-20 13:55:00) [16]Кусочек кода который возможно поможет. И для Delphi 5 нужно обязательно сделать апгрейд для ADO (если еще не сделал, иши на сайте Borland-а).
try
ADOCommand1.CommandText:= st;
Recordset:= ADOCommand1.Execute(RecordsAffected, EmptyParam);
if Recordset.State=1 then begin
ADODataSet1.Recordset:= Recordset;
PageControl1.ActivePage:= TabSheet1;
RichEdit2.Lines.Add(IntToStr(ErrCount)+" Выполнено применительно к "+IntToStr(ADODataSet1.Recordset.RecordCount)+" записям"+#$D+#$A);
end else begin
RichEdit2.Lines.Add(IntToStr(ErrCount)+" Выполнено применительно к "+IntToStr(RecordsAffected)+" записям"+#$D+#$A);
PageControl1.ActivePage:= TabSheet2;
if (POS("DROP", st)>0) or (POS("CREATE", st)>0) or (POS("ALTER", st)>0) then begin
SelectedTable:= "";
ListBox1.Items.Clear;
ADOConnection1.GetTableNames(ListBox1.Items);
ListBox2.Items.Clear;
if ListBox1.Items.Count > 0 then
RefreshFields(ListBox1.Items[0]);
end;
end;
except
on E: EADOError do begin ErrMessage:= "EADOError : "+ E.Message; Err:= True; end;
on E: EOleException do begin ErrMessage:= "EOleException : "+ E.Message; Err:= True; end;
on E: EDataBaseError do begin ErrMessage:= "EDataBaseError : "+ E.Message; Err:= True; end;
else begin ErrMessage:= "Неизвестная ошибка!"; Err:= True; end;
end;
wicked (2002-03-20 13:50:00) [17]2 @andrew ©
а сервис-паки устанавливал?....
Lusha (2002-03-20 13:28:00) [18]С подобной ошибкой не сталкивался... :(
Могу лишь заметить, что проблемная строка в общем то лишняя. Этот код может работать и без нее, т.к. ADOQuery.SQL.Clear автоматически вызовет Close...
Удачи