我用ado通过odbc连接sqlserver时碰到一个很奇怪的问题,如果我的查询sql语句不带任何条件判断如:select 项目名称 from 勘查项目受理则可以正常找到记录,但是如果把查询语句加上条件判断如:select 项目名称 from 勘查项目受理 where 申请序号=04530032,则怎么样也找不到记录,我到sqlserver数据库里面查是可以查到这条记录的,这是为什么呢?以下是我的程序:Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strsql As String
cn.Open "FILE NAME=C:\teckhit\tksp.dsn", "guest", "guest"
strsql = "select 项目名称 from 勘查项目受理 where 申请序号=04530032"
Set rs = cn.Execute(strsql)
If Not rs.EOF Then
   MsgBox rs.Fields("项目名称").Value
End If
Set rs = Nothing
cn.Close
Set cn = Nothing

解决方案 »

  1.   

    strsql = "select 项目名称 from 勘查项目受理 where 申请序号='04530032'"
    这样看看
      

  2.   

    试过了,还是不行,我在想是不是使用odbc连接数据库时,查询语句是不可以带条件的?
      

  3.   

    我的可以,VB6 SP5 + SQL SERVER 2000,ADO是2.5。不过这些没什么妨碍,应该是哪里的配置有问题。建议你用最通用的方法测试一下,另开一个工程,DSN直接设在ODBC上,用sa访问,cn打开时也不用什么guest,rs用 rs.open strsql, cn 来打开,一点点排除
      

  4.   

    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    '这里改成连接字符串
    cn.connectionstring="........."
    '下边这句话去掉,改成cn.open
    'cn.Open "FILE NAME=C:\teckhit\tksp.dsn", "guest", "guest"
    strsql = "select 项目名称 from 勘查项目受理 where 申请序号=04530032"
    '下边这句rs改成rs.Source
    Set rs = cn.Execute(strsql)
    If Not rs.EOF Then
       MsgBox rs.Fields("项目名称").Value
    End If
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
      

  5.   

    Set rs = cn.Execute(strsql)
    改成
    rs.open strsql,cn,adOpenDynamic,adLockOptimistic
    试试
      

  6.   

    在问题解决以前,我想说的是我的电脑没有装sqlserver2000的客户端程序,我是直接用odbc连局域网内其他的服务器!
      

  7.   

    另外说明一点的是,如果我用以下方式是可以查询到的,但没有带条件Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    cn.Open "FILE NAME=C:\teckhit\tksp.dsn", "guest", "guest"
    strsql = "select 项目名称 from 勘查项目受理" **************
    Set rs = cn.Execute(strsql)
    If Not rs.EOF Then
       MsgBox rs.Fields("项目名称").Value
    End If
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
      

  8.   

    我试过了下面的方法,还是不行,为什么啊?
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    cn.Open "FILE NAME=C:\teckhit\tksp.dsn", "guest", "guest"
    strsql = "select 项目名称 from 勘查项目受理 where 申请序号='04530032'"
    rs.Open strsql, cn, adOpenDynamic, adLockPessimistic
    If Not rs.EOF Then
       MsgBox rs.Fields("项目名称").Value
    End If
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
      

  9.   

    我公司里有些程序就是用ODBC连接服务器上的SQL数据库,没有问题,游标改为下面的试试。另外,字段“申请序号”建议改用英文(字母)。strsql = "select 项目名称 from 勘查项目受理 where 申请序号='04530032'"
    rs.Open strsql, cn, adOpenKeyset, adLockOptimistic
    If rs.RecordCount = 0 Then
       MsgBox rs.Fields("项目名称")
    End If
      

  10.   

    上面笔误,不好意思
    游标改为下面的试试。另外,字段名称建议改用英文(字母)。strsql = "select 项目名称 from 勘查项目受理 where 申请序号='04530032'"
    rs.Open strsql, cn, adOpenKeyset, adLockOptimistic
    If rs.RecordCount > 0 Then
       MsgBox rs.Fields("项目名称")
    End If
      

  11.   

    rs.CursorLocation = adUseClient
    strsql = "select 项目名称 from 勘查项目受理 where 申请序号= '" & "04530032'"
    Set rs = cn.Execute(strsql)
    If Not rs.EOF Then
       MsgBox rs.Fields("项目名称").Value
    End If
      

  12.   

    Sorry!贴错了,更正:rs.CursorLocation = adUseClient
    strsql = "select 项目名称 from 勘查项目受理 where 申请序号= '" & "04530032'"
    rs.Open strsql, cn, adOpenStatic, adLockOptimistic, adCmdText
    If Not rs.EOF Then
       MsgBox rs.Fields("项目名称").Value
    End If