Форум: "Базы";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизПривет Всем! Как бороться с ошибкой. Найти похожие ветки
← →
@andrew (2002-03-20 12:42) [0]Есть 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, которые мне не нельзя закрывать.
← →
Lusha (2002-03-20 13:28) [1]С подобной ошибкой не сталкивался... :(
Могу лишь заметить, что проблемная строка в общем то лишняя. Этот код может работать и без нее, т.к. ADOQuery.SQL.Clear автоматически вызовет Close...
Удачи
← →
wicked (2002-03-20 13:50) [2]2 @andrew ©
а сервис-паки устанавливал?....
← →
sniknik (2002-03-20 13:55) [3]Кусочек кода который возможно поможет. И для 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;
← →
asafr (2002-03-20 14:36) [4]Сервис паки надо установить для Д5 и ADOExpress. В этом ошибка. ADOQuery.Open - здесь ни причем. Паки есть на Борландовском сайте. И в кладовке есть программка по устранению "BOF and EOF...", но только я не знаю - будет ли она работать без сервис пака Д5, но это можно проверить.
← →
Дмитрий (2002-03-20 15:17) [5]Видал я и такой код:
(вариант, если лень ставить сервис-паки)
try
AdoQuery.Open;
except { EOF && BOF = в рекордсете - пусто }
AdoConnection.Close;
AdoConnection.Open;
end;
← →
Dok_3D (2002-03-20 15:28) [6]Я уже как-то говорил ...
При изменении свойства ADOQuery.SQL.Text, свойство ADOQuery.Active принимает значение False.
И никаких ошибок я тут никогда не наблюдал ...
← →
Barmutik (2002-03-20 16:25) [7]Такая ошибка была и борляндовцы её пофиксили хот фиксом.
Если раньше курсор возвращался пустой то при попытке закрытия вываливался ексепшин. После фикса эта ошибка пропала.
:)) Зато осталась ещё одна : Если вы вытащили не пустой курсор и
потом фильтранули его так что активный курсор стал пустым опять у Вас будт тоже самое.
Глюки и ещё раз глюки ...
← →
Дмитрий (2002-03-20 17:05) [8]... и - тот же самый глюк вываливается (даже при установленном сервис-паке), если обращаться к AdoQuery.recordset (MoveFirst etc.).
← →
@andrew (2002-03-20 19:35) [9]Всем Большое Спасибо. Буду разбираться. Если дойду до чего-нибудь сам - отпишусь.
← →
Fay (2002-03-22 02:01) [10]Лечится 2-м сервис факом для Delphi
← →
TriNeT (2002-03-22 04:13) [11]Доброго времени суток, уважаемые.
Интересное кино получается. Тоже работаю с ADO, примерно такие же условия. В чем интересность? А в том, что таких глюков у меня не происходит не только на возвращении пустого набора данных, но и фильтрации пустого набора. Дельфи не пропатчен абсолютно ничем. В качестве базы данных используется Access 2000. Единственное подозрение, может быть вместе с Office устанавливается более новый MDAC, и Дельфи его просто не меняет на свой?
← →
DiggerAbstract (2002-03-22 04:24) [12]ВАМ УЖЕ ГОВОРИЛИ - ЧТО ДЛЯ АДО В ПЯТЕРКЕ НАДО СЕРВИСПАКИ УСТАНОВИТЬ И АПДЕЙТЫ ДЛЯ НЕГО-ЖЕ
← →
Леша (2002-03-22 09:26) [13]Точно, главное апдейты первый и второй поставить.
← →
wicked (2002-03-22 12:09) [14]2 TriNeT ©
а мож ты его уже пропатченный поставил?...
хотя, как я заметил, ОЧЕНЬ МНОГОЕ зависит от ole db провайдера...
← →
@andrew (2002-03-25 12:57) [15]Два вопроса:
1 - А где взять 2-й пак? (На борланде устал искать)
2 - А с Делфи 6 все в порядке?
Спасибо!
← →
Romul (2002-03-25 16:52) [16]В шестых Delphi эта проблема решена.
← →
asafr (2002-03-25 18:01) [17]Короче... ДЛЯ ВСЕХ КТО НЕ ПОНЯЛ ПОВТОРЯЮ СВОЕ ЖЕ СООБЩЕНИЕ ОТ 20.03.02
"Сервис паки надо установить для Д5 и ADOExpress. В этом ошибка. ADOQuery.Open - здесь ни причем. Паки есть на Борландовском сайте. И в кладовке есть программка по устранению "BOF and EOF...", но только я не знаю - будет ли она работать без сервис пака Д5, но это можно проверить. "
с Access эта ошибка не выскакивает...
Если надо будет, повторю это сообщение позже, ибо ОШИБКА В ЭТОМ...
← →
asafr (2002-03-25 18:32) [18]Второй пак можно заменить этим:
http://delphi.mastak.ru/download/other6.html
На этой страничке смотри Aepatch.exe (ADO Express Update Pack)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c