Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк в ДБГрид. [D7, XP]


Страницы:   1 2

drink ©   (2006-02-07 22:44:00) 

Глюк в DBGrid. Доброе время суток, всем. У меня такая проблема, при редактировании данных в ДБГрид, если фокус ввода переместился и там данные не изменялись, то данные не изменяются и диалоговое окно не вылетает, как - будто таблица не изменялась. У меня при закрытии окна вылетает диалоговое окно, ну типа сохранить изменения или нет. Может кто-нибудь встречался с подобной проблемой, объясните, как исправить?

Это процедура закрытия окна.

procedure TForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if DataModule1.ADOTable.Modified then
case Application.MessageBox(PChar(
Сохранить изменения в документе ?)
,'Внимание',MB_YESNOCANCELMB_ICONEXCLAMATION)of
id_YES:
begin
DataModule1.ADOTable.Post;
end;
id_NO:
begin
DataModule1.ADOTable.Cancel;
end;
id_CANCEL:CanClose:=false;
end;
end;
end;

Зарание спасибо


drink   (2006-02-11 10:27:00) [1]

thenks


ЮЮ   (2006-02-11 08:10:00) [2]

Поставить такой же "дикий" обработчик на DataSet.BeforeScroll:

if DataModule1.TownTable.State in [dsEdit,dsInsert] then

case Application.MessageBox(PChar(
'Сохранить изменения в документе?')        
,'Внимание',
MB_YESNOCANCEL+MB_ICONEXCLAMATION)of
id_YES: ;
id_NO: DataModule1.TownTable.Cancel;
id_CANCEL: Abort;
end;

Но в таком случае, лучше редактировать данные на отдельной форме, а не на гриде, ибо убивается те плюсы, котрые дает редактирование в гриде.


Desdechado   (2006-02-10 22:42:00) [3]

нельзя, имхо
это стандартное поведение - перешел на другую запись, значит, согласен с изменениями в текущей


drink   (2006-02-10 21:36:00) [4]


> На другую ячейку этой же записи или другой? Если Другой,
>   то Post выполнится без твоего участия.


ЮЮ, извини, а можно это как-нибудь выключить? Если можно то как?


Desdechado   (2006-02-10 18:00:00) [5]

и проблема, как обычно, в драйвере ruki.sys
иначе бы сообщил, что не так делал


drink   (2006-02-10 17:38:00) [6]

Все, народ не парьтесь. Допёр, все работает, всем огромное спасибо.


drink   (2006-02-10 17:30:00) [7]


>
>
> На другую ячейку этой же записи или другой? Если Другой,
>  то Post выполнится без твоего участия.


Переместил фокус на ячейку другой записи. Да, но программа не спросила сохранить изменения или нет.


ЮЮ   (2006-02-10 09:49:00) [8]


> 1. Изменил данные в одной ячейки.
> 2. Переместил фокус на другую ячейку. В этой ячейки, данные
> не изменял.
> 3. Закрыл таблицу.
> 4. Программа не спросила, сохранить изменения или нет, а
> должна.


На другую ячейку этой же записи или другой? Если Другой, то Post выполнится без твоего участия. О состоянии DataSet-а говорит также значок в первой колонке грида. Если он изменился на ">" после потери фокуса гридом, значит сработал какой-то обработчик. Само собой ничего не делается.

Поставь брэк-поинт на
if DataModule1.TownTable.State in [dsEdit,dsInsert] then
и проверь этот State  во время срабатывания обработчика


evvcom   (2006-02-10 08:51:00) [9]

Ну а F7/F8 чего говорят? Или ты с ними не знаком? Ты хоть в эту FormCloseQuery попадаешь? А то поди слетел обработчик в дизайне, а ты сидишь и репу чешешь, да нам по ушам ездишь.


drink   (2006-02-10 08:48:00) [10]


> А где "закрытие таблицы"?


procedure TTownBookForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);


> Поэтому вместо непонятного Modified рекомендую проверять
> DataSet.State:
> См.[4] - уже полтора суток назад дали правильный совет.
>


см. [14]

Результат тот же самый.


ЮЮ   (2006-02-10 03:24:00) [11]

Note: In general, an application need not check the status of Modified. Properties, events, and methods of TDataSet and its descendants that modify records generally check this status automatically and take appropriate actions based on its value.

Поэтому вместо непонятного Modified рекомендую проверять DataSet.State:
См.[4] - уже полтора суток назад дали правильный совет.

if DataModule1.ADOTable.State in [dsEdit,dsInsert] then
 далее по тексту


Johnmen   (2006-02-10 00:32:00) [12]

А где "закрытие таблицы"?


drink   (2006-02-09 22:27:00) [13]

procedure TTownBookForm.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);


drink   (2006-02-09 22:23:00) [14]

if DataModule1.TownTable.State in [dsEdit,dsInsert] then
case Application.MessageBox(PChar(
'Сохранить изменения в документе?')        
,'Внимание',
MB_YESNOCANCEL+MB_ICONEXCLAMATION)of
id_YES:
DataModule1.TownTable.Post;
id_NO:
DataModule1.TownTable.Cancel;
id_CANCEL:
CanClose:=false;
end;


Desdechado   (2006-02-09 22:11:00) [15]

покажи код, где ты использовал совет


drink   (2006-02-09 21:44:00) [16]


> drink ©   (08.02.06 19:14) [9]
> вы все еще вывариваете? тогда это диагноз...
> а мог бы использовать [4]


Desdechado, я использовал ваш совет, реакция тажа самая!!!!

1. Изменил данные в одной ячейки.
2. Переместил фокус на другую ячейку. В этой ячейки, данные не изменял.
3. Закрыл таблицу.
4. Программа не спросила, сохранить изменения или нет.


Desdechado   (2006-02-09 16:48:00) [17]

drink ©   (08.02.06 19:14) [9]
вы все еще вывариваете? тогда это диагноз...
а мог бы использовать [4]


evvcom   (2006-02-09 13:53:00) [18]


> Программа не спросила, сохранить изменения или нет, а должна.

C какого перепугу она тебе чего-то должна? Компонент выставил соответствующие флаги, а уж анализировать их или нет, это дело твое, а не "программы".


drink   (2006-02-08 19:14:00) [19]

ZeroDivide, спасибо за совет. Но мне хотелосьбы редактировать в DBGride.

...и там данные не изменялись, то данные не изменяются
А глюк в чем? Все так и должно быть.

Дело в том что что они совсем не изменяются, даже там где изменялись.

1. Изменил данные в одной ячейки.
2. Переместил фокус на другую ячейку. В этой ячейки, данные не изменял.
3. Закрыл таблицу.
4. Программа не спросила, сохранить изменения или нет, а должна.


evvcom   (2006-02-08 15:01:00) [20]


> Если мне не изменяет память, то событие AfterPost возникает
> только при переходе на другую запись в НД.

Изменяет. Только после Post. А Post можно вызвать либо явно, либо неявно, находясь в режиме dsEdit или dsInsert, переходом на другую запись.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо