3

我有一个数据库字段值,它是一个像 0 和 1 这样的整数。在将数据加载到数据库网格时是否可以将此整数值转换为布尔值。我期待没有条件检查,比如直接类型转换。

谢谢

4

5 回答 5

3

我猜您想在 DBGrid 中将数据库字段显示为 CheckBox。如果是这样,请阅读Zarko Gajic 的文章。它是关于布尔字段的,但您可以根据需要轻松修改代码。

于 2011-10-05T11:54:33.380 回答
3

没有办法将整数转换为布尔值。你可以实现这样的功能

function IntToBool(const AnInt: Integer): Boolean;
begin
   if AnInt = 0 then Result := False
                else Result := True;     
end;
于 2019-05-08T14:05:35.163 回答
1

解决您的问题的最简单方法可能是使用布尔计算字段。

如果您需要从 DBGrid 编辑它,它会变得有点棘手(但仍然可能)。

于 2011-10-05T16:54:13.073 回答
1

如果你想在 DBGrid 中显示“True”和“False”这两个词,你应该像这样使用Field的 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;
于 2019-04-09T14:08:59.773 回答
0

在此处尝试此示例功能:

 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

我希望这个功能可以解决你上面的问题。

于 2018-04-17T05:23:01.547 回答