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

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

изменения значения IBX [D7, IB6.x]


BeginerEmpty ©   (2005-02-21 11:59:00) 

У меня в потоке работает вот такой код. Поле "статус" при добавлнии стояло равным 0. В этом месте я отслеживаю изменение статуса. Однако когда я IBExpert'ом меняю значение этого поля, ничего не происходит и статус=0 хотя в базе уже другое значение.

В чем может быть дело ???

while not Reciv do
 begin
  Q.Close;
  Q.SQL.Text:='Select * from ExTable where id='+IntToStr(idmon);
  Q.Open;
  if Q.RecordCount>0 then
   if Q.FieldByName('Status').AsInteger<> 0 then
    begin
     Reciv:=False;
    end;
   Sleep(1000);
 end;


BeginerEmpty   (2005-02-21 15:59:00) [1]

Johnmen ©
спасибо за совет :))) Все вроде заработало, я создавал IBTransaction вручную, а оказывается при этом по умолчанию read_commited и no_wait не стоит...

Всем ОГРОМНОЕ спасибо что мне помогли. Жутко когда не знаешь что делать и никто не отвечает ! Спасибо!


Sergey13   (2005-02-21 15:58:00) [2]

2[12] BeginerEmpty   (21.02.05 15:43)
>нет, recordcount срабатывает нормально, запись он находит и там 1
по твоему recordcount находит запись? Интересное предположение. 8-)
Если уж так приспичило сделай перед   if Q.RecordCount>0 then
Q.FetchAll или Q.Last


Johnmen   (2005-02-21 15:50:00) [3]

>хотя когда это кончиться не знаю :((

А я знаю.
Когда книжку почитаешь по теме...:)


BeginerEmpty   (2005-02-21 15:43:00) [4]

нет, recordcount срабатывает нормально, запись он находит и там 1. А вот следующую проверку Q.FieldByName('Status').AsInteger не проходит потому что эта сволочь все равно равно 0, хотя в базе она уже другое значение имеет  :(((( Почему так я не понимаю. Если переподключить базу то все нормально, но это не метод. Я вообще в глубокой депрессии - не знал что можно поймать затык в почти целый рабочий день, хотя когда это кончиться не знаю :((


BeginerEmpty   (2005-02-21 15:42:00) [5]

нет, recordcount срабатывает нормально, запись он находит. А вот следующую проверку Q.FieldByName('Status').AsInteger не проходит потому что эта сволочь все равно равно 0 :(((( Почему так я не понимаю. Если переподключить базу то все нормально, но это не метод. Я вообще в глубокой депрессии - не знал что можно поймать затык в почти целый рабочий день, хотя когда это кончиться не знаю :((


Johnmen   (2005-02-21 15:30:00) [6]

>В ветку входитно показывает 0.
>if Q.RecordCount>0 then

?!


BeginerEmpty   (2005-02-21 15:27:00) [7]

В ветку входит но показывает 0. Попробывал не Query а таблицу. В цикле закрываю ее, открываю заново и ищю по ИД нужную строку. Все равно не видит изменений, хотя SqlExplorer и IBExpert показывают что значение изменилось. такое ощущение что пока база не пересоедениться он эти изменения не видит, видит только свои.


Sergey13   (2005-02-21 15:23:00) [8]

А отладчиком по [3] Johnmen ©   (21.02.05 12:12) проверял? Заходит в ветку?


BeginerEmpty   (2005-02-21 14:54:00) [9]

Народ, спасайте !! Не работает ничего. Не видит внешние обновления таблиц которые я делаю в IB Expert'е, хоть трава не расти :((((

Db.Connected:=True;
Tabl.Active:=True;
Q.SQL.Text:='select gen_id(extablegen, 1) from rdb$database';
Q.Open;
idmon:=Q.fieldByName('GEN_ID').AsInteger;
Q.Close;
Tabl.Append;
Tabl.FieldByName('ID').AsInteger:=idmon;
Tabl.FieldByName('TYPE').AsInteger:=0;
Tabl.FieldByName('STATUS').AsInteger:=0;
Tabl.FieldByName('DATA').AsString:=Wht;
Tabl.Post;
IBTransaction1.Commit;

Reciv:=False;
while not Reciv do
 begin
  Q.Close;

  Q.CachedUpdates:=False;
  Q.SQL.Text:='Select * from ExTable where id='+IntToStr(idmon);
  Q.Open;
  if Q.RecordCount>0 then
   if Q.FieldByName('Status').AsInteger<> 0 then
    begin
     Reciv:=True;
    end;
   Sleep(1000);
 end;

Меняю значения поля "статус" но ничего не происходит :((((


BeginerEmpty   (2005-02-21 12:26:00) [10]

спасибо, CacheUpdate поставил вроде все заработало :)


Sergey13   (2005-02-21 12:22:00) [11]

2 BeginerEmpty  
Чему равно Reciv до цикла? Подозреваю что False.
В
  if Q.FieldByName('Status').AsInteger<> 0 then
   begin
    Reciv:=False;
   end;

else не хочешь добавить? Иначе как оно сменится то?
if Q.FieldByName('Status').AsInteger= 0 then  Reciv:=False
 else  Reciv:=True;


BeginerEmpty   (2005-02-21 12:19:00) [12]

Это условие всегда срабатывает, почему оно не должно срабатывать ? Не срабатывает следующее if Q.FieldByName('Status').AsInteger<> 0
хотя в базе значение поменялось. Может быть что-то связано с CacheUpdate ? я IBX пользуюсь первый раз.


Johnmen   (2005-02-21 12:12:00) [13]

Вот это условие if Q.RecordCount>0 thenв данном антураже ВСЕГДА будет возвращать False.


BeginerEmpty   (2005-02-21 12:06:00) [14]

да, делаю. даже отконекчиваюсь от базы и подключаюсь снова. Значение изменено, но программа не реагирует, показывает 0 в поле статуса.


Sergey13   (2005-02-21 12:03:00) [15]

В Эксперте комит делаешь?


Наверх

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