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