Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо