Как преобразовать целочисленное значение в логическое значение в Delphi - PullRequest
1 голос
/ 05 октября 2011

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

Спасибо

Ответы [ 5 ]

3 голосов
/ 05 октября 2011

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

1 голос
/ 09 апреля 2019

Если вы хотите отобразить слова «True» и «False» в DBGrid, вы должны использовать событие OnGetText из Поле , например:

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;
1 голос
/ 05 октября 2011

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

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

0 голосов
/ 08 мая 2019

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

function IntToBool(const AnInt: Integer): Boolean;
begin
   if AnInt = 0 then Result := False
                else Result := True;     
end;
0 голосов
/ 17 апреля 2018

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

 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 выпадающего списка для ФИЛЬТРАЦИИ некоторых логических данных, внутри которых есть логические значения.
как здесь:

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

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

...