问一个关于adoconnection的怪问题(100)

  • 主题发起人 主题发起人 zbdzjx
  • 开始时间 开始时间
Z

zbdzjx

Unregistered / Unconfirmed
GUEST, unregistred user!
我们公司有一个系统,比较大的,是用D7+sql server 2000开发的,是用的感应控件,adoconnection和adoquery。以前,只有一个生产库,在设计阶段就将数据库连接好了。现在,想增加一个测试库,这样,在登录时就要选择登录的库了。登录窗口的显示方式是,先显示主窗口mainfrm,再弹出登录窗口loginfrm,adoconnection在主窗口中。碰到的问题是:因为之前设计时就已经连到生产库了,所以也没改,只是在登录窗口中进行判断,如果选择测试库,就将adoconnection关闭,改connectionstring,再打开adoconnection。后来经过测试,居然连接的数据库没有变,无论选择什么,都连接到生产库了。后来我在一个窗口中增加了下面几个代码:showmessage(mainfrm.adoconnection1.connectionstring);showmessage(adoquery1.connection.connectionstring);显示的结果都是连接到测试库了,我再试了一下:mainfrm.adoconnection1.close;mainfrm.adoconnection1.open;再查询结果,还是连接到生产库了。(测试库已经被我清空了,但现在还能查到数据,这表示错了。)不知那位高手指点一下,是什么原因???
 
只用一个adoconnection,选择生产库则用生产库的参数,选择测试库则用测试库的参数,我现在用的程序就这样,一套程序对应几个数据库,在登录窗口用下拉框选择,填入对应的参数:Data source=,Initial Catolog=,ID=,Password=
 
仔细看看代码先,该问题不怪!
 
问题已经解决,分数二位平均分了,谁多谁少莫怪。原因分析:  在adoconnection的属性中,有一个DefaultDatabase,存放连接的数据库,通过试验及网上的搜索,证明,如果在设计阶段建立了ConnectionString,并打开了adoconnection,则DefaultDatabase属性会填写上数据库的名称,这样,如果更改ConnectionString,则有可能不会改变DefaultDatabase属性,于是,当adoconnection再次打开时,连接的数据库不变。解决办法:  在给ConnectionString付新值时,将DefautlDatabase属性也改成新的数据库。经试验完全成功。问题延伸:  一般在修改ConnectionString时,可能会修改四个地方:服务器名、用户名、密码、数据库名,在修改完ConnectionString后,最好将这四个名也重新付一下值,免得出现怪问题。
 
后退
顶部