DateModule里面建数据源出错问题 (45分)

  • 主题发起人 主题发起人 jadesun
  • 开始时间 开始时间
J

jadesun

Unregistered / Unconfirmed
GUEST, unregistred user!
我建一个DateModule模块,里面放了ADOConnection控件,在里面的代码如下:

Unit2.pas:

procedure TDataModule2.DataModuleCreate(Sender: TObject);
var path:string;
begin
try
ADOConnection.Connected := false;
path:=ExtractFilePath (ParamStr(0))+'diary.mdb';
ADOConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=;Data Source='+path+';Persist Security Info=False';
ADOConnection.Connected := true;
except
end;
end;


在Unit1.pas中用uses调用Unit2

然后在Unit1中放入ADOQuery控件,Connection设为DateModule.ADOConnection。结果在程序运行的时候都是找不着数据源。

我要把以上的代码写到Unit1中的话就完全正确,一但调用Unit2的话就出错??为什么呢?

出错提示为:Missing Connection or ConnectionString

ADOQuery中的SQL语句绝对正确
 
看看DateModule模块是否在Unit1生成前已经生成
即:
Application.CreateForm(Tdm, dm);
Application.CreateForm(TfrmJcMain, frmJcMain);
Application.Run;
 
可在Unit1中用到ADOQuery的地方动态地赋值:
ADOQuery:=Connection:=DateModule.ADOConnection;
如果在属性框中设置的话,DateModule对象必须在Unit1中Form对象之前创建
 
TDataModule2要先于你的调用窗体建立,也就是在Project工程文件中的窗体建立顺序
得问题
 
将DataModule2设为自动建立,或在调用DataModule2内的任何东西前,将DataModule2
手工建立。
 
是不是ConnectionString的参数不全造成的?
试试
var
s: string;
begin
with ADOConnection1 do
begin
Connected:=false;
S:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source='+ExtractFilePath(application.exename);//得到程序目录路径
S:=S+'data/store.mdb;Mode=Share Deny None;Extended Properties="";';
S:=S+'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;';
S:=S+'Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;';
S:=S+'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
ConnectionString:=S;
Connected:=true;
QueryBuy.Open;
end;
end;
 
多人接受答案了。
 
后退
顶部