項目値の変換
変換プロパティは,データ型を変換しようと試みます。たとえば AsString プロパティは,数値と論理値を文字列表現に変換します。次の表に,項目コンポーネントの変換プロパティの一覧と,項目コンポーネントのクラス別に推奨されるプロパティを示します。
項目コンポーネント | AsVariant | AsString | AsInteger | AsFloat, AsCurrency, AsBCD | AsDateTime, AsSQLTimeStamp | AsBoolean |
---|---|---|---|---|---|---|
TStringField |
○ |
なし |
○ |
○ |
○ |
○ |
TWideStringField |
○ |
○ |
○ |
○ |
○ |
○ |
TIntegerField |
○ |
○ |
なし |
○ |
||
TSmallIntField |
○ |
○ |
○ |
○ |
||
TWordField |
○ |
○ |
○ |
○ |
||
TLargeintField |
○ |
○ |
○ |
○ |
||
TFloatField |
○ |
○ |
○ |
○ |
||
TCurrencyField |
○ |
○ |
○ |
○ |
||
TBCDField |
○ |
○ |
○ |
○ |
||
TFMTBCDField |
○ |
○ |
○ |
○ |
||
TDateTimeField |
○ |
○ |
○ |
○ |
||
TDateField |
○ |
○ |
○ |
○ |
||
TTimeField |
○ |
○ |
○ |
○ |
||
TSQLTimeStampField |
○ |
○ |
○ |
○ |
||
TBooleanField |
○ |
○ |
||||
TBytesField |
○ |
○ |
||||
TVarBytesField |
○ |
○ |
||||
TBlobField |
○ |
○ |
||||
TMemoField |
○ |
○ |
||||
TGraphicField |
○ |
○ |
||||
TVariantField |
なし |
○ |
○ |
○ |
○ |
○ |
TAggregateField |
○ |
○ |
表の一部の列は,複数の変換プロパティに関連しています(AsFloat,AsCurrency,および AsBCD)。それは,これらのプロパティの 1 つをサポートしている項目データ型は,ほかのプロパティもサポートしているためです。
AsVariant プロパティは,全データ型を変換できます。上の表に一覧表示されていないデータ型の内,AsVariant も利用できます(これ以外にはなし)。不安があるときは AsVariant を使用するといいでしょう。
変換ができない場合もあります。たとえば AsDateTime を使って文字列を日付,時刻,日付/時刻形式に変換できるのは,文字列値が認識できる日付/時刻形式になっている場合だけです。変換が失敗すると,例外が生成されます。
また,常に希望する変換結果が得られるとは限りません。たとえば,Data.DB.TDateTimeField の値を AsFloat で浮動小数点形式に変換する場合は,AsFloat は,項目の日付の部分を 1899 年 12 月 31 日から数えた日数に,また時刻の部分を 24 時間を単位とする小数に変換します。次の表は,特殊な結果を生じる許容変換を示します。
特殊な変換結果 :
変換 | 結果 |
---|---|
文字列から論理値 |
「true」,「false」,「Yes」,「No」を論理値に変換する。それ以外の値では,例外が生成される |
浮動小数点形式から整数 |
浮動小数点値を最も近い整数値に丸める |
日付/時刻または SQLTimeStamp から浮動小数点値 |
日付を 1899 年 12 月 31 日から数えた日数に変換し,時間を 24 時間を単位とする分数に変換する |
論理値から文字列 |
論理値を「true」または「false」に変換する |
これら以外の変換はまったくできません。そのような変換を試みると,やはり例外が生成されます。
変換が行われるのは,常に代入が実行される前です。たとえば次の文は,CustomersCustNo 項目の値を文字列に変換し,その文字列を編集コントロールのテキストに代入します。
Edit1.Text := CustomersCustNo.AsString;
Edit1->Text = CustomersCustNo->AsString;
逆に次の文は,編集コントロールのテキストを整数として CustomersCustNo 項目に代入します。
MyTableMyField.AsInteger := StrToInt(Edit1.Text);
MyTableMyField->AsInteger = StrToInt(Edit1->Text);