首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未找到TADOConnection / TADOTable类

未找到TADOConnection / TADOTable类
EN

Stack Overflow用户
提问于 2011-10-23 07:17:05
回答 4查看 4K关注 0票数 1

好的,所以我的应用程序工作得很好,直到我决定通过创建一个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文件是:

代码语言:javascript
复制
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类没有找到消息呢?

任何想法或见解都是非常感谢的。

詹姆斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-25 00:03:45

在创建一个没有任何问题的新项目时,我终于发现了I在我自己的代码中引入的问题。

我在DataModules单元/类中添加了一个特殊的方法。我需要传递一个枚举类型作为参数,所以我在类的范围中创建了枚举,如下所示:

代码语言:javascript
复制
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中,在运行时创建表单时需要这些组件。

代码语言:javascript
复制
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;

希望这能帮到别人。

詹姆斯

票数 1
EN

Stack Overflow用户

发布于 2011-10-23 07:49:37

启动一个新项目并向其添加一个DataModule。把TADOConnectionTADOTable放在DataModule上。保存项目并查看哪些单元被添加到DataModule的使用中。如果项目编译并成功运行,请将该测试项目中的单元名称复制到工作项目的DataModule中,然后再试一次。如果这没有帮助,我只能猜测您对库路径有一些问题。我没有德尔菲XE2来尝试这个,所以我只是猜测。

票数 2
EN

Stack Overflow用户

发布于 2012-04-16 06:39:58

代码语言:javascript
复制
//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?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档