Database field type/zh CN

From Lazarus wiki
Jump to: navigation, search

English (en) español (es) français (fr) 中文(中国大陆)‎ (zh_CN)

概述

FCL-DB数据库字段可以有不同的数据类型。在数据集中,可以使用这些类型的子集。不同的数据使用不同的数据类型。

类型

目前,有下字段类型定义:

参见 FCL 字段类型文档

To do: 新增分配信息(例如,您可以使用.AsString)及以下的附加信息。

类型 说明
ftADT ADT 值
ftArray 数组数据,代表 Interbase 6/Firebird 数组数据类型(简单的数组类型像varchar 或整型)。然而,SQLDB目前不支持数组数据类型。
ftAutoInc 自增整数值(4字节)
ftBCD 二进制编码的十进制值(SQL的decimal和numeric类型)
ftBlob 二进制大对象(BLOB),用于存储任意二进制数
ftBoolean 布尔值
ftBytes 字节值数组,固定大小
ftCurrency 货币数值,精确到小数点后4位
ftCursor 游标数据无大小)
ftDataSet 数据集数据(blob),大概意思是存储整个数据集(可能实现主/详细表格)
ftDate 日期值
ftDateTime 日期/时间(时间戳)
ftDBaseOle Paradox OLE字段数据
ftFMTBcd 格式化的BCD(二进制编码的十进制)值
ftFixedChar 固定字符数组(字符串)
ftFixedWideChar 定长字符日期(每个字符2个字节)
ftFloat 浮点值(双)
ftFmtMemo 格式化的memo数据(无大小)
ftGraphic 图形数据(无大小)
ftGuid GUID(Globally Unique Identifier全局唯一标识符)数据
ftIDispatch Dispatch data value
ftInteger 整型(4字节,有符号)
ftInterface 接口数据
ftLargeint 长整型(8字节)
ftMemo 二进制文本数据(无大小)
ftOraBlob Oracle BLOB 数据
ftOraClob Oracle CLOB 数据: 可以存储高达 4 GB 数据 [1]
ftParadoxOle Paradox OLE字段类别(无大小)
ftReference 参考数据
ftSmallint 短整型(1字节,有符号)
ftString 字符串数据(ansistring)
ftTime 时间值
ftTimeStamp 时间戳数据
ftTypedBinary 二进制类型数据(无大小)
ftUnknown 未知数据类型
ftVarBytes 字节数组,可变大小(untyped)
ftVariant Variant 数据
ftWideMemo 宽字符串 memo 类型
ftWideString 宽字符串(每字符占2字节)
ftWord Word-sized value(2 bytes, unsigned)

大小,数据大小和Unicode

请注意,对于字符串类型字段,大小指可存储的字符数目。 正如FPC Unicode 支持,FPC包括2.6只处理 ANSI/ASCII 单字节字符; 它不支持 Unicode/UTF8/UTF16/Unicodestring 字符。

只读属性的 DataSize 表示以字节为单位的字段大小。

如果使用多字节字符(如 UTF8 或 UTF16/Unicodestring 编码),DataSize和Size并不意味着相同。如果仅使用 ANSI/ASCII 字符, DataSize 和 Size 将相同。

在数据集中定义类型

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

赋值和取值

一旦定义你的数据集字段,你就可以进行赋值取值操作,像这样的,假设你有一个 FTestDataset 的数据集:

  FTestDataset.Open; // 打开进行查看/编辑/插入
  FTestDataset.Append;
  FTestDataset.Fieldbyname('YourFieldName').Asstring := 'This is my field data'; // 假设 YourFieldName 是 memo 字段
  FTestDataset.Post; // "提交"/保存更改记录到数据集
  writeln('YourFieldName has data:' + FTestDataset.Fieldbyname('YourFieldName').Asstring 
  { 获取当前记录的字段值。因为我们还没有移动的记录,我们应该得到什么,我们刚刚进入 }

为 text/memo 字段,使用AsString 方法。 为 date/time 字段,使用 AsDateTime 方法。 为 binary 字段,我想你可以使用 AsString 方法 - 但一定还有其他办法。

参见