设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2860|回复: 9
打印 上一主题 下一主题

[帮助] 请教一段有关ADO的语句

[复制链接]
跳转到指定楼层
1#
发表于 2013-1-13 15:49:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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后面的参数要百分之一百匹配才能找到出来,但我希望的是模糊查询,希望各位高手指教一二,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2013-1-13 15:55:36 | 只看该作者
try
方式 like '%现金%'
3#
 楼主| 发表于 2013-1-13 16:49:28 | 只看该作者
Henry D. Sy 发表于 2013-1-13 15:55
try
方式 like '%现金%'

谢谢,搞掂了!
4#
发表于 2013-1-13 18:47:21 | 只看该作者
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
--------------------------------------------

这样循环也行?

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

实践过,还行^_^

点击这里给我发消息

6#
发表于 2013-1-14 08:41:16 | 只看该作者
smilingkiss 发表于 2013-1-13 22:41
实践过,还行^_^

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

同感
8#
发表于 2013-1-14 15:17:08 | 只看该作者
轻风 发表于 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版本,代码尚未验证,仅供参考。
9#
 楼主| 发表于 2013-1-15 11:53:41 | 只看该作者
roych 发表于 2013-1-14 15:17
我更倾向于写联接查询语句,这样应当无须打开两个记录集,例如:手头上没有office 2010版本,代码尚未验 ...

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


你可请教下各位版主,看看他们如何修改,使语句更合逻辑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-9 09:25 , Processed in 0.105666 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表