Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизА у вас такое бывало? Найти похожие ветки
← →
Ru (2003-11-07 13:01) [0]Есть:
Data - DataModul
TBL - IBQuery
делаю:
with Data so begin
TBL.Active:=false;
//TBL.Close; - что это, что выше, теоретически работает одинаково
TBL.SQL.Clear;//Ошибка!
...
end;
Причем ошибка возникает один раз (если она не возникла, то программа может работать нормально), работает через раз, не зависит от того заполнено ли SQL до запуска или нет.
Кто-нибудь может подсказать, в чём может быть проблема?
← →
Sandman25 (2003-11-07 13:03) [1]1. Какая ошибка?
2. Use debug dcu и трассировку пробовал?
← →
Ru (2003-11-07 13:16) [2]>Sandman25 © (07.11.03 13:03) [1]
>1. Какая ошибка?
АВ по адресу ...
>2. Use debug dcu и трассировку пробовал?
пробовал проходить пошагово. Иногда вылетает, а иногда, как назло постоянно срабатывает.
Да забыл сказать, я вызываю функцию, где содержится данный код на событие FormShow (если это имеет значение).
← →
Sandman25 (2003-11-07 13:20) [3]Странно. Я бы больше понял AV на изменение Active, там хоть могли вызваться Before/After Close/Open. Но при SQL.Clear... Может, есть какие-нибудь патчи для IB компонент... Больше никаких мыслей нет :(
← →
Ru (2003-11-07 13:24) [4]нажал ф9 - вылетело с ав
поставил точку останова на процедуру - вылетело с ав
второй раз - всё прошло гладко.
А что изменится если использовать IBSQL?
← →
Sandman25 (2003-11-07 13:26) [5]>А что изменится если использовать IBSQL?
Смотря, как ты IBQuery используешь.
Если только читаешь, то ничего. Попробуй IBSQL, кто его знает :)
← →
Sandman25 (2003-11-07 13:28) [6]Вру. IBSql не может возвращать record set. Только execquery, никаких open.
← →
Ru (2003-11-07 13:29) [7]>Sandman25 © (07.11.03 13:28) [6]
после IBSQL1.ExecQuery; я ведь смогу считать данные в поток?
← →
Ru (2003-11-07 13:31) [8]ответ отрицательный
← →
Sandman25 (2003-11-07 13:31) [9]Не знаю, я IB компоненты никогда не использовал :)
Я вообще с IB не работаю.
Только в любом случае не будет никаких гарантий. Ситуация с AV ненормальна и ее обязательно нужно исправить.
← →
Ru (2003-11-07 13:33) [10]>Sandman25 © (07.11.03 13:31) [9]
чем я и занимаюсь
← →
MsGuns (2003-11-07 13:47) [11]Если при эксепшине дебугер показывает строку с SQL.Clear, то возбудил прерывание не он, а его предшественник, т.е. TBL.Close
Если у тебя есть обработчики, связанные с событием OnClose этого датасета, то надо искать грех там. Кстати, сам-то запрос каков ? Он возвращает данные или нет ?
← →
Ru (2003-11-07 14:00) [12]>MsGuns © (07.11.03 13:47) [11]
Чукча не дурак ...
TBL.Active:=false;
//TBL.Close;
TBL.SQL.Clear;//а вот в этом мест вылетает ав (при F8)
TBL.SQL.Add("Select * From ibTBL");
TBL.SQL.Add("Where id=:id");
TBL.Params[0].AsInteger:=num;
TBL.Open;
← →
Ru (2003-11-07 14:05) [13]и ещё: Как состояние Connected компонента IBDataBase влияет на работу остальных компонент (IBQuery например) в последующем?
← →
MsGuns (2003-11-07 14:21) [14]>Ru © (07.11.03 14:05) [13]
>и ещё: Как состояние Connected компонента IBDataBase влияет на работу остальных компонент (IBQuery например) в последующем?
Вопрос интересный ;))
Насколько я понимаю, может быть только два события, связанных с изменением этого св-ва: открытие и закрытие БД.
В первом случае ничего особенного не происходит с TIBQuery. Т.е. он (объект) этого просто "не видит", если, конечно в соотв. событии он не открывается.
Во втором, если TIBQuery открыт, то сначала завершается соотв.транзакция, в контексте которой выполняется запрос, что в свою очередь приводит к закрытию запроса. Немного коряво сказал ;((
В общем, требуется посещение ibase.ru для подробного ознакомления с транзакциями.
Единственно, что могу посоветовать "вслепую",- это не держать в проекте коннект с базой открытым. Это типа совета для безопасности вообще ;)
← →
kaif (2003-11-08 19:57) [15]Мне кажется, здесь все очень просто.
На момент FormShow у тебя не создан еще DataMiodule.
Переставь в файле проекта *.dpr создание формы и создание модуля данных так, чтобы тот был на первом месте.
А то, что Access Violation не срабатывает на
TBL.Active := false;
совершенно ненормально, но может объясняться работой оптимизатора. Просто при компиляции программы, умный компилятор, увидев, что TBL.Active и так False просто не оттранслировал эту команду.
← →
MsGuns (2003-11-08 23:50) [16]>kaif © (08.11.03 19:57) [15]
Мудрим ? ;))
← →
kaif (2003-11-09 04:20) [17]2 MsGuns © (08.11.03 23:50) [16]
Ну так я пытаюсь найти объяснение.
Как может быть такое?
Чукча не дурак ...
TBL.Active:=false;
TBL.SQL.Clear;//а вот в этом мест вылетает ав (при F8)
?????????????????????
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c