Главная страница
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.016 c
14-90063
Thor
2003-11-03 17:46
2003.11.27
оф. стандарт


4-90178
Kair
2003-10-01 11:18
2003.11.27
ReadDirectoryChangesW


14-90054
Е-Моё имя
2003-11-05 14:57
2003.11.27
Как сделать строку длиной больше мильярда?


14-90072
velial
2003-11-05 12:19
2003.11.27
Team Source или создание приложения в команде


1-89836
DimaK
2003-11-16 17:45
2003.11.27
ProgressBar