设计在DLL中设计窗体并实现对数据库(ORACLE)的操作,如果Database放在
此窗体上,Query的DatabaseName指向此Database,设置好Database属性后,使用
主程序调用此DLL,可正常实现数据操作,但我想使此Database可供多个DLL使用,
因此把Database移到主程序中,但当调用时,总是出现数据库登陆框,要求输入
用户名和密码,不知道是不是有什么属性没有设好还是根本就DLL中无法共享Database,
请各位指教!!!
主界面用一个TDATABASE,连接数据库,DATABASENAME为'abc'(这个名字从来不用!)
在params属性里写
username=system
password=manager
然后 loginprompt 为 false,就可以。
DLL里用一个TDATABASE,一个TQUERY.TDATABASE 的 DATABASENAME 为'tt',TQUERY 的 DATABASENAME 也为'tt'
TDATABASE 除了给一个 DATABASENAME ,其他什么也不用管。
程序里这样写:
DLL:
exports p_showdata;
procedure p_showdata(dd : TDatabase; f : HWnd) ;
begin
application.Handle := f;
form2 := Tform2.Create(application);
form2.Database1.Handle := dd.Handle;//赋句柄就行了,以前说错了,不好意思!
form2.showmodal;
form2.free;
form2.Database1.Handle := 0;
application.Handle := 0;
end;
调用程序:
procedure TForm1.Button1Click(Sender: TObject);
var
alib : Thandle;
proc : Procedure(a : Tdatabase; f : HWnd);
begin
alib := LoadLibrary('./dll');
if alib >= 32 then
begin
proc := GetProcAddress(alib,'p_showdata');
proc(Database1,Application.Handle);
end;
freelibrary(alib);
end;