Database field type

From Free Pascal wiki
Revision as of 03:19, 14 March 2024 by Ariben (talk | contribs) (→‎型)
Jump to navigationJump to search
日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

概略

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 Presumably a fixed number of bytes stored as-is. Needs to have its Size property set to work.
ftCurrency A format to precisely store currency values.
ftCursor
ftDataSet Presumably meant to store an entire dataset (possibly to implement master/detail table).
ftDate A date without time information.
ftDateTime A date and time information.
ftDBaseOle Presumably meant to store OLE objects in a DBase database. Needs to have its Size property set to work.
ftFMTBcd A form of Binary Coded Decimal (BCD) number field. Needs to have its Size property set to work.
ftFixedChar A fixed width character field, similar to a Pascal shortstring. Needs to have its Size property set to work.
ftFixedWideChar A fixed width multibyte character field. Needs to have its Size property set to work.
ftFloat A floating point numeric type.
ftFmtMemo Needs to have its Size property set to work.
ftGraphic Needs to have its Size property set to work.
ftGuid A field used to store a GUID (Globally Unique Identifier). With the current code, this field needs to have its Size property set to 38.
ftIDispatch
ftInteger An integer field.
ftInterface
ftLargeint A field that contains an integer, stores more bytes than an integer and therefore has a larger range.
ftMemo Stores a variable amount of string/text data; needs no size set.
ftOraBlob Presumably stores Oracle BLOB.
ftOraClob Presumably stores Oracle CLOB: an Oracle data type that can hold up to 4 GB of data [1].
ftParadoxOle Presumably meant to store OLE objects in a Paradox database.
ftReference
ftSmallint An integer type field with less bytes than ftInteger.
ftString Stores string data; needs to have its Size property set to the maximum number of characters possible in that field.
ftTime Stores time-only data.
ftTimeStamp Stores date/time data. Probably equivalent to ftDateTime.
ftTypedBinary Some kind of BLOB-like field?
ftUnknown
ftVarBytes Presumably a variant with byte/binary data?
ftVariant Presumably meant to store variant data.
ftWideMemo An ftMemo with widestring (UTF-16) characters.
ftWideString An ftString with widestring (UTF-16) characters.
ftWord Presumably stores an integer value.

Size, DataSize and Unicode

Note that for string type fields, Size indicates the number of characters that can be stored. As indicated in FPC Unicode support#Introduction, FPC up to and including 2.6 only deals with ANSI/ASCII single byte characters; it does not support Unicode/UTF8/UTF16/Unicodestring characters.

The read-only property DataSize indicates the field size in bytes.

If you use multibyte characters (e.g. UTF8 or UTF16/Unicodestring encoded), DataSize and Size do not mean the same thing. If you use only ANSI/ASCII characters, DataSize and Size are effectively the same thing.

Defining types in your dataset

Todo: write me. Explain various ways of doing things (TFieldDef, TFields) and which dataset supports which methods.

Assigning and retrieving values

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

See also