Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: CL | DM;

Вниз

Привет Всем! Как бороться с ошибкой.   Найти похожие ветки 

 
@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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-46514
BAHO
2002-02-21 05:51
2002.04.15
Клава-Крыс


1-46412
sdram
2002-04-02 16:41
2002.04.15
Как вывести в отчете значения формул из базы.


7-46524
SAlex
2002-01-23 05:13
2002.04.15
Как определить возможные размеры шрифтов в системе


1-46371
Biorobot
2002-04-01 18:54
2002.04.15
как сделать: неактив. прога учитывала бы нажатие клавиш?


1-46427
RUS1
2002-04-01 15:57
2002.04.15
Как проверить что файл занят другим приложением