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

Вниз

А у вас такое бывало?   Найти похожие ветки 

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

Наверх




Память: 0.51 MB
Время: 0.015 c
3-89749
ST_
2003-11-07 22:02
2003.11.27
DBCtrlGrid


1-89963
Magical
2003-11-16 19:30
2003.11.27
Как эмулировать нажатие ctrl-alt-del


8-90007
pasha676
2003-07-30 14:32
2003.11.27
WDM капчур. Свойства фильтров


3-89761
trd
2003-11-07 14:05
2003.11.27
Связь с SQL Server ом


1-89806
Uran
2003-11-18 19:04
2003.11.27
Системные переменные