我定义了个通用变量userdb,在Form Load时,运行以下代码,但无论在SZInventory.ini里有没有找到内容,都只会走ELSE的语句(显示Y), 好郁闷~请高手指教,谢谢!   'On Error GoTo Ext
   strFileName = App.Path & "\SZInventroy.ini"
   lngHandle = FreeFile() 
   Open strFileName For Input As lngHandle
       Do While Not EOF(lngHandle)
                Line Input #lngHandle, strLine
                strAll = strAll & strLine & vbCrLf
    Loop
        userdb = Right(strAll, Len(strAll) - 15)        If userdb = "" Then
          MsgBox userdb
        Else
          MsgBox "Y"
        End If

解决方案 »

  1.   

    strAll----全部SZInventory.ini文件内容,
    userdb = Right(strAll, Len(strAll) - 15) 
    userdb----SZInventory.ini文件从第16个字符到结尾的内容If userdb = "" Then '你找什么?
      

  2.   

    从第16个字符后只要有任意一个字符userdb <>"" ,必然执行 MsgBox "Y" ,理所当然.
      

  3.   

    SZInventory.ini文件有几行?你数据库的名字就是从16位字符开始的,到结尾都是数据库的名字?
      

  4.   

    弄一个空的ini文件试一下就知道了,况且读取ini文件不是这样读的.
      

  5.   

    debug.print 变量,自己调试吧!
      

  6.   


    就算加上trim(UserDB)结果还是一样!
      

  7.   


    debug.Print UserDB也是空的
      

  8.   

    我再说明一下,ini文件里的内容我是可以读得到,问题是出在if语句那里,无论变量UserDB是否为空,都只会走else的语句.
      

  9.   

    那就对了,因为:
    strAll = strAll & strLine & vbCrLf'这句执行完最少strAll里包含了回车换行( vbCrLf')
    所以
    userdb = Right(strAll, Len(strAll) - 15)'userdb它永远也不会空串(userdb="")
    去掉vbCrLf它试试
      

  10.   

    楼主这种读取的方法为一般文本式的 给你一个正宗的读写INI 再找问题吧.你的文件是从头读到尾,中间并没有任何判断,你用来判断的strAll 是你文件的最后一行内容,你永远不会得到等於, 因为内容中将含有许多空格userdb =iif(Len(strAll)>15,trim(Right(strAll, Len(strAll) - 15)), trim(strAll))摘录自 CBM666编程教材 文本文件篇 INI读写
    Option Explicit '强制宣告定义变量
    '************************************* INI 读写用到的API
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFilename As String) As Long
    Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long
    Dim AppDisk$, IniName$ '定义变量Private Sub Form_Load()
       '将窗体居中显示 (屏幕宽度减去窗体的宽度)除以2 , (屏幕高度减去窗体的高度)除以2
       Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
       '将本地路径赋值给变量 AppDisk
       AppDisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
       Command1.Caption = "读 取" '命令按钮1名称
       Command2.Caption = "写 入" '命令按钮2名称
       IniName = AppDisk & "Test.ini" '将INI文件名称带入变量
    End SubPrivate Sub Command1_Click()
       If Dir(IniName) = "" Then MsgBox "INI文件不存在!": Exit Sub '判断文件如不存在则提示,并退出这个事件
       Text1.Text = INIRead("UserPass", "UserName", IniName) '将INI文件里面的UserPass项中的UserName段(用户)的内容导入Text1文本框中
       Text2.Text = INIRead("UserPass", "PassWord", IniName) '将INI文件里面的UserPass项中的PassWord段(密码)的内容导入Text2文本框中
    End SubPrivate Sub Command2_Click()
       If Text1.Text = "" Or Text2.Text = "" Then MsgBox "请输入用户名与密码!": Exit Sub '用户名与密码如为空值不得保存并退出此事件
       Call INIWrite("UserPass", "UserName", Text1.Text, IniName) '将Text1文本框中的内容写入INI文件里面的UserPass项中的UserName段(用户)
       Call INIWrite("UserPass", "PassWord", Text2.Text, IniName) '将Text2文本框中的内容写入INI文件里面的UserPass项中的PassWord段(密码)
       MsgBox "保存完成!"
    End SubPublic Function INIRead(iAppName As String, iKeyName As String, iFileName As String) As String
       On Error Resume Next '如遇错误则继续往下一行运行
       Dim iStr$, aaa$ '定义变量
       iStr = String(255, Chr(0))
       '使用API GetPrivateProfileString将INI文件里面针对某项某段的内容读进变量aaa
       aaa = Left(iStr, GetPrivateProfileString(iAppName, ByVal iKeyName, "", iStr, Len(iStr), iFileName))
       INIRead = IIf(InStr(aaa, Chr(0)) > 0, Replace(aaa, Chr(0), ""), aaa) '将读取的内容变量aaa里面的Chr(0)(不可见的结尾ASCii码),必需以空字符将它替换掉并返回
    End FunctionPublic Function INIWrite(iAppName As String, iKeyName As String, iKeyString As String, iFileName As String)
       On Error Resume Next
       '使用API WritePrivateProfileString 将字符串写进INI文件里面, 针对某项某段的内容更新
       Call WritePrivateProfileString(iAppName, iKeyName, iKeyString, iFileName)
    End Function
      

  11.   

    改为下列代码试一试吧。
    If Instr(strAll,userdb) >0 Then 
              MsgBox userdb 
            Else 
              MsgBox "Y" 
            End If
      

  12.   

    这样写当然会 Msgbox "Y" 啊~~ 主要错误在 
    strAll = strAll & strLine & vbCrLf 
    会使 strAll  加上有N多的空行 当然会引起错误。
    你可以用StrConv一次性读入整个文件 或者 strall=strall & strline