我的Form里只有这四个控件:
ADOConnection1: ;
ADOQuery1: ;
ClientDataSet1: ;
DataSetProvider1:
ADOConnection1的ConnectionString已经写好,并且能够连接上数据库,但我想让它在Dll的函数中再连接,
是这样写的,但调用时,老是返回"01",连form也没有Create 成功这是为什么?
请高手指教!function ConnectDatabase():PChar;stdcall;
begin
Result:='1';
try
Form1:=TForm1.Create(Application);
Form1.ShowModal;
except
Result:='01';
Exit;
end;
try
form1.ADOConnection1.Connected:=True;
except
Result:='02';
Exit;
end;
end;
ADOConnection1: ;
ADOQuery1: ;
ClientDataSet1: ;
DataSetProvider1:
ADOConnection1的ConnectionString已经写好,并且能够连接上数据库,但我想让它在Dll的函数中再连接,
是这样写的,但调用时,老是返回"01",连form也没有Create 成功这是为什么?
请高手指教!function ConnectDatabase():PChar;stdcall;
begin
Result:='1';
try
Form1:=TForm1.Create(Application);
Form1.ShowModal;
except
Result:='01';
Exit;
end;
try
form1.ADOConnection1.Connected:=True;
except
Result:='02';
Exit;
end;
end;
Application.handle应传入赋给他,把EXE中的Application.handle赋给他,再
Form1:=TForm1.Create(Application);
我其实是用在VBA中!
我以前写的DLL都可以啊!
这个为什么不行呢!我确实是抄过来的!
谢谢了!
调用时传入Application的名柄
ADO是MS的东东,对于DELPHI来说,就是调用了COM,
在dll中使用ADO要进行初始化!
否则抛出 EOleSysError 异常!!
所以要在你创建之前调用CoInitiaLize(nil)使用完以后再调用coUnInitiaLize.这两个函数在ACTIVEX单元中
请教如何写啊!谢谢了!
最后,释放时,要用到: CoUninitialize;
……
CoInitialize(nil);
Form1:=TForm1.Create(Application);……CoUninitialize;
就行了
写在哪儿啊!
我的form不show出来,不能写在formonclose里啊!
真的没用过!谢谢了!
等等,晕!你的代码里怎么,没有free?
直接写在form1的create或者show里你这样写,要等到Form1.ShowModal;完了,也就是你关闭窗体以后才能执行!
Form1.ShowModal
请问把
form1.ADOConnection1.Connected:=True;
写在formCreate里好呢,还是单写一个function好呢!?
begin
Result:='1';
try
CoInitialize(nil); //uses Activex
Form1:=TForm1.Create(Application);
Form1.ShowModal;
except
Result:='01';
Exit;
end;
try
form1.ADOConnection1.Connected:=True;
except
Result:='02';
Exit;
end;
end;在FormClose中
Couninitialize;
顺便帮我看一下这个
http://expert.csdn.net/Expert/topic/2098/2098223.xml?temp=.4564783