好吧,我的应用程序运行得很好,直到我决定通过创建DataModule窗体并将所有数据库组件移动到它来清理设计时窗体。我使用 Delphi XE2 Update 1和这些组件,TADOConnection,TADOTable,TADOQuery,TADOCommand。当我第一次尝试在DataModule窗体上运行上述组件时,而不是主窗体,现在,当执行DPR中的这一行时,它将返回一个错误:Application.CreateForm(TDataModule1, DataModule1);
引发的错误是Class TADOCOnnection not found.。现在我删除并重新添加了TADOConnection到DataModule表单,它现在引发了一个不同的错误:Class TADOTable not found.,但我认为这只是因为DataModule上的创建顺序发生了变化,TADOTable
现在是表单上创建的第一个对象。
DataModule中的uses
子句是:uses System.SysUtils, System.Classes, Data.Win.ADODB, Data.DB;
我读过其他帖子,说要在uses子句中包含ADODB和DB来克服这个错误,但这似乎没有帮助。
我的完整DPR文件是:
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {DataModule1: TDataModule};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDataModule1, DataModule1);
Application.Run;
end.
我甚至尝试从DPR文件中删除创建DataModule的行,并在主窗体中手动执行此操作,但当我收到相同的错误消息时,情况就发生了变化。
除了把所有组件移回主窗体之外,我不知道下一步该做什么。难道DataModule窗体在XE2中的工作方式和以前版本的 Delphi 不一样吗?为什么当组件在主窗体上时,相同的TADOConnection和TADOTable类没有发现引发的消息?
任何想法或见解都非常感谢。
詹姆斯
5条答案
按热度按时间rwqw0loc1#
您可以使用数据集,但没有为此添加任何数据源
but5z9lq2#
启动一个新项目并添加一个
DataModule
。将TADOConnection
和TADOTable
放在DataModule
上。保存项目并查看哪些单元被添加到DataModule
的使用中。如果您的项目编译并运行成功,请将单元名称从该测试项目复制到工作项目的DataModule
中并重试。如果这没有帮助,我只能猜测你在库路径上有一些问题。我没有 Delphi XE2来尝试这个,所以我只是猜测。uxh89sit3#
在创建一个新的项目时,它没有任何问题,我终于发现了我引入到我自己代码中的问题。
我在DataModules单元/类中添加了一个特殊的方法。我需要传递一个枚举类型作为参数,所以我在类的作用域中创建了枚举,如下所示:
我在类中添加了枚举,因为它不需要有全局作用域。无论如何......你会注意到我在枚举之后添加了
public
作用域标识符。这是我的错误。我假设表单上的组件是public
,但这是错误的。它们是published
。将作用域标识符更改为published
解决了这个问题,因为现在组件包含在RTTI中,这是在运行时创建表单时所需的。希望这对其他人有帮助。
詹姆斯
wbgh16ku4#
aurhwmvo5#
这可能是一个迟来的答案,但是你有没有检查相应的数据模块上的ClassGroup?在IDE中打开数据模块,单击它并检查ObjectInspector中的ClassGroup属性。
如果它没有设置为Vcl.Controls.TControl,那么你可能想将它更改为Vcl.Controls.TControl。这里的逻辑是,默认情况下,Datamodule根本没有绑定到任何框架,可以用于两者。因此,System.Classes.TPersistent的ClassGroup意味着你的数据模块是框架/平台独立的(你可以在VCL应用程序和FMX应用程序中使用它)。
ADO组件集是特定于VCL的,不能在FMX应用程序中使用,这意味着您不应使用System.Classes.TPersistent作为数据模块的ClassGroup,而应使用Vcl.Controls.TControl。
也许这就是你问题的根源。