Office中国论坛/Access中国论坛

标题: 请教一段有关ADO的语句 [打印本页]

作者: smilingkiss    时间: 2013-1-13 15:49
标题: 请教一段有关ADO的语句
Private Sub Command11_Click()
    Dim Filter As String
    Dim rs As New ADODB.Recordset
    Dim rsSum As New ADODB.Recordset
    Dim cnn As New ADODB.Connection
    Dim sSQL As String
    Set cnn = CurrentProject.Connection

    sSQL = "select 联系id from aaa"
    rs.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
    Do While Not rs.EOF
        sSQL = "SELECT  sum(Nz([单价],0)*Nz([数量],0)-Nz([支付],0)) As Balance from bbb where (联系id=" & rs.Fields(0) & "and 是否=false and 方式 like '*现金*')"
        rsSum.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
        If rsSum.Fields("Balance") <> 0 Then
            Filter = Filter & rs.Fields(0) & ";"
        End If
        rsSum.Close
        rs.MoveNext
    Loop
    MsgBox Filter
    rs.Close
    Set rs = Nothing
    Set rsSum = Nothing
    Set cnn = Nothing
End Sub


该函数中
sSQL = "SELECT  sum(Nz([单价],0)*Nz([数量],0)-Nz([支付],0)) As Balance from bbb where (联系id=" & rs.Fields(0) & "and 是否=false and 方式 like '*现金*')"
方式 like "*现金*" 的功能为什么实现不了呢?我调试过,好像非得like后面的参数要百分之一百匹配才能找到出来,但我希望的是模糊查询,希望各位高手指教一二,谢谢

作者: Henry D. Sy    时间: 2013-1-13 15:55
try
方式 like '%现金%'
作者: smilingkiss    时间: 2013-1-13 16:49
Henry D. Sy 发表于 2013-1-13 15:55
try
方式 like '%现金%'

谢谢,搞掂了!
作者: 你是坏蛋    时间: 2013-1-13 18:47
Do While Not rs.EOF
        sSQL = "SELECT  sum(Nz([单价],0)*Nz([数量],0)-Nz([支付],0)) As Balance from bbb where (联系id=" & rs.Fields(0) & "and 是否=false and 方式 like '*现金*')"
        rsSum.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
        If rsSum.Fields("Balance") <> 0 Then
            Filter = Filter & rs.Fields(0) & ";"
        End If
        rsSum.Close
        rs.MoveNext
    Loop
--------------------------------------------

这样循环也行?

一直重复的打开,关闭记录集,不怕系统受不了?
作者: smilingkiss    时间: 2013-1-13 22:41
你是坏蛋 发表于 2013-1-13 18:47
Do While Not rs.EOF
        sSQL = "SELECT  sum(Nz([单价],0)*Nz([数量],0)-Nz([支付],0)) As Balance  ...

实践过,还行^_^
作者: 轻风    时间: 2013-1-14 08:41
smilingkiss 发表于 2013-1-13 22:41
实践过,还行^_^

问题是,rsSum.Close为什么不写在循环之外呢?
作者: ycxchen    时间: 2013-1-14 09:06
你是坏蛋 发表于 2013-1-13 18:47
Do While Not rs.EOF
        sSQL = "SELECT  sum(Nz([单价],0)*Nz([数量],0)-Nz([支付],0)) As Balance  ...

同感
作者: roych    时间: 2013-1-14 15:17
轻风 发表于 2013-1-14 08:41
问题是,rsSum.Close为什么不写在循环之外呢?


我更倾向于写联接查询语句,这样应当无须打开两个记录集,例如:
  1. Private Sub Command11_Click()
  2. Dim Filter As String
  3. Dim rs As New ADODB.Recordset
  4. Dim cnn As New ADODB.Connection
  5. Dim sSQL As String
  6. Set cnn = CurrentProject.Connection
  7. sSQL = "SELECT [aaa].[联系id],sum(Nz([bbb].[单价],0)*Nz([bbb].[数量],0)-Nz([bbb].[支付],0)) As Balance from aaa left join bbb on [aaa].[联系id]= [bbb].[联系id] where [bbb].是否=false and [bbb].方式 like '%现金%'"
  8. rs.Open sSQL, cnn, adOpenKeyset, adLockReadOnly
  9. Do While Not rs.EOF
  10. If rsSum.Fields("Balance") <> 0 Then
  11. Filter = Filter & rs.Fields(0) & ";"
  12. End If rs.MoveNext
  13. Loop
  14. MsgBox Filter
  15. rs.Close
  16. Set rs = Nothing
  17. Set cnn = Nothing
  18. End Sub
复制代码
手头上没有office 2010版本,代码尚未验证,仅供参考。
作者: smilingkiss    时间: 2013-1-15 11:53
roych 发表于 2013-1-14 15:17
我更倾向于写联接查询语句,这样应当无须打开两个记录集,例如:手头上没有office 2010版本,代码尚未验 ...

看来这里高手如云,各位的建议,我会找个时间验证一下,谢谢
作者: ycxchen    时间: 2013-1-15 15:05
smilingkiss 发表于 2013-1-15 11:53
看来这里高手如云,各位的建议,我会找个时间验证一下,谢谢


你可请教下各位版主,看看他们如何修改,使语句更合逻辑。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3