Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.01 c
3-89713
Disruptor
2003-11-10 08:32
2003.11.27
Выполнить скрипт (например 500 инсертов) одним разом.


1-89913
R
2003-11-18 04:26
2003.11.27
Скрытие формы


1-89871
Мыш
2003-11-15 21:03
2003.11.27
ОЧЕНЬ много вопросов об указателях


3-89694
LittleGirly
2003-11-05 15:26
2003.11.27
View в DBGrid


3-89691
Denisiy
2003-11-06 12:11
2003.11.27
Ошибка после прерывания проги в отладке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский