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