![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
изменения значения 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]В Эксперте комит делаешь?