下面的程序编译并执行(XE4)没有错误。
program CDS;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, db, dbclient;
procedure Test;
var
aClientDataSet : TClientDataSet;
aStringField : TStringField;
begin
aClientDataSet := TClientDataSet.Create(Nil);
aStringField := TStringField.Create(aClientDataSet);
aStringField.FieldName := 'аАяЯ';
aStringField.DataSet := aClientDataSet;
aClientDataSet.CreateDataset;
end;
begin
Test;
end.
Otoh,如果我使用您的 aStringField 声明(即作为 TField)和创建它的方法,我会在 aClientDataSet.CreateDataset 上收到 r/time 错误“无效的字段类型”。