我想动态的指定ADOConnction的ConnctionString,于是我把一些连接信息保存在注册表中,在ADOConnction的BeforeConnct事件中ConnctionString赋值
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
begin
Server:=Reg.ReadString('Server');
UserName:=Reg.ReadString('UserName');
Pwd:=Reg.ReadString('Pwd');
Database:=Reg.ReadString('Database');
Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
end;
finally
Reg.Free;
end;
end;
这一段代码,在普通的应用程序中,一点问题也没有,运行很正常。但我在做ISAPI/NSAPI Dynamic link Library 类型的Web Service时使用了上边的代码,发现adocMain.ConnectionString并没有被正确赋值。为了验证从注册表读出的变量是否有问题,我把这些变量赋成固定值:
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
begin
Server:='127.0.0.1';//Reg.ReadString('Server');
UserName:='sa';//Reg.ReadString('UserName');
Pwd:='sa';//Reg.ReadString('Pwd');
Database:='wygl';//Reg.ReadString('Database');
Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
end;
finally
Reg.Free;
end;
end;
结果发现这样,仍然不行,于是,去掉访问注册表的内容
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
// Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
//Reg := TRegistry.Create;
// try
// Reg.RootKey:=HKEY_LOCAL_MACHINE;
// if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
// begin
Server:='127.0.0.1';//Reg.ReadString('Server');
UserName:='sa';//Reg.ReadString('UserName');
Pwd:='sa';//Reg.ReadString('Pwd');
Database:='wygl';//Reg.ReadString('Database');
// Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
// end;
// finally
// Reg.Free;
// end;
end;
或者直接
adocMain.ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=127.0.0.1';
这样可以了,请各位帮忙分析一下原因,问题出在哪里?
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
begin
Server:=Reg.ReadString('Server');
UserName:=Reg.ReadString('UserName');
Pwd:=Reg.ReadString('Pwd');
Database:=Reg.ReadString('Database');
Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
end;
finally
Reg.Free;
end;
end;
这一段代码,在普通的应用程序中,一点问题也没有,运行很正常。但我在做ISAPI/NSAPI Dynamic link Library 类型的Web Service时使用了上边的代码,发现adocMain.ConnectionString并没有被正确赋值。为了验证从注册表读出的变量是否有问题,我把这些变量赋成固定值:
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
begin
Server:='127.0.0.1';//Reg.ReadString('Server');
UserName:='sa';//Reg.ReadString('UserName');
Pwd:='sa';//Reg.ReadString('Pwd');
Database:='wygl';//Reg.ReadString('Database');
Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
end;
finally
Reg.Free;
end;
end;
结果发现这样,仍然不行,于是,去掉访问注册表的内容
procedure TbrSoapDataModule.adocMainBeforeConnect(Sender: TObject);
var
// Reg: TRegistry;
Server,UserName,Pwd,Database,s:string;
begin
//Reg := TRegistry.Create;
// try
// Reg.RootKey:=HKEY_LOCAL_MACHINE;
// if Reg.OpenKey('\Software\BrainSoft\brWebService', True) then
// begin
Server:='127.0.0.1';//Reg.ReadString('Server');
UserName:='sa';//Reg.ReadString('UserName');
Pwd:='sa';//Reg.ReadString('Pwd');
Database:='wygl';//Reg.ReadString('Database');
// Reg.CloseKey;
s:='Provider=SQLOLEDB.1;Password='+Pwd+';Persist Security Info=True;User ID='+UserName+';Initial Catalog='+Database+';Data Source='+Server;
adocMain.ConnectionString:=s;
// end;
// finally
// Reg.Free;
// end;
end;
或者直接
adocMain.ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=127.0.0.1';
这样可以了,请各位帮忙分析一下原因,问题出在哪里?
解决方案 »
- 多位BYTE型与十进制之间的转换问题
- 程序如何才能抓到系统登录界面的屏?注意了,是登录界面,不是登录之后的界面。
- 请问Delphi有没有关于并行计算和并行处理方面的资料
- 关于动态报表的问题
- 急!在WIN2000和WIN98的机器上显示'[DBNMPNTW]找不到指定的sqlserver', XP正常,我用的delphi7,谢谢高手指教!
- webbrowser问题
- MS SQL Server数据库管理员需要那些技能和品质?散分!
- 版本控制VSS有那位有完整的下载地址,谢谢了
- 想改变mouse图标,用LoadCursor存在的问题.
- 有关NMHTTP控件的问题:(
- 请大家进来看看这段代码。也许你会感兴趣的。
- 怎样使quickrep强制分页,详细内容在里面
你单步执行了吗?
你可以这样验证一下:
try
//...
except
ShowMessage('打开注册表时发生错误!');
end;还有,我觉得你关闭注册表的代码应该放在finally部分。或者用两个try/finally嵌套块,分别用来关闭注册表和释放TRegistry对象
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
I.Maxim := MaximStr;
I.Explain := '可用分不够可以给我发短消息';
I.Desire := '加不加分随你';
—————————————————————————————————