好的,所以我的应用程序工作得很好,直到我决定通过创建一个DataModule表单并将所有数据库组件移动到它来稍微清理一下设计时表单。我正在使用德尔菲XE2更新1和这些组件,TADOConnection,TADOTable,TADOQuery,TADOCommand。当我第一次尝试在DataModule表单上使用上面指定的组件运行该应用程序时,而不是主表单,当执行DPR的这一行时,它会返回一个错误:
Application.CreateForm(TDataModule1, DataModule1);
引发的错误是未找到类TADOCOnnection .。现在,我删除了TADOConnection并将其重新添加到DataModule表单中,现在它引发了一个不同的错误:Class TADOTable not。,但我认为这仅仅是因为创建顺序在DataModule上发生了变化,TADOTable现在是在表单上创建的第一个对象。
我在uses中的DataModule子句是:
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.我甚至尝试从创建DataModule的DPR文件中删除行,并在主表单中手动执行该操作,但是当我得到相同的错误消息时,情况就会发生变化。
除了将所有组件移回主表单之外,我不知道下一步要尝试什么。DataModule窗体在XE2中的工作方式与以前版本的Delphi不一样吗?为什么当组件位于主窗体上时,相同的TADOConnection和TADOTable类没有找到消息呢?
任何想法或见解都是非常感谢的。
詹姆斯
发布于 2011-10-25 00:03:45
在创建一个没有任何问题的新项目时,我终于发现了I在我自己的代码中引入的问题。
我在DataModules单元/类中添加了一个特殊的方法。我需要传递一个枚举类型作为参数,所以我在类的范围中创建了枚举,如下所示:
TDataModule1 = class(TDataModule)
type
TMyEnum = (eOne, eTwo, eThree);
public
ADOConnection1: TADOConnection;
... // more components added to the design window
procedure MyMethod(const Param: TMyEnum);
end;我将枚举添加到类中,因为它确实实现了而不是需要具有全局范围。不管怎样..。您会注意到,我在枚举之后添加了public范围标识符。那是我的错。我假设表单上的组件是public,但这是错误的。他们是published。将作用域标识符更改为published解决了这个问题,因为现在组件包含在RTTI中,在运行时创建表单时需要这些组件。
TDataModule1 = class(TDataModule)
type
TMyEnum = (eOne, eTwo, eThree);
published // <- this fixes the "Class Not Found" at Runtime Error
ADOConnection1: TADOConnection;
... // more components added to the design window
procedure MyMethod(const Param: TMyEnum);
end;希望这能帮到别人。
詹姆斯
发布于 2011-10-23 07:49:37
启动一个新项目并向其添加一个DataModule。把TADOConnection和TADOTable放在DataModule上。保存项目并查看哪些单元被添加到DataModule的使用中。如果项目编译并成功运行,请将该测试项目中的单元名称复制到工作项目的DataModule中,然后再试一次。如果这没有帮助,我只能猜测您对库路径有一些问题。我没有德尔菲XE2来尝试这个,所以我只是猜测。
发布于 2012-04-16 06:39:58
//You should begin creating the dataModule, so change your code like this:
'Application.Initialize; '
'Application.MainFormOnTaskbar := True;'
'Application.CreateForm(TDataModule1, DataModule1);'
'Application.CreateForm(TForm1, Form1); '
//There is a question I have:
//How do I use ADOConnection / ADOTable in combination with an access2010-database?https://stackoverflow.com/questions/7864878
复制相似问题