遇到“无效的授权说明”这种错误问题的兄弟来一下!
用vb连接sqlserver2000,用以下语句能正常访问:
cn.Open "Provider=SQLOLEDB;Data Source=localhost;User ID=savesms;Password=savesms;Initial Catalog=savesms;Persist Security Info=True "
现在公司要求服务器名、数据库名、登录用户和密码要从.ini文件中读取,现在读取ini文件里的变量没有问题,可连接语句改成下面的就有提示:无效的授权说明
cn.Open "Provider=SQLOLEDB;Data Source= " & tempserver1 & " ;User ID= " & tempusername1 & " ;Password= " & tempuserpassword1 & " ;Initial Catalog= " & tempdatabasename1 & " ;Persist Security Info=True "
更奇怪的是 tempserver1,tempusername1等4个变量的值都已经得到了,就是读出来了。还是不能正常执行这条sql语句,
一定非要把:
tempserver1 = "localhost "
tempusername1 = "sa "
tempuserpassword1 = "ren "
tempdatabasename1 = "savesms "
这样的赋值变量写上才能正常执行sql语句,晕,请高手们给个说法。
公司要求 不能把数据库都配置说明直接写入程序,要可以自己控制,所以要写在.ini文件中,求你们了。
[解决办法]
估计是trim之类的问题,最简单的:
s= "Provider=SQLOLEDB;Data Source= " & tempserver1 & " ;User ID= " & tempusername1 & " ;Password= " & tempuserpassword1 & " ;Initial Catalog= " & tempdatabasename1 & " ;Persist Security Info=True "
debug.print s= "Provider=SQLOLEDB;Data Source=localhost;User ID=savesms;Password=savesms;Initial Catalog=savesms;Persist Security Info=True "
[解决办法]
果然,问题就出在ini文件的读取上,我以tempusername变量为例说明一下,其余的你类似修改:
在你的程序中,先定义了:
Dim tempusername As String * 50
这样是没有问题的
然后,取出数据到缓冲区:
getusername = GetPrivateProfileString(lpAppName, susername, lpDefault, tempusername, Len(tempserver), lpFileName)
这个也是没问题的(不过,最好把Len(tempserver)改为Len(tempusername),这是个习惯问题)
问题在于,取出字串后tempusername除了包含正常的数据( "sa ")外,其结尾还有一连串的chr(0),也就是说,尽管看起来用msgbox 或debug.print输出的字串显示为 "sa ",但实际上,他们并不相等(可以用MsgBox tempusername = "sa "看看是否返回true)
解决办法:
dim s as string
s = Left(tempusername, InStr(1, tempusername, Chr(0)) - 1)
或者
s=left(tempusername,getusername)
或者
s = Replace(tempusername, Chr(0), " ")
总之,不管用什么办法,把字串结尾的chr(0)结尾去掉就行