关于ADOConnection1.ConnectionString设置,两问。会者不难。(200分)

  • 主题发起人 主题发起人 springwater
  • 开始时间 开始时间
S

springwater

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能帮帮我啊,我觉得好奇怪啊。我的RemoteDataModule单元名为:urdmStuManageServer。
应用程序服务器名为:StuManageServer(即:RemoteDataModule窗口标题显示字样)。
我的ADOConnection1就放在RemoteDataModule窗口上。现在我想在应用程序服务器主窗体上
放一Button1。在Button1的OnClick事件里写上:
“ADOConnection1.Close;
EditConnectionString(ADOConnection1);
ADOConnection1.Open;”

我在应用程序服务器主窗体单元文件中写了uses urdmStuManageServer, ADOConEd。
可是编译器,还是不能识别ADOConnection1这个词。于是我改写为
“with StuManageServer do
begin
ADOConnection1.Close;
EditConnectionString(ADOConnection1);
ADOConnection1.Open;
end;”

这样StuManageServer和ADOConnection1都不能被识别。我想:大概是因为此时
类TStuManageServer还没被实例化,所以StuManageServer自然不存在了。

谁能告诉我如何才能在应用程序服务器主窗体(还是应该在客户段应用程序主窗体)
的单元文件中引用RemoteDataModule窗口中的ADOConnection1?

-------------------------------
另外用读INI文件的方法给ADOConnection1.ConnectionString赋值,
为什么这段程序我写在RemoteDataModuleCreate事件里,不行呢?
连接网络时程序死掉了。应写在哪里呢?

我写了下面代码,已把字符串'Provider=SQLOLEDB.1;Password=111111;
Persist Security Info=True;User ID=sa;Initial Catalog=StuManage;
Data Source=WengWeng;Use Procedure for Prepare=1;Auto Translate=True;
Packet Size=4096;Workstation ID=WENWEN;Use Encryption for Data=False;
Tag with column collation when possible=False'赋给
ADOConnection1.ConnectionString 了。

procedure TStuManageServer.RemoteDataModuleCreate(Sender: TObject);
var
f1: File of char;
ch: char;
str: string;
begin
ADOConnection1.Connected:= False;
ADOConnection1.ConnectionString:= '';
str:= '';
AssignFile(f1,'ConnectStr.dat'); //ConnectStr.dat存放那一大条字符串
Reset(f1);
WHILE Not Eof(f1) do
begin
Read(f1,ch);
str:= str+ch;
end;
ADOConnection1.ConnectionString:= str;
ADOConnection1.Connected:= True;
CloseFile(f1);
end;

可是运行程序后还是连不上数据库,程序死掉了。
是在RemoteDataModuleCreate里给ConnectionString赋值看来是不行的。
您以前是否这样用过呢?如果您觉得可以的话,我错哪里了呢?
 
1.urdmStuManageServer應該有一個數據模塊的實例,例如RDM.
用RDM.ADOCONNECTION1來引用數據連接
2.我覺得應該在adoconnection1的BeforeConnect事件中處理
 
如果你的程序有另外的TForm的窗口,可把TADOConnection放在上面,就可解决你的问题。
当然,这不是一个很好的办法。
 
谢谢楼上两位
>>urdmStuManageServer應該有一個數據模塊的實例
我的urdmStuManageServer的实例名称在程序的什么地方可以找到呢?
>>您的 RDM 是哪儿来的呢?
 
1 看以下代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1; //看这一行,这就是Tform1的一个实例form1
在其它单元中uses unit1 就可以调用fomr1.caption 等等
implementation

在delphi中,用uses引用一个单元,就是指被引用单元的全局变量或常量可以在
本单元使用(也就是在implementation以前用 var 或 const申明的),如上面的
form1就是一个全局变量。
需要指出的是在RDM(远程数据模块)中是没有这一行了,这就是说你的程序是
肯定通不过的,因RDM必须考虑多用户问题,不能有全局变量。我不清楚你为什么要
在form中调用rdm中的控件,但我必须奉劝你放弃这一想法,这与多用户环境是格格
不入的,在中间层上就是作数据处理,不能作界面。

2 动态赋值肯定是没问题的,你的代码我没试过,但以下方法肯定没问题
var cc:string;
nn:integer;
begin
with Tfilestream.create('ConnectStr.dat',fmopenread)
try
nn:=size;
setlength(cc,size);
read(cc[1],nn);
finally
free;
end;
ADOConnection1.connected:=false;
ADOConnection1.ConnectionString:=cc;
ADOConnection1.connected:=true;
 
在procedure TStuManageServer.ADOConnection1WillConnect
中读ConnectionSting设置文件
 
各位我爱你们!!!
接受答案。马上给分,每人50
 
多人接受答案了。
 

Similar threads

回复
0
查看
804
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部