Как преобразовать целочисленное значение в логическое значение в Delphi

У меня есть значение поля базы данных, которое является целым числом, таким как 0 и 1. Можно ли преобразовать эти целочисленные значения в логические при загрузке данных в сетку БД. Я ожидаю без проверки состояния, как прямое приведение типов.

Спасибо

3 ответа

Нет способа конвертировать Integer в Boolean. Вы можете реализовать такую ​​функцию

function IntToBool(const AnInt: Integer): Boolean;
begin
   if AnInt = 0 then Result := False
                else Result := True;     
end;

Я предполагаю, что вы хотите показать поле базы данных в DBGrid как CheckBox. Если это так, прочитайте статью Зарко Гаджича. Речь идет о булевых полях, но вы можете легко изменить код для ваших нужд.

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

Если вам нужно отредактировать его из DBGrid, он становится немного сложнее (но все же возможно).

Если вы хотите отобразить слова "True" и "False" в DBGrid, вам следует использовать событие OnGetText для Field следующим образом:

procedure TMyForm.MyDataSetFieldGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
begin
 case Sender.AsInteger of
  0 : Text := 'False';
  1 : Text := 'True';
 else
  Text := '-';
 end;
end;

Попробуйте эту функцию здесь:

 function IntToBooleanStr(AInteger: Integer): string;
 begin
   case AInteger of
     0:begin
         Result := 'False';
       end;
     1:begin
         Result := 'True';
       end 
       else
           Result := 'False';
   end;
 end;

это все, и вы можете использовать его внутри события onChange combobox для ФИЛЬТРАЦИИ некоторых логических данных, которые имеют логические значения внутри.
как здесь:

procedure TFrm_Books.ComBox_AvailableFilterChange(Sender: TObject);
begin   
   Table_Book.Filtered := False;
   Table_Book.FilterOptions := [foCaseInsensitive];
   Table_Book.Filter := '';
   Table_Book.Filter := 'Available = ' + IntToBooleanStr(ComBox_AvailableFilter.ItemIndex);
   Table_Book.Filtered := True;
end;

и вот код DFM для этого комбинированного списка:

object ComBox_AvailableFilter: TComboBox
  Left = 336
  Top = 120
  Width = 193
  Height = 21
  ItemHeight = 13
  Items.Strings = (
    'Not Available'
    'Available')
  TabOrder = 0
end

Я надеюсь, что эта функция решит ваш вопрос выше.

Другие вопросы по тегам