Delphi DataModule使用方法

 

数据显示页面:

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

 

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
       // DataModule1.Destroy;
         DataModule1.ADOQuery1.Connection:=DataModule1.ADOConnection1;
         DataModule1.ADOQuery1.SQL.Text:='select * from ts_cbsb';
         DataModule1.ADOQuery1.Active:=true;
         DataModule1.DataSource1.DataSet:=DataModule1.ADOQuery1;
         dbgrid1.DataSource:= DataModule1.DataSource1;
end;

end.

 

 

 

Unit2页面

 

unit Unit2;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TDataModule1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DataModule1: TDataModule1;

implementation

{$R *.dfm}

end.

 

 

工程文件 :

 

 

program Project1;


uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {DataModule1: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule1, DataModule1);

  Application.Run;
end.

以上转自一位仁兄,但在包bpl中调用是还会出现找不到dfm文件,正在研究。
----------------------------------------------------------------------------------------------------------- 
关于在formcteate事件中使用datamodule出错的解决方案:
我们先用记事本打开Project1.dpr文件发现有类似以下的语句
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDataModule2, DataModule2);
Application.Run;
注意第一句和第二句的顺序
我们发现在执行formcteate的时候DataModule2还没有创建
所以我们直接使用DataModule2的话自然会报错,所以解决方法有二个:
一:将上面两句调换先后位置
二:在formcteate事件的开头加上一下语句:
DataModule2:=TDataModule2.create(application);
来创建DataModule2.
这样问题就解决了.
小弟也是遇到了这样的问题,经过各位大虾的指点加上自己的观察推测和实践.
终于发现问题所在,特在此和各位分享!!!!!!!!!

你可能感兴趣的:(windows,application,Class,button,Delphi,Forms)