Как преобразовать целочисленное значение в логическое значение в 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
Я надеюсь, что эта функция решит ваш вопрос выше.