Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 13:09   #1
Rusland
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 16
По умолчанию Запись в базу после нажатия Enter

Есть FibDataset (FbClient) и DbGridEh (DbClient). Я хочу дать пользователю возможность редактировать значения в некоторых ячейках в ДбГриде.
Как обычно это происходит - пользователь редактирует в таблице какое-нибудь значение, нажимает Enter, а затем чтобы значение сохранилось нужно выйти из текущей записи, нажав например на клавиатуре ВВЕРХ или ВНИЗ (мне такой подход не нравится).
Так вот я хочу сделать так чтобы после того как пользователь нажал Enter, то запись сразу бы сохранялась в базу.
Сделал я это так:
Код:
procedure TDM.FbClientFieldChange(Sender: TField);
begin
   FbClient.ApplyUpdates;
end;
Получилось то что хотел: после Enter-а сразу идет запись в базу,
НО теперь если после внесения изменения нажать не Enter, а клавишу ВВЕРХ или ВНИЗ, то выдается ошибка (хоть запись и сохраняется):
Цитата:
FbClient: Dataset not in edit or insert mode'.
Как от нее избавиться?
Видимо Post происходит дважды... вот только где второй раз? (видимо при смене указателя записи, но где конкретно это место... я бы его закомментировал )

PS. У FbClient свойство AutoCommit=true, если это важно.
Rusland вне форума Ответить с цитированием
Старый 13.02.2013, 13:13   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

не дважды, а
Цитата:
OnChange
... т.е. при любом изменении поля.
а чтобы поймать только энтер нужно перенести событие в OnKeyDown и проверять
Код:
if Key = VK_RETURN then // uses Messages
begin
  FbClient.ApplyUpdates;
  Key := 0;
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 13.02.2013, 13:44   #3
Rusland
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 16
По умолчанию

Действительно, такой метод работает и при этом никаких ошибок не вываливается.
Поясните только зачем делать Key:=0; ?
Rusland вне форума Ответить с цитированием
Старый 13.02.2013, 13:58   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

анулируем дальнейшие действия кнопки Enter
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считка нажатия на Enter enjo Win Api 15 04.12.2012 16:37
Получить адрес ячейки до нажатия Enter Sergey112233 Microsoft Office Excel 6 23.08.2011 20:02
Проверка нажатия Enter и переход на метку не работает gefest58 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 01.04.2011 22:03
обработка нажатия ENTER(#13): что-то странное... D][mon Помощь студентам 0 13.10.2010 19:12
отловить нажатие клавиши в ячейке (до нажатия enter) loginrl103 Microsoft Office Excel 3 07.08.2009 15:10