あなたはデルファイのバージョンを指定していません.デルファイ2010で私のために働くものは次のとおりです:
バージョン 1 :
TTestRecordProp = record
private
FField20: string;
...
FFieldN: string
procedure SetField20(const Value: string);
public
property Field20: string read FField20 write SetField20;
...
property FieldN: string ...
end;
...
procedure TTestRecordProp.SetField20(const Value: string);
begin
if Length(Value) > 20 then
/// maybe raise an exception?
FField20 := Copy(FField20, 1, 20)
else
FField20 := Value;
end;
バージョン 2 :
TTestRecordEnsureLengths = record
Field20: string;
procedure EnsureLengths;
end;
...
procedure TTestRecordEnsureLengths.EnsureLengths;
begin
// for each string field, test it's length and truncate or raise exception
if Length(Field20) > 20 then
Field20 := Copy(Field20, 1, 20); // or raise exception...
end;
// データを db にプッシュする前に .EnsureLength を呼び出す必要があります...
個人的には、レコードをオブジェクトに置き換えることをお勧めします。そうすれば、さらに多くのトリックを実行できます。