单位局域网,有两台服务器FUWU1和WEB2,两服务器上都有一个一模一样的数据库XCQK,现在在局域网内客户端上存取服务器数据。程序中的DTPicker1是日历控件,下面是部分过程的代码:
Option Explicit
Dim myCnn As New ADODB.Connection
Dim myRs As New ADODB.Recordset
Dim myStr As String ‘连接字符串
Private Sub Form_Load()
'下面是远程连接FUWU1服务器
myStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog= XCQK;Data Source=FUWU1"
myCnn.ConnectionString = myStr
myCnn.Open
myRs.Open "select max(日期) from 日报", myCnn, adOpenStatic, adLockReadOnly
…………
myRs.Close
myCnn.Close
End Sub
Private Sub DTPicker1_Change()
myCnn.Open
myRs.Open "select * from 日报 where 日期='" & DTPicker1.Value & "'", myCnn, adOpenStatic, adLockReadOnly
…………
myRs.Close
myCnn.Close
End Sub
Private Sub CmdEnd_Click()
Set myRs = Nothing
Set myCnn = Nothing
End
End Sub
上面的程序能正常操作数据库中的数据,存、取、删,都没问题。
当我将Form_Load过程中的连接字符串替换为下面的代码后(其余的代码一点都没改),Form_Load过程能运行,并读出了数据库中的数据,但在日历控件DTPicker1过程里却提示“用户xxxx登录失败”:
'下面是远程连接WEB2服务器
myStr="Provider=SQLOLEDB.1;Persist Security Info=False; User ID=xxxx;Password=1234;Initial Catalog=XCQK;Data Source=WEB2"
后来稀里胡糊涂地在DTPicker1过程里myCnn.Open的前面补了一行:
myCnn.ConnectionString = myStr
并在其余所有的myCnn.Open语句前面都补了这行之后程序才正常运行。请高手指点,这是为什么呀?
请注意修改之前的程序,DTPicker1过程里没有myCnn.ConnectionString = myStr,是因为连接字符串myStr 是在声明区中声明的,所以只在Form_Load过程中赋一次值,后面再打开数据库时不用再赋值。
两个连接字符串的区别:前一个是sa用户、空白密码,后一个是网管给我另建的用户,管理员权限。
VB6连SQL2000数据库,连接字符串,奇怪问题
答案:3 悬赏:0
解决时间 2021-02-02 22:40
- 提问者网友:践踏俘获
- 2021-02-02 05:34
最佳答案
- 二级知识专家网友:寂寞的炫耀
- 2021-02-02 06:20
没有程序调试不知道原因,不过这个与mystr没有关系,一般关闭mycnn后,有些于此相关的数据也没有了,
打开连接最好这样
myCnn.Open myStr
这样就不会出错了
打开连接最好这样
myCnn.Open myStr
这样就不会出错了
全部回答
- 1楼网友:迷人小乖乖
- 2021-02-02 08:19
建议直接写一个连接数据库的模块
连接的时候直接调用就可以了。
格式也统一了。也就不会出现上面的情况
- 2楼网友:转身→时光静好
- 2021-02-02 07:53
adodb.connection不open就是不连数据库,当然必须要open
如果连接2个数据库,用2个connection连接
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯