我询问了有关使用 TClientDataset 设置内存数据集的问题,并被告知我必须使用表单设计器中的“创建数据集”命令。在我尝试创建主从数据库关系之前,它工作得很好。如果我有一个 ftDataSet 类型的字段 def,则运行 Create Data Set 命令(或在运行时调用该方法)会给出“无效字段类型”错误。我做了一些搜索,发现其他人以前也遇到过这个问题,但似乎没有人想出答案。有谁知道如何解决这一问题?
3 回答
不要将您的详细信息放在 ftDataSet 列中,只需使用唯一整数或 GUID 作为键引用,并将详细数据放在不同的 TClientDataSet 中并拥有该键。就像在普通数据库中一样。每个 TClientDataSet 代表一个不同的表。
如果创建 ftDataSet 类型的字段,则需要定义数据集,否则类型无效。
您可以通过以下方式定义数据集:
- 选择字段。
- 选择 ChildDefs 属性并单击 [...] 按钮。
- 添加字段。
现在您可以创建数据集了。除非其中一个孩子是 ftDataSet 类型,在这种情况下,您必须递归地重复该过程。
一个令人讨厌的问题,已经花费了我很多时间。最后我找到了一个解决方法,在这里描述(谢谢你们!):
http://www.delphigroups.info/3/6/171869.html
摘要:罪魁祸首是主客户端数据集的字段定义,即包含 ftDataset 字段的字段定义。只要主客户端数据集的字段定义不为空,命令 CreateDataSet 就会失败并显示上述错误消息(“无效字段类型”)。
解决方法:按照说明创建主从表,但在执行 CreateDataset 时确保字段定义为空:
a) 设计时:在设计表单中执行“主数据集|右键单击|创建数据集”之前,您必须单击主数据集,进入对象检查器,单击 FieldDefs,然后删除 FieldDefs 窗口中的所有字段。(第一次构建主数据集时无论如何都没有,但后来有。)然后才创建数据集。(我自己用 Delphi 2007 试过这个;它有效。)
b) 运行时:在执行 [Name of Masterdataset].CreateDataSet 之前调用 [Name of Masterdataset].FieldDefs.Clear。(我自己没有尝试过,但在上面命名的链接中有可靠的描述。)
如果这太复杂,请查看上面提到的链接。