Как я могу проверить, был ли установлен TDBCheckBox во время выполнения - PullRequest
0 голосов
/ 24 января 2011

Мне нужно создать программу в Delphi, используя файл Access 2003.mdb в качестве хранилища данных.

В базе данных Access есть таблица с логическим полем (Да / Нет в Access), которое называется «оригинал».

Я сопоставил это поле с TDBCheckBox, который показывает, что проверено на true, и не проверен на false, и показывает, что полутоновая проверка - поле не установлено.

То, что я хочу, - это созданиеполе для поля, которое будет установлено в ложь (флажок снят) и сохраните значение поля как ложное ЕСЛИ , пользователь явно не установил поле.

Я пробовал если (DVDQuery.FieldByName('Original'). AsBoolean <> True) и (DVDQuery.FieldByName ('Original'). AsBoolean <> False), а затем DVDQuery.FieldByName ('Original'). AsBoolean: = False;

Но этоне работает для новых записей.Я использую запрос для доступа к набору данных, так как существует большое количество динамически создаваемых операторов для фильтрации набора данных.

Любое руководство по оказанию помощи очень приветствуется.

Роб

Ответы [ 3 ]

5 голосов
/ 24 января 2011

Можете ли вы изменить структуру в базе данных?Правильное место для значений по умолчанию находится в определении столбца.Если вы можете обновить структуру, измените в поле значение по умолчанию «Нет».После этого вам никогда не понадобится писать код для решения этой проблемы, и ваши данные будут гарантированно правильными, даже если они введены напрямую через Access.

Если вам нужно проверить значение в коде, используйте if DVDQuery.FieldByName('Original').IsNull, чтобы определить,поле пустое или нет.

Наконец, если вам нужно изменить значение в коде, а не как значение по умолчанию для базы данных, сделайте это в соответствующем событии TDataset (AfterInsert, AfterScroll и т. д.).

2 голосов
/ 24 января 2011

Проверьте, установлено ли в поле значение или нет в событии BeforePost объекта DataSet:

procedure TForm1.DVDQueryBeforePost(DataSet: TDataSet);
begin
  if DVDQuery.FieldByName('Original').IsNull then
    DVDQuery.FieldByName('Original').AsBoolean := False;
0 голосов
/ 02 января 2012

если все еще актуально, проверьте поле статуса поля. Это должен быть cbChecked, cbUnchecked или cbGray, что вы и ищете.

...