Delphi - TQuery .AsString为布尔字段值返回0或1

时间:2011-09-21 05:31:06

标签: string delphi delphi-7

当TQuery后代的Field的FieldType是ftBoolean时,如何让Delphi 7返回'0'或'1'?默认情况下,它返回“TRUE”或“FALSE”,即

Query1.Fields[0].AsString会返回'0',而不是'FALSE'

6 个答案:

答案 0 :(得分:4)

使用

(Query1.Fields[0] as TBooleanField).DisplayValues := 'TRUE;FALSE';

以'TRUE; FALSE'(或'1; 0')的形式设置字符串。这允许您定义AsString将返回的值。

如果您在设计时添加了字段,并且/或者您自己有一个布尔字段组件,那么您也可以使用它,而无需使用类型转换:

Query1YourBooleanField.DisplayValues := 'TRUE;FALSE';

顺便说一句,它不是返回'0'的查询,而不是'是'ftBoolean的查询。这些是查询中表示表或查询结果集中字段的字段。

答案 1 :(得分:2)

为什么不简单地使用Query1.Fields [0] .AsInteger如果你想要一个布尔值的数字表示?我认为这应该有用......

答案 2 :(得分:2)

修改'dbconsts.pas'中的STextFalseSTextTrue资源字符串。您可以将文件的修改版本放到项目文件夹中,或者就像本地化您的应用程序一样。


如果您想在运行时修改字符串,可以使用以下(credit):

[...]
implementation

uses
  dbconsts;

{$R *.dfm}

procedure SetResourceString(ResStringRec: pResStringRec; NewStr: string);
var
  OldProtect: DWORD;
begin
  if ResStringRec = nil then
    Exit;
  VirtualProtect(ResStringRec, SizeOf(ResStringRec^),
                 PAGE_EXECUTE_READWRITE, @OldProtect) ;
  ResStringRec^.Identifier := Integer(NewStr) ;
  VirtualProtect(ResStringRec, SizeOf(ResStringRec^), OldProtect, @OldProtect) ;
end;

const
  TextFalse = '0';
  TextTrue = '1';

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetResourceString(@STextFalse, TextFalse);
  SetResourceString(@STextTrue, TextTrue);
  [...]

答案 3 :(得分:1)

我个人在这种情况下使用这个技巧:

const DigitBool: array[Boolean] of string = ['0', '1'];
//and than
Caption := DigitBool[Query1.Fields[0].Value];

答案 4 :(得分:0)

不幸的是,似乎唯一的方法是检查每个TField:

if (Query1.Fields[i] is TBooleanField)然后使用上面提供的方法之一。

据我所知,没有全球TField.AsString黑客攻击。

答案 5 :(得分:-3)

将其硬编为

var ZeroOrOne: Byte;
ZeroOrOne := Byte(Query1.Fields[0].Value);