注册 登录
编程论坛 VB6论坛

帮我看看这哪错了!查询语句

wxflw 发布于 2012-10-29 17:30, 385 次点击
只有本站会员才能查看附件,请 登录
帮我看看什么问题!还有,关闭rs用在什么位置好?如果才一个窗体卸载后,打开的数据库还要用rs.close吗?
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim sc As String
If Len(Combo1.Text) > 0 Then
      sc = "区域 = '" & Combo1.Text & "'"
End If
If Len(Combo2.Text) > 0 Then
    If Len(sc) > 0 Then
           sc = sc & " and 板块 = '" & Combo2.Text & "'"
    Else
          sc = "板块 = '" & Combo2.Text & "'"
    End If
End If
If Len(sc) > 0 Then
     Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88;"
    sql = "select * from czfy where " & sc
    'If rs.State = 1 Then rs.Close '如果数据库没有关闭就先关闭再打开'《=========================这一句好像也不行,但是在登陆窗体没出问题
     rs.Open sql, cn, adOpenForwardOnly, adLockBatchOptimistic   '《=========================这里错了!提示:对象变量或with变量未设置!!
End If
   If rs.EOF And rs.BOF Then
    MsgBox "没有符合条件的房屋,请您确认后重新输入", 32, "管理"
    Else
    Set MSHFlexGrid3.DataSource = rs '《=========================这里有问题吗?
   End If
   rs.Close
   cn.Close
End Sub

[ 本帖最后由 wxflw 于 2012-10-30 08:32 编辑 ]
7 回复
#2
wxflw2012-10-29 17:34
还有!我把查询到的数据显示到 MSHFlexGrid3里!怎么也出错了?


Set MSHFlexGrid3.Source = rs
#3
codoc2012-10-29 21:56
程序代码:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

If cn.State = adStateOpen Then cn.Close

cn.CursorLocation = adUseClient '加了这个

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88;"
Dim sql As String
Dim sc As String

If Len(Combo1.Text) > 0 Then
      sc = "区域 = '" & Trim(Combo1.Text) & "'"
End If

If Len(Combo2.Text) > 0 Then
    If Len(sc) > 0 Then
           sc = sc & " and 板块 = '" & Trim(Combo2.Text) & "'"
    Else
          sc = "板块 = '" & Trim(Combo2.Text) & "'"
    End If
End If

If Len(sc) > 0 Then
   
   sql = "select * from czfy where " & sc
  
   If rs.State = adStateOpen Then rs.Close   'If rs.State = 1 Then rs.Close '如果数据库没有关闭就先关闭再打开'《=========================这一句好像也不行,但是在登陆窗体没出问题
  
   rs.Open sql, cn, 1, 1 'adOpenForwardOnly, adLockBatchOptimistic   '《======这里错了!提示:对象变量或with变量未设置!!

   If rs.EOF And rs.BOF Then
  
    MsgBox "没有符合条件的房屋,请您确认后重新输入", 32, "管理"
   
    Else
   
   ' MsgBox rs.RecordCount
      
   
   ' Set MSFlexGrid3.DataSource = rs  '《====这里不行!!MSFlexGrid好像不支持recordset,具体没研究

    Set DataGrid1.DataSource = rs.Clone '换了个DataGrid控件就可以正常显示

   End If

   If rs.State = adStateOpen Then rs.Close

End If

'If cn.State = adStateOpen Then cn.Close


拿你的数据库测试了。可以运行。


[ 本帖最后由 codoc 于 2012-10-30 20:30 编辑 ]
#4
codoc2012-10-29 21:58
因为没有你的数据库,也测试不了。应该这样改过就可以了。
#5
wxflw2012-10-30 08:31
Dim cn As ADODB.Connection
 Dim rs As ADODB.Recordset
 
Set cn = New ADODB.Connection
 
If cn.State = adStateOpen Then cn.Close
 cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88;" '这一句没有错
 
Dim sql As String
 Dim sc As String
 
If Len(Combo1.Text) > 0 Then
       sc = "区域 = '" & Trim(Combo1.Text) & "'"
 End If
 
If Len(Combo2.Text) > 0 Then
     If Len(sc) > 0 Then
            sc = sc & " and 板块 = '" & Trim(Combo2.Text) & "'"
     Else
           sc = "板块 = '" & Trim(Combo2.Text) & "'"
     End If
 End If
 
If Len(sc) > 0 Then
     
   sql = "select * from czfy where " & sc
   
    If rs.State = adStateOpen Then rs.Close   ’这句改过后没有出错
   
    rs.Open sql, cn, 1, 1 'adOpenForwardOnly, adLockBatchOptimistic   '《========这里还是错了!提示:对象变量或with块变量未设置!!
 
   If rs.EOF And rs.BOF Then
   
     MsgBox "没有符合条件的房屋,请您确认后重新输入", 32, "管理"
     
    Else
     
    Set MSHFlexGrid3.DataSource = rs.Clone '《========还没运行到这所以不知道对不对
     
   End If
 
   If rs.State = adStateOpen Then rs.Close
 
’End If’这个多了要去掉
 
If cn.State = adStateOpen Then cn.Close
各位大哥老师请帮看看!!谢谢啊!上面附上数据库在1楼
#6
Artless2012-10-30 12:45
这个问题你应该能自己解决
#7
wxflw2012-10-30 14:09
以前我自己习惯用ADODC的!现在不用了不咋滴会了!~~我也是业余学学的!!
#8
wxflw2012-10-31 16:06
Set rs = New adodb.Recordset
忘加了!前天忙今天来结贴!谢谢大家!
1