Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.11;
Скачать: CL | DM;

Вниз

Как заставить НД не обманывать?   Найти похожие ветки 

 
AM   (2002-10-22 13:43) [0]

Всем доброго дня! Ситуация: На форме есть DBGrid1 и DBEdit1. У них один и тот же источник данных DataSource1.
Query1 - это Dataset для DataSource1.

Я нужно сделать обновление (переоткрыть) Query1, так как в таблице из которой я делал запрос были произведены изменения, и при этом мне надо чтобы курсор оставался на на той же записи:

Var
LocVal;

...
Query1.DisableControls;
LocVal:= Query1.FieldValues["ID"] //ID - ключевое поле
Query1.Active:= False;
Query1.Active:= True;
Query1.Locate("ID", LocVal, []);
Query1.EnableControls;

И какой вы думаете результат?
Если в этой текущей записи были произведены изменения, то в DBGrid эти изменения отражаются, а значение, которое показывает DBEdit - остается старым. Чтобы оно изменилось, надо выйти из записи и снова в нее зайти...
Как мне сделать, чтобы значение в DBEdit, тоже обновлялось?
Подскажите пожалуйста...
ни Refresh ни Repaint не помагают...


 
Johnmen ©   (2002-10-22 15:01) [1]

Такого не могёт быть !
Либо что-то не договариваешь, либо ошибка в проге, либо уж не знаю, что...:)))

А что, запрос редактируемый ? Раз используется DBEdit ?


 
AM   (2002-10-22 15:26) [2]

>> Такого не могёт быть !
на самом деле я с этим сталкиваюсь не раз, с различными БД.

>>А что, запрос редактируемый ? Раз используется DBEdit ?

Да нет, запрос ReadOnly.
DBEdit используется как информационное табло. Дело даже не в DBEdit, даже с DBMemo тоже самое...
Опишу:

Есть таблица заказов.
Делается запрос, и в результате получаю:

[Номер заказа], [дату], [Время исполнения], - это все находится в DBGrid-e.
А с права от DBGrid находится всякие DBEdit-ы и DBMemo, в которых [описание заказа], [кто принял], [кто исполнл] и т. д.
Так сделано для удобства, в грид все не поместишь.
Передвигаясь по гриду значения в этих DBEdit-ах и DBMemo меняются согласно данной записи...
И если я нахожусь на строке c заказом №5, а Вася Пупкин меняет в этом заказе [дату] и [кто исполнил], и после этого я переоткрываю НД, чтобы освежить данные, то значение в Gride [дата] меняется, а знечение [кто исполнил] в DBEdit не меняется...

Единственный у меня выход получился:
делать
Query1.Locate("ID", LocVal, []);
не до а после
Query1.EnableControls;

но при этом сами понимаете неприятные скачки изображения буду получаются, особенно на медленных компах...



 
Johnmen ©   (2002-10-22 16:02) [3]

Вообще-то для такого отображения инфы в самый раз DBText...

Ну не верится мне, почему-то, что имеет место такое поведение !
Можно, конечно, в невероятном предположении грешить на глюк используемых компонентов...Я так понимаю, что используется BDE ?


 
MsGuns ©   (2002-10-22 16:10) [4]

По-моему, дело не в BDE, а в том, что делфа не считает нужным обновлять другие контролы, кроме того, на котором фокус. Попробуй TDBEdit.Update (Или всю панель, если контролов много)
Можно еще "скакануть" фокусом туда-обратно.


 
AM   (2002-10-22 16:10) [5]

Да через BDE... я тоже вообще его подозреваю... тут такой момент взаимодействия компонента и BDE... а он (компонент) такое ощущение, что замерзает...
если ни кто не сталкивался, может это от конкретной версии Delphi, который у меня ... надо попробовать на 4-ом и 6-ом...

попробую компонент DBText...


 
AM   (2002-10-22 16:20) [6]

>>MsGuns © (22.10.02 16:10)
>>что делфа не считает нужным обновлять другие контролы, кроме
>>того, на котором фокус.

да, после того как я курсор устанавливаю в DBEdit - он тут же меняет значение на нужное...
может после обновления НД пройтись по всем DBEdit-ам командой SetFocuse :)


 
AM   (2002-10-22 16:39) [7]

c DBText - тоже самое получается...
Хочу кстати заметить, что с Paradox я точно такое же писал, и таких грехов замечено не было (открыл старые исходники другой программы).
Видимо взаимодействие DB компонентов Delphi с Paradox идет совсем по другим методам, чем с другими БД...

Интересно знать, а через ADO наверное такого нет (?)


 
MsGuns ©   (2002-10-22 17:38) [8]

>AM (22.10.02 16:20)
>может после обновления НД пройтись по всем DBEdit-ам командой >SetFocuse :)

Я бы просто положил все контролы, отображающие датасет, на одну панель и ей бы после рефреша давал Update.


 
blackman ©   (2002-10-22 17:55) [9]

DBEdit.refresh;


 
AM   (2002-10-22 18:05) [10]

blackman © (22.10.02 17:55)

Не помогает ни Refresh ни Repaint.

Кстати,
MsGuns © (22.10.02 17:38)

кстати DBEdit.Update - тоже не помогает.

Я пришел к двум решениям:
1. Либо я меняю у всех DBEdit-ов DBMemo - DataSource на какой-либо пустой, перед тем как сделать Query.EnableControls, а потом на то что мне надо...
2. Либо после Query.EnableControls Делать Query.Next, Query.Prior.

1-ый более нудный но не вызывает дерганий...







 
Johnmen ©   (2002-10-22 18:10) [11]

1. Не нудный, а самый подходящий...:)) Всего-то 2 строки кода...



 
AM   (2002-10-22 18:19) [12]

Johnmen © (22.10.02 18:10)

Не две, у меня DBEdit-ов 14 штук.

В любом случае все спасибо за предложения и удачи!


 
AM   (2002-10-22 18:19) [13]

Johnmen © (22.10.02 18:10)

Не две, у меня DBEdit-ов 14 штук.

В любом случае всем спасибо за предложения и удачи!


 
Val ©   (2002-10-22 19:03) [14]

>AM (22.10.02 18:19)
Не две, у меня DBEdit-ов 14 штук.
ну 4 отсилы :)



Страницы: 1 вся ветка

Текущий архив: 2002.11.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-33971
besenok
2002-11-01 14:10
2002.11.11
Что-то клин какой-то наступил, не могу вспонить как посмотреть


14-34159
Карлсон
2002-10-20 14:25
2002.11.11
усы, бакенбарды, бороды.


1-33979
ab programmer
2002-11-01 14:00
2002.11.11
Как поймать вывод консольного приложения


14-34226
RV
2002-10-19 10:59
2002.11.11
Меня сегодня убьют....


3-33884
weak
2002-10-22 14:57
2002.11.11
Количество дней в месяце