覆盖TFields和TStringField中的AsString

时间:2015-03-13 08:46:04

标签: database delphi delphi-7

当我们将数据库组件从ODBC Express交换到ADO时,我们遇到的最大问题之一是ODBC Express“正确修剪”了CHAR字段的结果而ADO没有。

CHAR字段填充整个指定的字段长度,因此当我们使用ADO查询它们时,会获得大量额外空格。

我们有很多数据库和代码,基本上取决于被修剪数据库的结果。

我们的解决方案是编辑delphi源DB.pas并从TField和TStringField更改getasstring方法。

这有效,但不是一个可靠的解决方案是否有另一种方法可以在不更改delphi源代码的情况下修剪这些结果?

当切换到ADO时,我们决定不直接使用TADOQuery类,而是我们自己派生:

  TOurAdoQuery = class(TADOQuery)
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function ExecSQL: Integer;
    procedure Open;
  end;

1 个答案:

答案 0 :(得分:4)

从TStringField下降,类似于:

TYourStringField = class(TStringField)
protected
  function GetAsString: string; override;
end;

implementation
function TYourStringField.GetAsString: string;
begin
  Result := TrimRight(inherited GetAsString);
end;    

注册你的课程(你可能会在初始化部分这样做):

RegisterClass(TYourStringField);

将此行放在通常为应用程序初始化内容的位置:

DefaultFieldClasses[ftString] := TYourStringField;

就是这样,下次创建数据集时,所有ftString字段类型都将使用TYourStringField定义。