Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-33920
Jeka.
2002-10-22 08:17
2002.11.11
Опять индексы и временные таблицы.


4-34288
Bukerman
2002-09-27 20:16
2002.11.11
DestroyWindow


1-34106
jcrush
2002-10-31 16:34
2002.11.11
про скины


14-34250
Zergling
2002-10-22 13:33
2002.11.11
C#


3-33897
Utyg
2002-10-22 19:20
2002.11.11
ПОМОГИТЕ ЛАМЕРУ!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский