データベースフィールド型
概略
FCL-DBデータベースフィールドは異なる種類のデータ型を持つことができる。データセットではこれらの型のサブセットが利用できる。どのような型がサポートされるかはデータセット型で異なる。
型
現在、以下のフィールド型が定義されている。 FCLフィールド型ドキュメンテーションを参照のこと。 To do: add assignment information (e.g. can you use .AsString) and additional information below.
フィールド型 | 内容 |
---|---|
ftADT | 抽象データ型 (サーバに生成されるユーザーにより定義される型); 未だサポートされていない(?)(->訳注ftADTはサポートされている模様)。 |
ftArray | Interbase 6 / Firebird 配列データ型 (可変長文字列あるいは整数のような簡単なデータ型). しかし、SQLDBは配列データ型を現在サポートされていない(訳注->ftArrayはサポートされている模様)。 |
ftAutoInc | 自動的に加算される整数フィールド。 |
ftBCD | バイナリでコードされた10進数の浮動小数点値。 |
ftBlob | バイナリの大きなオブジェクト(BLOB)、任意のバイナリデータを格納するために作られた。 |
ftBoolean | ブール値 (yes/no)。 |
ftBytes | おそらくそのまま格納される固定長byte。有効なSizeプロパティがある必要性あり。 |
ftCurrency | 確実に格納される通貨値に対するフォーマット。 |
ftCursor | |
ftDataSet | おそらくデータセット全体を格納するために作られたデータ型(マスター/詳細テーブルを実装する可能性のため)。 |
ftDate | 時刻情報を除く日付。 |
ftDateTime | 日付と時刻。 |
ftDBaseOle | おそらくOLEオブジェクトをDBaseに格納するために作られた型。有効なSizeプロパティがある必要性あり。 |
ftFMTBcd | バイナリでコードされた10進数(BCD)フィールド。有効なSizeプロパティがある必要性あり。 |
ftFixedChar | 固定幅の文字フィールドPascalのshortstringに類似する。有効なSizeプロパティがある必要性あり。 |
ftFixedWideChar | 固定長のマルチバイト文字フィールド。有効なSizeプロパティがある必要性あり。 |
ftFloat | 浮動小数点型 |
ftFmtMemo | 有効なSizeプロパティがある必要性あり。 |
ftGraphic | 有効なSizeプロパティがある必要性あり。 |
ftGuid | A field used to store a GUID (Globally Unique Identifier)のために使われるフィールド。現在のコードではこのフィールドのSizeは38に設定される必要がある。 |
ftIDispatch | |
ftInteger | 整数値フィールド |
ftInterface | |
ftLargeint | 整数値を含むフィールド、ftIntegerよりも大きなbyteの整数値、ゆえに大きな幅を持つ。 |
ftMemo | 可変長の文字/テキストを格納する: Sizeを設定する必要がない。 |
ftOraBlob | おそらくOracle BLOBを格納する。 |
ftOraClob | おそらくOracle CLOB: 4GBまでのデータを保持できるOracleのデータ型[1]。 |
ftParadoxOle | おそらくOLEオブジェクトをaradoxデータベースで格納されるために作られた型 |
ftReference | |
ftSmallint | ftIntegerよりも小さなbyteのための型。 |
ftString | 文字列データを格納する。フィールドに入力可能な最大の文字数をプロパティとして指定する必要がある。 |
ftTime | 時刻のみを格納する。 |
ftTimeStamp | 日付/時刻を格納する。おそらくftDateTimeと同等 |
ftTypedBinary | ある種のBLOB様のフィールド? |
ftUnknown | |
ftVarBytes | おそらくbyte/バイナリのバリアントデータ? |
ftVariant | おそらくバリアントデータを格納するために作られた。 |
ftWideMemo | ワイドストリング(UTF-16)ためのftMemo。 |
ftWideString | ワイドストリング(UTF-16)ためのftString |
ftWord | おそらく整数値を格納する。 |
サイズ、データサイズ、ユニコード
文字列型のフィールドでは、Sizeは格納することのできる文字の数を指していることに注意すること。 FPC Unicode support#Introductionに示されている通り、FPCは2.6までANSI/ASCIIシングルバイト文字列のみ取り扱い、ユニコード/UTF8/UTF16/ユニコード文字列はサポートされていない。
読み込みのみのDataSizeはbyteで表されたフィールドサイズである。
もし、マルチバイト文字(例えば、UTF8もしくはUTF16/ユニコードエンコードの文字)を用いていると、DataSizeとSize同じことを意味しない。もしANSI/ASCIIのみを用いているなら、DataSizeとSizeは文字通り同じものとなる。
データセットの型を定義する
Todo: write me. Explain various ways of doing things (TFieldDef, TFields) and which dataset supports which methods.
値を割り当て取得する
Once you have the fields in your dataset defined, you can assign and retrieve data like this - suppose you have a dataset called FTestDataset:
FTestDataset.Open; //Open for viewing/editing/inserting
FTestDataset.Append;
FTestDataset.FieldByName('YourFieldName').AsString := 'This is my field data'; //Suppose field YourFieldName is a memo field
FTestDataset.Post; //"Commit"/save changes in the record to the dataset.
Writeln('YourFieldName has data:' + FTestDataset.FieldByName('YourFieldName').AsString);
{ Retrieve the field value of the current record. Because we haven't moved the record, we should get what we just entered }
For text/memo fields, use the AsString method. For date/time fields, use the AsDateTime method. For binary fields, I suppose you can use the AsString method - but there must be another way, too