Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Вниз

Как использовать метод Refresh в компоненте IBDataSet 


Анатолий   (2002-03-04 12:04) [0]

В свойствах компонента IBDataSet я описал свойства для работы
с одной таблицей в базе данных InterBase ver 6.0 от 10.01.2001:

SelectSQL :
"select ADRESS, PARAM, VAL_TT from SOSTT"

RefreshSQL :
"Select
ADRESS,
PARAM,
VAL_TT
from SOSTT
where
ADRESS = :ADRESS and
PARAM = :PARAM and
VAL_TT = :VAL_TT"

Далее в программе
применяю метод
...
IBDataSet1.Open;
...
IBDataSet1.Refresh;
...
Программа компилится без ошибок, но набор данных не изменяется,
остается таким,каким был при первоначальной загрузке.
Мастера-коллеги, помогите разобраться в проблеме.
Заранее благодарен , Анатолий.



Alexandr   (2002-03-04 12:21) [1]

дык естественно.
Ведь если одно из полей изменилось, (что ты хочешь увидеть после refresh), то Refresh не вернет ниодной записи.

Первичного ключа не хватает...



Arhelon   (2002-03-04 12:46) [2]

Я не совсем понимаю из Твоего кода, что должно измениться с набором данных, но одно могу сказать точно, что DataSet.Refresh с начала времён в Дельфях не работает. Ежли хотишь рефрешнуть то делай Close потом Open.



Анатолий   (2002-03-04 12:46) [3]

Alexandr, Вы говорите что не хватает первичного ключа,но
если это Primary Key , то он есть,сформирован на этапе создания табиицы по полю ADRESS,которое ктати тоже указано в наборе
данных IBDataSet компонента ... ?!



Arhelon   (2002-03-04 12:46) [4]

Я не совсем понимаю из Твоего кода, что должно измениться с набором данных, но одно могу сказать точно, что DataSet.Refresh с начала времён в Дельфях не работает. Ежли хотишь рефрешнуть то делай Close потом Open.



Анатолий   (2002-03-04 12:47) [5]

Alexandr, Вы говорите что не хватает первичного ключа,но
если это Primary Key , то он есть,сформирован на этапе создания табиицы по полю ADRESS,которое ктати тоже указано в наборе
данных IBDataSet компонента ... ?!



Alexandr   (2002-03-04 12:53) [6]

тогда RefreshSQL делай по этому полю


RefreshSQL :
"Select
ADRESS,
PARAM,
VAL_TT
from SOSTT
where
ADRESS = :ADRESS


да, и транзакция ReadCommited или как там у тебя вообще с транзакциями...



Анатолий   (2002-03-04 13:44) [7]

Alexandr, а на форму ,в смысле транзакций, брошен компонент
IBTransaction1 со свойством :
DefaultAction:=TACommit;
ReadCommited - такого свойства или метода я в этом компоненте что-то не видел ...



Анатолий   (2002-03-04 14:04) [8]

Alexandr, я опять к Вам, если вы еще от меня не устали.
Обновление набора данных работает железно в IBDataSet и
в IBTable когда делаешь IBDataSet.Connected:=False, а затем
IBDataSet.Connected:=True. Если этого нет,то и Close/Open
не помогает.Но это не всегда удобно применять в программе ,
поэтому и обратился к ВАМ, мастерам ...



Arhelon   (2002-03-04 14:31) [9]

У IBDataSet нет такого понятия как Connected он есть у IBDataBase
B когда Ты его меняешь то происходит всё тоже что и когда делаешь Open/Close. Не совсем понимаю что Тя не устраивает в таком способе. Хотя повторюсь Ревреш НЕ РАБОТАЕТ то есть работает но не с базой



Анатолий   (2002-03-04 14:44) [10]

Arhelon, да, конечно, есть понятие IBDataBase.Connected,
это я описался, первый раз на форум пишу.Значит так тому
и быть,метод Refresh в IBX компонентах при работе с InterBase
не работает,может быть со стандартными из Data Access тоже,
не пробовал.
Спасибо за полезный диалог.



Fareader   (2002-03-04 14:44) [11]

Перед тем как сделать рефреш сделай

IBTransaction1.CommitReatining

должно помочь.
Чтобы видеть изменения надо либо откатывать транзакцию либо ее подтверждать, CommitReatining - подтверждает изменения, не закрывая датасеты



Анатолий   (2002-03-04 14:45) [12]

Arhelon, да, конечно, есть понятие IBDataBase.Connected,
это я описался, первый раз на форум пишу.Значит так тому
и быть,метод Refresh в IBX компонентах при работе с InterBase
не работает,может быть со стандартными из Data Access тоже,
не пробовал.
Спасибо за полезный диалог.



Анатолий   (2002-03-04 14:46) [13]

Arhelon, да, конечно, есть понятие IBDataBase.Connected,
это я описался, первый раз на форум пишу.Значит так тому
и быть,метод Refresh в IBX компонентах при работе с InterBase
не работает,может быть со стандартными из Data Access тоже,
не пробовал.
Спасибо за полезный диалог.



Fareader   (2002-03-04 14:47) [14]

Перед тем как сделать рефреш сделай

IBTransaction1.CommitReatining

должно помочь.
Чтобы видеть изменения надо либо откатывать транзакцию либо ее подтверждать, CommitReatining - подтверждает изменения, не закрывая датасеты



Анатолий   (2002-03-04 15:02) [15]

Fareader , не компилится это дело,как вы подсказываете,
я дал код как Вы подсказали :

IBTransaction1.CommitReatining;
затем
IBDataSet.Refresh;
но вот что ВЫШЛО !!!
[Error] Kkp_vvv.pas(281): Undeclared identifier: "CommitReatining"



Alexandr   (2002-03-04 15:09) [16]

retaining



Arhelon   (2002-03-04 15:11) [17]

Походу у Тебя IBX не совсем последний. Если вообще он у Тя есть.



Fareader   (2002-03-04 15:13) [18]

Прошу прощения %)

retaining

Спасибо Alexandr! Ты всегда на страже там где обсуждается InterBase :)



Анатолий   (2002-03-04 15:26) [19]

Fareader, теперь компилитсяIBTransaction1.CommitRetaining
,но Refesh не обновляет набор,попрежнему,видимо прав Arhelon,Refesh не работает с DataSet компонентами в IB,или он не прав ... мастера ???



Arhelon   (2002-03-04 15:44) [20]

Я прав потому как ещё с первых Дельфей енто у них такой косяк.
Ежли не хотишь чтоб сильно моргал грид отключай конрол и становись на ту-же запись потом включай.
Рефрешь работает тока для клиента а ежли другой клиент внес какието изменения то рефреш не покажет.



Fareader   (2002-03-04 15:51) [21]

>Arhelon © Рефрешь работает тока для клиента а ежли другой клиент внес какието изменения то рефреш не покажет

Фигня. Если сделать CommitRetaining, то "качнуться" свежие данные, независимо кто их внес, а по принципу "кто последний - тот и папа" :)



Arhelon   (2002-03-04 15:58) [22]

Fareader © Насчет фигни не знаю но на практике данные не поднимаются.



Fareader   (2002-03-04 16:00) [23]

А ты уверен, что вообще что изменилось?
А зачем тебе обновлять только одну запись? Может кто-то изменил еще что-то, а ты видеть не будешь.



Alexandr   (2002-03-05 07:16) [24]

2Fareader:
>А зачем тебе обновлять только одну запись? Может кто-то изменил >еще что-то, а ты видеть не будешь.
Однако когда как. Иногда надо так, иногда так.

2Arhelon: Бред сивой кобылы. Какого хрена бы не работал Refresh. Так бы и писал "У МЕНЯ рефреш не работает еще с первой версии Delphi, потому что у меня руки не от туда растут" Извини за грубость, но иначе никак нельзя было...

2Анатолий: Есть такой компонент IBSQLMonitor-посмотри чего он при refresh показывает. Разбирайся Все должно быть нормально.



Arhelon   (2002-03-05 08:35) [25]

ту Alexandr Я Тебе на мало выслал примерчик. Покажи ПЛЗ откеда руки у мня растут



Alexandr   (2002-03-05 09:24) [26]

я тебе уже ответ выслал



Arhelon   (2002-03-05 09:57) [27]

Сорри просто про разное говорили.
Я говорои про рефреш кучи записей а не одной.



Alexandr   (2002-03-05 10:17) [28]

тогда close/open




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.049 c
1-90913           Merle Corey           2002-03-18 15:15  2002.03.28  
Создание компонента


3-90809           Михаил с              2002-03-04 13:17  2002.03.28  
Проблема с InterBase


1-90820           Malder                2002-03-15 19:49  2002.03.28  
Русифиация Delphi ресурсов...


1-90880           Olivka                2002-03-16 19:27  2002.03.28  
мышь и прокрутка StringGrid-a


1-90826           Aleksandr             2002-03-15 14:03  2002.03.28  
Почему у потока вызывается Terminate?