Note | 该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。 |
生成一个新的数据库文件,其中的字段定义取自结构扩展文件的内容。
CREATE <xcTargetFile> FROM <xcSourceFile> [NEW] [ALIAS <xcAlias>] [VIA <cDriver>]
<xcTargetFile> | 要创建的目标数据库文件的名称,包括可选的驱动器、目录和扩展名。 文件创建后,将以工作区 SetExclusive() 标志指定的模式保持打开。 |
如果 <xcTargetFile> 不存在,则将创建该文件。 如果存在,该命令将尝试以独占模式打开文件,如果成功,文件将被覆盖,不会发出警告或出错。 如果由于其他进程正在使用该文件等原因而拒绝访问,NetErr() 将被设置为 TRUE。 |
<xcSourceFile> | 作为新数据库文件结构定义的结构扩展文件名称,包括可选的驱动器、目录和扩展名。 |
如果 <xcSourceFile> 不存在,运行时将出错。 如果存在,该命令将尝试以共享模式打开文件,如果成功,则继续执行。 如果由于其他进程独占该文件等原因而拒绝访问,NetErr() 将被设置为 "true"。 |
有关文件搜索和创建规则,请参阅 SetDefault() 和 SetPath()。 数据库文件的默认扩展名由 RDD 决定。 |
要符合结构扩展文件的条件,数据库文件的结构必须与 COPY STRUCTURE EXTENDED 生成的结构相同,详情请参考 COPY STRUCTURE EXTENDED。 |
注意:对于数据字典应用程序,可以在结构扩展文件中增加字段来描述扩展字段属性。 例如,可以设置一些字段来描述字段属性,如描述、键标志、标签、颜色、图片和 VALID 子句的验证表达式。 CREATE FROM 仅从所需字段创建新数据库文件,而忽略扩展结构中的所有其他字段。 此外,它对必填字段的顺序也不敏感。 |
NEW | 在打开 <xcTargetFile> 前选择下一个未占用的工作区。 如果未指定该子句,则使用当前工作区。 |
ALIAS <xcAlias> | 打开 <xcTargetFile> 时与工作区相关联的标识符名称。 如果未指定该子句,别名默认为数据库文件名。 单个应用程序内不允许使用重复的别名。 |
VIA <cDriver> | 为工作区提供服务的 RDD 名称。 如果未指定,则使用 RDDSetDefault() 确定的默认 RDD。 |
长度大于 255 位的字符字段: 有两种方法可以创建长度大于 255 位的字符字段:
• 根据以下公式,使用 Field_Len 和 Field_Dec 字段指定字段长度:
• _FIELD->Field_Len := <nLength> % 256
• _FIELD->Field_Dec := Integer(<nLength> / 256)
• 修改结构扩展文件的结构,将 Field_Len 的长度改为 5,然后指定实际的字段长度。
本例是一个模拟交互式 CREATE 实用程序的过程:
FUNCTION Start()
CreateDatabase("newfile")
FUNCTION CreateDatabase(cNewDbf)
// 创建空的结构扩展文件
CREATE tmpext
USE tmpext
lMore := TRUE
DO WHILE lMore
// 输入新的字段定义
APPEND BLANK
CLEAR
@ 5, 0 SAY "Name.....: " GET Field_Name
@ 6, 0 SAY "Type.....: " GET Field_Type
@ 7, 0 SAY "Length...: " GET Field_Len
@ 8, 0 SAY "Decimals.: " GET Field_Dec
READ
lMore := (!EMPTY(Field_Name))
ENDDO
// 删除所有空白记录
DELETE ALL FOR EMPTY(Field_Name)
PACK
CLOSE
// 创建新的数据库文件
CREATE (cNewDbf) FROM tmpext
ERASE tmpext.dbf
下一个示例将在结构扩展文件中为长度为 4000 个字符的字符字段创建一个新定义:
APPEND BLANK
REPLACE Field_Name WITH "Notes",;
Field_Type WITH "C",;
Field_Len WITH 4000 % 256,;
Field_Dec WITH INTEGER(4000 / 256)
XSharp.RT.DLL
COPY STRUCTURE, COPY STRUCTURE EXTENDED, CREATE, DbCopyXStruct(), DbCreate(), RDDSetDefault(), SetDefault(), SetExclusive(), SetPath()