![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с IBX [D7]
Zoostal © (2005-10-24 18:13:00)Был у меня написан код. И работал он собственно очень хорошо, до тех пор как я не переставил винды. Теперь, спустя 2 месяца я вернулся к проекту, и он работает просто очень странно. Сначала когда я открыл проект, я удивился что компилятор ругается на IBTransaction.AllowAutoStart. Я закаментировал, все запустилось, но стало работать странно. Потом я вспомнил что надо бы IBX обновить, скачал с ibase.ru апдейт для Дельфи 7. Поставил. IBTransaction.AllowAutoStart теперь он понимает, но... все равно работает просто ужасно странно. Точнее не работает.
Вот код
Db:=TIBDataBase.Create(nil);
Tabl:=TIBTable.Create(nil);
q:=TIBQuery.Create(nil);
IBTransaction1:=TIBTransaction.Create(nil);
IBTransaction2:=TIBTransaction.Create(nil);
Db.DatabaseName:='c:\io.gdb';
Tabl.Database:=Db;
TablModems.Database:=Db;
Q.Database:=Db;
IBTransaction1.AddDatabase(db);
IBTransaction2.AddDatabase(db);
Q.Transaction:=IBTransaction2;
Tabl.Transaction:=IBTransaction1;
IBTransaction1.AllowAutoStart:=True;
IBTransaction1.AutoStopAction:=saCommit;
IBTransaction1.Params.Add('read_committed');
IBTransaction1.Params.Add('rec_version');
IBTransaction1.Params.Add('nowait');
Q.Close;
Q.SQL.Text:='Select * from ExTable where status=0';
Q.Open;
Например вот на последней строчке иногда происходит не понятное - дебуг до этой строчки доходит и выходит в небытие. То есть вроде как интефейс работает, форму можно таскать, но выполнение кода на Q.Open просто прекращается. При том через раз, то работает то нет.
Tabl.Open;
WasSet:=True;
Tabl.Locate('ID',q.fieldByName('ID').AsInteger,[loCaseInsensitive]);
Tabl.Edit;
Tabl.FieldByName('Status').AsInteger:=3;
Tabl.Post;
Tabl.Transaction.Commit;
Точно также затыкается на Tabl.Locate и т.п. При том буквально через раз... в чем дело понять не могу, мне кажется что-то с компонентами, потому что раньше все вроде работало.
Подскажите пожалуйста, в чем может быть дело ?
Noosfert (2005-10-25 13:57:00) [1]а что есть могут быть проблемы от IBTable ? сейчас попробую все заменить. Спасибо большое, в любом случае.
Johnmen (2005-10-25 13:44:00) [2]Ну нет у меня правдоподобных версий...
Но одно могу сказать наверняка: использование TIBTable м.привести к необъяснимым явлениям...:)
А у тебя его применение и вовсе неуместно. Ибо всё это делается простыми запросами UPDATE ...
Noosfert (2005-10-25 11:51:00) [3]убрал, ничего не изменилось.
Соединение с БД
Db.DatabaseName:='c:\io.gdb';
Db.DefaultTransaction:=IBTransaction1;
Db.Params.Add('user_name=sysdba');
Db.Params.Add('password=masterkey');
Db.LoginPrompt:=False;
Db.Open;
SqlDialect и прочие свойства я не трогал, все default'овое как конструктор их создает.
Johnmen (2005-10-25 11:16:00) [4]>Кстати, все это реализовано в потоке, хотя это и не так важно.
М.б. важно.
Где соединение с БД?
>Tabl.Locate('ID',q.fieldByName('ID').AsInteger,[loCaseInsensitive])
Зачем loCaseInsensitive??? Убери!
Noosfert (2005-10-25 11:11:00) [5]Кстати, все это реализовано в потоке, хотя это и не так важно.
В дебуге идешь по строчкам и на Tabl.Locate('ID',q.fieldByName('ID').AsInteger,[loCaseInsensitive]) просто дальше ничего не идет. Ну прям совсем. То есть на следующую строчку он уже не приходит и все...
Johnmen (2005-10-25 10:58:00) [6]Ещё вопрос.
>Q.Open;
>Например вот на последней строчке иногда происходит не понятное - дебуг
>до этой строчки доходит и выходит в небытие. То есть вроде как интефейс
>работает, форму можно таскать, но выполнение кода на Q.Open просто
>прекращается. При том через раз, то работает то нет.
Как определил, что прекращается?
Zoostal (2005-10-25 10:47:00) [7]Я не темню. Во что AutoStopAction не ставь работает точно так же. А раньше все работало. Именно этот код работал отлмчно :(
Johnmen (2005-10-24 18:41:00) [8]Что-то ты темнишь.
Ибо AutoStopAction+F1 однозначно говорит про наборы данных в этой связи...:)
Noosfert (2005-10-24 18:21:00) [9]вспомнил еще одно отличие, раньше у меня был InterBase 5.5 установлен, а теперь FireBird.