在Dll中连接数据库(100分)

  • 主题发起人 主题发起人 HuangSkar
  • 开始时间 开始时间
H

HuangSkar

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的一个项目中要求在动态连接库中使用主程序中的Database组件,
我在Dll中放了一个Database组件,主程序调用Dll时,将主程序里的
Database传到Dll里,然后用Dll里的数据库组件接收从主程序里传过来
的Database,然后打开Dll中的Table,下面有两种情况发生:
(1)如果将主程序和Dll里Projtect/Options里的选项Compile with run time
package都选中,那麽在Dll中打开Table时,不会弹出DataBase Login的对话框;
(2)如果主程序或Dll中有任何一个没有选择Comple with run time paceage,
则在打开Dll中的Table时会弹出DataBase Login的对话框;
不知哪位大虾能告诉我,为什麽会出项这两种情况?


 
再追问一句,再不选择complile with run time package的情况下,如何
不让database login Dialog弹出来?
 
DataBase.logonPrompt:=False
 
传递Session过去。
 
ychshi,
如何传递session,给个例子如何?
 
这是我的Dll中的调用代码:
procedure ShowDataImportForm(AHandle:THandle;Base:TDataBase;UserName:PChar;MySession:TSession);
var
i:integer;
DllSession:TSession;
begin
Application.Handle:=AHandle;
DllSession:=TSession.create(nil);
DllSession:=MySession;
CustomerData:=TCustomerData.create(Application);
with CustomerData do
begin
Table1.DatabaseName:=Base.Databasename;
Table1.SessionName:=DllSession.SessionName;
Table1.TableName:=Username;
Table1.Open;
end;
MainForm:=TMainForm.Create(Application);
Try
MainForm.showmodal;
finally
MainForm.free;
CustomerData.Free;
DllSession.free;
end;
end;
但是调用的时候依然出现对话框,而且调用完毕后
将主程序里里的Session和database都关闭了,不知是
什麽原因?
哪位大虾肯指点?????
 
Procedure Pro1; export;cdecl;
var
DataBase1:TDataBase;
Query:TQuery;
begin
DataBase1:=TDataBase.Create(nil);
Query:=TQuery.Create(nil);

with DataBase1 do
begin
Params.Clear;
Params.Add('DataBase1 NAME=');
Params.Add('USER NAME=...');
Params.Add('ODBC DSN=...');
Params.Add('OPEN MODE=READ/WRITE');
Params.Add('BATCH COUNT=200');
Params.Add('LANGDRIVER=');
Params.Add('MAX ROWS=-1');
Params.Add('SCHEMA CACHE DIR=');
Params.Add('SCHEMA CACHE SIZE=8');
Params.Add('SCHEMA CACHE TIME=-1');
Params.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
Params.Add('SQLQRYMODE=SERVER');
Params.Add('ENABLE SCHEMA CACHE=FALSE');
Params.Add('ENABLE BCD=FALSE');
Params.Add('ROWSET SIZE=20');
Params.Add('BLOBS TO CACHE=2048');
Params.Add('BLOB SIZE=2048');
Params.Add('PASSWORD=...');
KeepConnection := False;
LoginPrompt := FALSE;
DataBaseName:=...;
end;

with Query do
begin
DataBaseName:=DataBase1.DatabaseName;
Close;
SQL.Clear;
Open;
end;
Query.Free;
DataBase1.Free;
end;

Exports
Pro1 index 1 name 'Pro1';
 
难道无人知道??
 
多谢二位光顾,结束这个问题。
 
后退
顶部