用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文件中,求你们了。

解决方案 »

  1.   

    //公司要求 不能把数据库都配置说明直接写入程序,要可以自己控制,所以要写在.ini文件中,求你们了。
    你把:
    tempserver1 = "localhost"
    tempusername1 = "sa"
    tempuserpassword1 = "ren"
    tempdatabasename1 = "savesms"
    都放入ini文件中,定义好4个变量后,读取ini不就行了吗?至于你说的
    //更奇怪的是 tempserver1,tempusername1等4个变量的值都已经得到了,就是读出来了。还是不能正常执行这条sql语句,我估计是字串处理的有问题
      

  2.   

    估计是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"
      

  3.   

    顶什么顶啊,你的ini文件读取部分可能有问题,贴出来啊
      

  4.   

    楼上的老大,放在ini文件中的相关参数,在我的程序中能正确地读出来。我用 msgbox tempserver ,能正确显示localhost,共他也一样,应该说读Ini文件没有问题,我把读ini文件源码放出:'------------------------------配置文件变量
    Dim getusername As Long
    Dim getuserpassword As Long
    Dim getserver As Long
    Dim getdatabasename As LongDim tempusername As String * 50
    Dim tempuserpassword As String * 50
    Dim tempserver As String * 50
    Dim tempdatabasename As String * 50
    Dim susername As String, suserpassword  As String, sserver As String, sdatabasename As String
    '--------------读配置文件 iniFile = App.Path & "\config.ini"lpAppName = "Data" '主题键sserver = "server"
    sdatabasename = "databasename"
    susername = "username"
    suserpassword = "userpassword"
    lpDefault = 0
    lpFileName = Filegetserver = GetPrivateProfileString(lpAppName, sserver, lpDefault, tempserver, Len(tempserver), lpFileName)
    getdatabasename = GetPrivateProfileString(lpAppName, sdatabasename, lpDefault, tempdatabasename, Len(tempserver), lpFileName)
    getusername = GetPrivateProfileString(lpAppName, susername, lpDefault, tempusername, Len(tempserver), lpFileName)
    getuserpassword = GetPrivateProfileString(lpAppName, suserpassword, lpDefault, tempuserpassword, Len(tempserver), lpFileName)
    ... '实例化Connection对象
       Set cn = New ADODB.Connection
       cn.CursorLocation = adUseClient   cn.Open "Provider=SQLOLEDB;Data Source=" & Trim(tempserver) & ";User ID=" & Trim(tempusername) & ";Password=" & Trim(tempuserpassword) & ";Initial Catalog= " & Trim(tempdatabasename) & ";Persist Security Info=True"
        
      

  5.   

    关键就是:   cn.Open "Provider=SQLOLEDB;Data Source=" & Trim(tempserver) & ";User ID=" & Trim(tempusername) & ";Password=" & Trim(tempuserpassword) & ";Initial Catalog= " & Trim(tempdatabasename) & ";Persist Security Info=True"执行时,提示:无效的授权说明,tempserver等变量,换成具体的值 就可以了。唉,从没遇到过这种问题,请大侠们指导
      

  6.   

    果然,问题就出在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)结尾去掉就行
      

  7.   

    我用了trim ,好像没什么用?
      

  8.   

    //大哥辛苦了,但我不知道如何为字串分配缓冲区??你已经分配了:Dim tempusername As String * 50//我用了trim ,好像没什么用肯定没用,多出来的不是空格,而是chr(0)