Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Предохранение от автодобавления записи

Delphi , Базы данных , Записи

Предохранение от автодобавления записи

Автор: Bill Curtis (Borland International)

Мне необходимо как-то предотвратить автоматическое добавление записей в таблицу. Может быть предусмотреть какую-то хитрость для создания новой записи в табличной сетке?

Попробуй это (я правда оставил некоторый мусор после испытаний кодов клавиш). Для DBGridkeydown используй:


begin
  s := 'ASCII код клавиши ' + IntToStr(Ord(key)) + ' десятичное';
  { showmessage(s); }
  s :=IntToStr(Ord(key));
end;

И затем в TTable сделайте следующее:


begin
  if s<>'45' then
    raise Eabort.create('');
  s:='';
end;

Естественно, "s" должна быть объявлена глобально.

Here's the translation of the text into Russian:

Вечная погоня за предотвращением неожиданных добавлений записей в базе данных!

Ваш подход интересен, и я предоставлю некоторые отзывы на ваш код.

Анализ проблемы

Вы хотите предотвратить автоматическое добавление записей при нажатии пользователем определенных клавиш (например, "Вставка" или "Enter") при редактировании TTable. Вы используете компонент DBGrid для взаимодействия с таблицей.

Обзор кода

Ваш первый кусок кода - обработчик события OnKeyDown вашего DBGrid. Он пытается поймать ASCII-код нажатой клавиши и хранить его в глобальной переменной s.

Второй кусок кода - обработчик события OnInsertRecord вашего TTable. Здесь вы проверяете, если значение s не равно "45" (что соответствует Enter-ключу). Если это не так, вы бросаете исключение (EAbort) без сообщения.

Предложения и улучшения

  1. Используйте более надежный способ обнаружения нежелательных клавиш: Вместо того, чтобы жестко кодировать ASCII-код Enter (45), рассмотрите более элегантный подход к обнаружению нежелательных клавиш. Например, вы можете использовать свойство Key вашего TDBGrid, чтобы получить код клавиши, и затем проверить, является ли она вставкой или удалением.
  2. Используйте более конкретное исключение: Вместо бросания генерического исключения (EAbort) без сообщения, рассмотрите создание более описательного исключения, которое предоставляет информацию о том, что пошло не так.
  3. Рассмотрите использование отдельного модуля для функций-утилит: Поскольку вы используете глобальную переменную s, может быть хорошей идеей извлечь этот код в отдельный модуль (например, Util.pas) и создать функцию, которая может быть вызвана из нескольких мест в вашем приложении.

Вот обновленная версия вашего кода:

unit Util;
interface
procedure CheckKey(key: Integer);
implementation
procedure CheckKey(key: Integer);
begin
  if key = VK_RETURN then
    raise EInvalidKey.Create('Попытка вставки записи с помощью Enter-ключа');
end;

В вашем основном модуле вы можете вызвать эту функцию из события OnKeyDown вашего DBGrid:

procedure TForm1.DBGridKeyDown(Sender: TObject; var Key: Integer);
begin
  CheckKey(Key);
end;

И в обработчике события TTable:

procedure TForm1.TableInsertRecord(DataSet: TDataSet);
begin
   // Другой код...
end;

Не забудьте удалить глобальную переменную s и любые другие ненужные переменные или код. Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

Предотвратить автоматическое добавление записи в таблицу можно с помощью предохранителя на основе ASCII-кода клавиши, который вызывает исключение при нажатии на клавишу Backspace (код 45).


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Записи ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-20 02:44:47/0.0072221755981445/2