Delphi 中 DataModule 的访问冲突

问题描述 投票:0回答:1

我正在Delphi中开发一个带有DataModule的应用程序,当我从应用程序的主窗体引用DataModule时,我遇到了访问冲突,看起来

DataModule1
nil
,这可以解释AV错误,但我不确定如何解决问题,因为每个文件中的所有内容似乎都已正确定义。

这是主要表单代码(标有AV线):

unit mainform;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Data.DB, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.Buttons, Vcl.DBCtrls,
  Vcl.StdCtrls, datamod;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    DBNavigator1: TDBNavigator;
    DBGrid1: TDBGrid;
    procedure Form1Create(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Form1Create(Sender: TObject);
begin
    left:=(screen.width-width) div 2;
    top:=(screen.height-height) div 2;

    with DataModule1.dbConnect do  // <---- This line gives the AV
    begin
        Close;
        with Params do
        begin
            Clear;
            Add('DriverID=SQLite');
            Add('Database=c:\batool.db');
        end;
        Open;
    end;
    DataModule1.FDQuery1.Open;
end;

end.

这是数据模块代码:

unit datamod;

interface

uses
  System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait,
  FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.SQLite,
  FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,
  FireDAC.Phys.SQLiteWrapper.Stat;

type
  TDataModule1 = class(TDataModule)
    DataSource1: TDataSource;
    dbConnect: TFDConnection;
    FDQuery1: TFDQuery;
    FDQuery1MRS_Item: TIntegerField;
    FDQuery1MRS_Desc: TStringField;
    FDQuery1MRS_Amount: TBCDField;
    FDQuery1MRS_Actual: TBCDField;
    FDQuery1MRS_Adjust: TBCDField;
    FDQuery1MRS_NewAmt: TBCDField;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

end.
sqlite delphi
1个回答
0
投票

您需要确保

DataModule
是在主表单之前创建的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.