我在 Windows VCL 应用程序中使用 Delphi 10.3 社区版时遇到了同样的错误。即使我的 FDQuery 有一个有效的连接。
我在 Embarcadero Delphi CE Bootcamp 2018 course Week 4 of Databases 发现问题是因为您的 DataModule 是在 您的 Form 之后创建的。
要解决这个问题,你应该去:
项目 --> 选项 --> 应用程序 --> 表单
在 Autho-create 表单中,您应该注意以下顺序:
- Form1
- 数据模块1
您应该更改顺序,以便 DataModule 排在第一位:
- 数据模块1
- Form1
如果您的连接放置在 DataModule 中,您必须先连接您的连接,然后再激活您的查询。在连接之前无法激活您的查询。
- 在您的连接中连接(这可以在 DataModule 中完成);
- 激活查询(假设它在您的 MainForm 中)。
如果在 DataModule 之前创建表单,查询将指责没有连接,因为尚未创建数据模块连接。
您还可以在 Project --> View Source 中以编程方式更改创建表单的顺序。
检查以下代码。
program FDSearchInst;
uses
Vcl.Forms,
UnitMain in 'UnitMain.pas' {FormMain},
UnitDataPaths in '..\SharedFiles\UnitDataPaths.pas',
UnitDataModule in '..\SharedFiles\UnitDataModule.pas' {SharedDM: T};
{$R *.res}
begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TSharedDM, SharedDM); // Will be created first
Application.CreateForm(TFormMain, FormMain); // Will be created after
Application.Run;
end.
在这段代码中,您可能还会注意到我遇到的一个问题。在 DataModule 路径前有一个注释 {SharedDM: T},这是为您的 DataModule 分配名称的一种方式(当您访问应用程序 --> 表单时,您将看到此名称)。
此名称SharedDM必须与文件名UnitDataModule不同,否则会导致冲突,您将无法运行您的项目。
为了更好地解释,请检查以下代码:
正确
UnitDataModule in '..\SharedFiles\UnitDataModule.pas' {SharedDM: T};
不正确
UnitDataModule in '..\SharedFiles\UnitDataModule.pas' {UnitDataModule: T};