紧急求助!关于用dll来建立ado连接的问题与dll解决重复登录问题。请大家指教。 第一:不可以的,因为每一个EXE在调用一个DLL时,DLL中全局变量是每个程序都有一套的。第二:用同一个用户登录的窗口来验证是可以的,但其它程序还是不可以共享这个连接的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 登录时,exe程序在调用创建登录窗口的dll后,如果知道在登录窗口按下了登录的按纽?(按下后才能验证密码呀) 你做成三层的好了,三个EXE作为客户端,通过中间层连接数据库 access好象是不能做三层的吧,单机上也没这必要。登录的问题,也可以在每个程序登录时,在某一文件(注册表、数据库的字段中)+1,三个程序都打开时最大为3,而当这个值>=1时,就不需要登录,但要给这个值加1,反之则要登录;而在关闭每一个程序时,绘这个值-1. 登陆的问题我认为最好做个记号我的意思是如果登陆了某一个exe那么在一个文本或者注册表写入当然别的开始时先判断注册表这样就可以使几个程序受限制 差不多就是这个意思了,dll 的问题我也不清楚,还是让其他人来看看吧。 登录时,exe程序在调用创建登录窗口的dll后,如果知道在登录窗口按下了登录的按纽?(按下后才能验证密码呀)谁能给我一个demo?愿意出300分! 我这有一个ADO。DLL,首先,不要用BORLAND的,最好用MS的导一个adodb_tlb,如DLL中做登录窗口的,不太大了么,在程序中做不是更好,然后用DLL中的DB_OPEN这样,你也可以做到第二点了,只是看看有没有这三个程序在运行么!在dll中一打开,可同时开它个32个连接这样不就OK了,?我这个ADO。DLL做是做了,不过是用在别的方面了,没有节省什么,反而更。。如真给300分,可以发给你3次,呵呵,我的Email :[email protected]你可以要嘛,说明要ADO。DLL源代码就行, library Project2;uses SysUtils, Classes, Unit2 in 'Unit2.PAS' {Form3};{$R *.res}exports DoTest;beginend.----------------------------------- unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB;type TForm3 = class(TForm) ADOConnection1: TADOConnection; Memo1: TMemo; private { Private declarations } public { Public declarations } end;procedure DoTest(H: THandle; { 传递句柄 } AConn: TADOConnection; { 传递数据库连接 } S: string; { 传递文本信息 } N: Integer); { 传递数值信息 }cdecl; { 指定调用协议 }var form3 : Tform3;implementation{$R *.DFM}procedure DoTest(H: THandle; AConn: TADOConnection; S: string; N: Integer);begin Application.Handle := H; { 将过程的句柄赋值为调用者的句柄 } { 上面语句的作用在于, DLL的句柄和调用者的句柄相同,在任务栏中就不会 } { 各自出现一个任务标题了。 } form3 := TForm3.Create(Application); with form3 do try { 创建窗体 } Memo1.Lines.Append('成功调用'); { 显示一行信息 } ADOConnection1 := AConn; { 获得数据库连接的实例 } Memo1.Lines.Append( ADOConnection1.ConnectionString + ' - ' + S + ' - ' + IntToStr(N)); { 根据得到的参数显示另一行信息 } update; ShowModal; { 模式化显示窗体 } finally Free; { 调用结束时销毁窗口 } end;end;end.-----------------------------------------------以下为调用文件........var Form1: TForm1;implementation{$R *.dfm}procedure DoTest(H: THandle; { 传递句柄 } AConn: TADOConnection; { 传递数据库连接 } S: string; { 传递文本信息 } N: Integer); { 传递数值信息 }cdecl; { 指定调用协议 }external 'Project2.dll'; { 指定过程来源 }{ 调用过程 }procedure TForm1.Button1Click(Sender: TObject);begin DoTest(Application.Handle, ADOConnection1, 'Call OK', 256);end;end. Delphi从webbrowser中复制内容粘贴到新的WEB编辑器中 请版主等高手为我等新手制定学习路线图! 访问结构体里数据 菜鸟问题,一两句话形容不出(所以网上无从差找),求高手援手 灾难性故障 大学原来还是可以这样上的! 对dbgrid进行编辑时,怎样控制只能对当前行进行编辑? TreeView1 怎样加背景图? 怎样释放一个ADOStoredProc? 寻找zip控件 老规矩:在线给分! CSDN 奇慢无比!!!!!!!!!!
登录的问题,也可以在每个程序登录时,在某一文件(注册表、数据库的字段中)+1,三个程序都打开时最大为3,而当这个值>=1时,就不需要登录,但要给这个值加1,反之则要登录;而在关闭每一个程序时,绘这个值-1.
我认为最好做个记号
我的意思是如果登陆了某一个exe
那么在一个文本或者注册表写入
当然别的开始时先判断注册表
这样就可以使几个程序受限制
首先,不要用BORLAND的,
最好用MS的导一个adodb_tlb,
如DLL中做登录窗口的,不太大了么,
在程序中做不是更好,
然后用DLL中的DB_OPEN
这样,你也可以做到第二点了,只是看看有没有这三个程序在运行么!
在dll中一打开,可同时开它个32个连接
这样不就OK了,?我这个ADO。DLL做是做了,不过是用在别的方面了,
没有节省什么,反而更。。如真给300分,可以发给你3次,
呵呵,
我的Email :[email protected]
你可以要嘛,说明要ADO。DLL源代码就行,
SysUtils,
Classes,
Unit2 in 'Unit2.PAS' {Form3};{$R *.res}
exports
DoTest;
beginend.
-----------------------------------
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;type
TForm3 = class(TForm)
ADOConnection1: TADOConnection;
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;procedure DoTest(H: THandle; { 传递句柄 }
AConn: TADOConnection; { 传递数据库连接 }
S: string; { 传递文本信息 }
N: Integer); { 传递数值信息 }
cdecl; { 指定调用协议 }var
form3 : Tform3;implementation{$R *.DFM}procedure DoTest(H: THandle; AConn: TADOConnection; S: string; N: Integer);
begin
Application.Handle := H; { 将过程的句柄赋值为调用者的句柄 }
{ 上面语句的作用在于, DLL的句柄和调用者的句柄相同,在任务栏中就不会 }
{ 各自出现一个任务标题了。 }
form3 := TForm3.Create(Application);
with form3 do
try { 创建窗体 }
Memo1.Lines.Append('成功调用'); { 显示一行信息 }
ADOConnection1 := AConn; { 获得数据库连接的实例 }
Memo1.Lines.Append(
ADOConnection1.ConnectionString +
' - ' + S + ' - ' + IntToStr(N)); { 根据得到的参数显示另一行信息 }
update;
ShowModal; { 模式化显示窗体 }
finally
Free; { 调用结束时销毁窗口 }
end;
end;end.
-----------------------------------------------
以下为调用文件
........
var
Form1: TForm1;implementation{$R *.dfm}procedure DoTest(H: THandle; { 传递句柄 }
AConn: TADOConnection; { 传递数据库连接 }
S: string; { 传递文本信息 }
N: Integer); { 传递数值信息 }
cdecl; { 指定调用协议 }
external 'Project2.dll'; { 指定过程来源 }{ 调用过程 }procedure TForm1.Button1Click(Sender: TObject);
begin
DoTest(Application.Handle,
ADOConnection1,
'Call OK',
256);
end;end.