Office中国论坛/Access中国论坛

标题: 如何要联合查询“按理出牌” [打印本页]

作者: kelind    时间: 2009-1-11 17:22
标题: 如何要联合查询“按理出牌”
见附件:联合查询
要 t 从-42   到 62  三组顺序排列,mod 3=0出现重复,t<0时也不按理出牌。
大家帮帮有什么好办法?
作者: Henry D. Sy    时间: 2009-1-11 17:34
看不懂什么意思
作者: todaynew    时间: 2009-1-11 17:46
原帖由 kelind 于 2009-1-11 17:22 发表
见附件:联合查询
要 t 从-42   到 62  三组顺序排列,mod 3=0出现重复,t


加一个字段分组不是要简单许多吗?
作者: kelind    时间: 2009-1-11 23:16
原帖由 todaynew 于 2009-1-11 17:46 发表


加一个字段分组不是要简单许多吗?

你做一下试试?
作者: kelind    时间: 2009-1-11 23:21
原帖由 Henry D. Sy 于 2009-1-11 17:34 发表
看不懂什么意思

简单说就是将记录分三列排。
一般是一条记录一行,现在要三条记录一行。
我的问题是在 [字般] mod 3 =0 时出了问题,先是将所有 mod3=0的记录排了一遍,这是多余的,如何消除?
在mod 3= 负数时,没有按顺序排列,不知道问题出在哪?
作者: Henry D. Sy    时间: 2009-1-11 23:28
一般是一条记录一行,现在要三条记录一行。
还是看不明白,你能不能将要得到的结果贴张图出来
作者: Henry D. Sy    时间: 2009-1-12 08:58
明白了
试试用记录集,也许会简单点。
作者: kelind    时间: 2009-1-12 23:18
原帖由 Henry D. Sy 于 2009-1-12 08:58 发表
明白了
试试用记录集,也许会简单点。

没明白,怎么用?实在没头绪。请赐教。
作者: Henry D. Sy    时间: 2009-1-13 07:32
建一个您想要的结果表(空表)
然后,用ado打开原表,循环取出记录
在打开结果表,循环增加记录。
作者: Henry D. Sy    时间: 2009-1-13 22:18
假设结果表名称为 A

Dim rs As New ADODB.Recordset
    Dim rst As New ADODB.Recordset
    Dim strSQL As String
    Dim lngArray() As Long
    Dim i As Long, j As Integer
    Dim k As Integer
    strSQL = "select t_id from tb_out where t_id mod 3=0 order by t_id"
    With rs
        .Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
        ReDim lngArray(.RecordCount - 1) As Long
        For i = 0 To .RecordCount - 1
            lngArray(i) = .Fields(0)
            .MoveNext
        Next
        .Close
        rst.Open "A", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        For i = 0 To UBound(lngArray)
            strSQL = "select * from tb_out where t_id between " & lngArray(i) & _
                   " and " & lngArray(i) & "+2"
            .Open strSQL, CurrentProject.Connection, adOpenKeyset, _
                  adLockReadOnly
            rst.AddNew
            Do While Not .EOF
                For j = 0 To .Fields.Count - 1
                    rst.Fields(j + k) = .Fields(j)
                Next
                .MoveNext
                k = k + .Fields.Count
            Loop
            .Close
            rst.UpdateBatch
            k = 0
        Next
    End With
    rst.Close
    Set rst = Nothing
    Set rs = Nothing
作者: kelind    时间: 2009-1-14 16:28
版主真牛X,几个地方没有完全理解,请指教:
1, strSQL = "select t_id from tb_out where t_id mod 3=0 order by t_id"
为什么只 mod 3 =0     mod 3 =1, =2   怎么处理的?
2, For i = 0 To UBound(lngArray) UBound什么函数?
3, rst.Fields(j + k) = .Fields(j)
                Next
                .MoveNext
                k = k + .Fields.Count
            Loop
            .Close
            rst.UpdateBatch
            k = 0
K 想了半天没明白.
        能否把代码解释一下.
      要求太苛刻了点.
    谢谢.
作者: Henry D. Sy    时间: 2009-1-14 20:25
1, strSQL = "select t_id from tb_out where t_id mod 3=0 order by t_id"
为什么只 mod 3 =0     mod 3 =1, =2   怎么处理的?
只要把关键的记录提取出来就可以了,另两个记录可以用条件来提取。
2, For i = 0 To UBound(lngArray) UBound什么函数?
返回一个 Long 型数据,其值为指定的数组维可用的最大下标。
3, rst.Fields(j + k) = .Fields(j)
这里的k主要起到当记录集移到下一个记录时,(按你的要求应该是将第二个记录的第一个字段添加到新表第一条记录的第五个字段)
也就是,第二条记录索引加上第一条记录的字段数,
作者: kelind    时间: 2009-1-14 21:02
谢谢!好象是懂了,但我还是写不出来。
作者: Henry D. Sy    时间: 2009-1-14 21:17
原帖由 kelind 于 2009-1-14 21:02 发表
谢谢!好象是懂了,但我还是写不出来。





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