使用ADO的问题

niat97222 2002-12-21 10:01:46
我的程序使用ADO连接数据库,在设计的时候Adoconnection连接到本地的数据库,但是编译好之后,会读取注册表信息,然后根据注册表里面的数据,动态的创建ConnectionString然后去连接数据库。
但是,我如果是在adoconnection还连接着数据库的时候,将程序编译好,这样拿到客户那里的话,程序开始运行的时候adoconnection就会去试图连接我写程序的时候的那个数据库 ,然后报一个错,找不到数据库,然后再去读取注册表信息,构建ConnectionString连接客户的数据库。
可是我如果编译的时候把Adoconnection和数据库断开的话,编译好的程序拿到客户那里的时候,就会直接读取注册表信息,然后根据注册表信息构建ConnectionString,然后连接数据库,不会尝试去连接一个不存在的数据库。
我现在有什么办法可以不管编译的时候我的Adoconnection是什么状态,程序换个地方还是直接去读注册表信息,然后连接客户的数据库呢
...全文
25 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
niat97222 2003-01-09
  • 打赏
  • 举报
回复
晕倒,都结过一次帖了得
井中老男孩 2003-01-09
  • 打赏
  • 举报
回复
该揭贴了
4130046 2003-01-04
  • 打赏
  • 举报
回复
都是高手,看不懂什么意思!不是太空人把?
TOMWLD 2003-01-04
  • 打赏
  • 举报
回复
在ADOConnection的BeforeConnect事件中动态设定ConnectionString
smilelhh 2003-01-04
  • 打赏
  • 举报
回复
你在程序里面将adoconnect的connectstr设为空,(不要设置属性)
联接用程序代码实现就可以了.
井中老男孩 2003-01-04
  • 打赏
  • 举报
回复
function TMainDataModule.GetConnectionString(const strKey,ConString:String): String;
var
m_reg:TRegistry;
begin
//获得数据库连接串
//ConString='' 从注册表中获得连接串,如果不存在则生成
//ConString<>'' 编辑存在的连接串,然后更新注册表
m_reg:=TRegistry.Create;
m_reg.RootKey:=HKEY_LOCAL_MACHINE;
m_reg.OpenKey(app.RegKey,true);
if ConString='' then //从注册表中读取
begin
Result:=m_reg.ReadString(strKey);
if Result='' then
begin
Result:=PromptDataSource(Application.Handle,ConString);
Result:=ConStringEncrypt(Result);
if Result<>'' then
m_reg.WriteString(strKey,Result);
end;
end
else //编辑存在的连接串
begin
Result:=PromptDataSource(Application.Handle,ConString);
Result:=ConStringEncrypt(Result);
m_reg.WriteString(strKey,Result);
end;
m_reg.Free;
Result:=ConStringDecrypt(Result);
end;

ConStringDecrypt
ConStringEncrypt
是字符串加密解密函数,要想加密的话自己写,否则不用加密了。
gxh973121 2003-01-04
  • 打赏
  • 举报
回复
肯定是你设计错误,好好调试一下
niat97222 2003-01-03
  • 打赏
  • 举报
回复
再没人回帖了,只好结贴把
INeedCa 2002-12-23
  • 打赏
  • 举报
回复
可能是我没有说清楚把,只有INeedCa(缺钙)理解了我的意思,将AdocConnection的Connected属性设置为False然活再编译就可以解决问题,但是,我在写程序的时候,只有一访问数据库,AdoConnection的Connected属性就会变为True,假如我编译的时候忘记改回去了,程序拿到客户那里就会出问题了。所以,可以怎么样避免呢
--------
尽量在代码里设置你的ADOConnection的连接(在你的逻辑中真正要连接数据库的时候),不要设计期就设定连接。
niat97222 2002-12-23
  • 打赏
  • 举报
回复
可是不管怎么样,我在设计的时候肯定要连接数据库的阿,所以在设计期就设定连接是不可避免的。
我想知道大家都是怎么解决这个问题的
niat97222 2002-12-22
  • 打赏
  • 举报
回复
这个方法不行,程序是创建AdoConnection的时候就连接数据库了。
但是我假如在我的数据模版的oncreate事件中写,也不可以。Adoconnection还是要连接数据库。
songdan2002 2002-12-22
  • 打赏
  • 举报
回复
在Application.Run之前设置ADOConnection吧,不过最好是给客户前将程序改一改,编写程序不可以养成随便的习惯呀。
niat97222 2002-12-21
  • 打赏
  • 举报
回复
可能是我没有说清楚把,只有INeedCa(缺钙)理解了我的意思,将AdocConnection的Connected属性设置为False然活再编译就可以解决问题,但是,我在写程序的时候,只有一访问数据库,AdoConnection的Connected属性就会变为True,假如我编译的时候忘记改回去了,程序拿到客户那里就会出问题了。所以,可以怎么样避免呢
INeedCa 2002-12-21
  • 打赏
  • 举报
回复
"编译的时候我的Adoconnection是什么状态" 如果你把ADOConnection的Connected设置为True,则程序在初始化窗体的时候就会连接数据库,你还是把默认值设置为False吧。
wjlsmail 2002-12-21
  • 打赏
  • 举报
回复
将这个文件放在固定目录下就可以,FormCreate时读出链接字符串,再赋给ADOConnection
wjlsmail 2002-12-21
  • 打赏
  • 举报
回复
我的意思你放在外部 .Dat/.Txt/.INI 中也一样,操作也方便
niat97222 2002-12-21
  • 打赏
  • 举报
回复
我正是这样做的
注册表存放服务器名,数据库名,用户名,口令
问题是假如我编译的时候没有将adoconnection的connected属性设置为false的话,那么程序运行的时候首先会调用我设计的时候的connectionstring去连接数据库,连接不成功然后才会去读注册表,这个是我不希望的。
wjlsmail 2002-12-21
  • 打赏
  • 举报
回复
将链接字符串写在文件里读可以吗 ?应该能满足要求
My_first 2002-12-21
  • 打赏
  • 举报
回复
你注册表只要存放用户名,服务器名,口令。

最后连接起来送给acoconnection 的ConnectionString属性就行了。 

westfly 2002-12-21
  • 打赏
  • 举报
回复
改变ConnectionString之前先断开连接。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧