Форум: "Базы";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];
ВнизКак заставить НД не обманывать? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c