Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何做两个表的双层循环运算?

pc高手  发表于:2016-07-25 06:54:51  
复制

请问:  内外双层数据表循环运算 , 哪里有例子?  我自己做了一个, 有问题: 到内循环 myrstN.open 就出错。 我找不到原因。 请教老师了!

----------------------

Dim myrst As ADODB.Recordset          ''' 定义数据表 外层 初表
Set myrst = New ADODB.Recordset


Dim myrstN As ADODB.Recordset          ''' 定义数据表 内层 详表
Set myrstN = New ADODB.Recordset


myrst.Open "SELECT tbl海流强度初表.初表ID, tbl海流强度初表.批次ID, tbl海流强度初表.时间, tbl海流强度初表.海流强度节, tbl海流强度初表.海流强度KM, tbl海流强度初表.本段时间, tbl海流强度初表.本段时间分钟, tbl海流强度初表.海流强度分差, tbl海流强度初表.前条记录时间 , tbl海流强度初表.本段海流强度差KM FROM tbl海流强度初表 WHERE (((tbl海流强度初表.批次ID) = " & [Forms]![frm全图]![txt批次ID] & ")) ORDER BY tbl海流强度初表.初表ID", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
   
    DoCmd.SetWarnings False
    Do Until myrst.EOF                   ''''  循环开始 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1  进阶-明细计算 !!!  外层
        DoCmd.Echo False, "正在外层计算,请等待! 计数:" & J
        DoCmd.Hourglass True               ''' 漏斗 A
        '''' 开始计算  ‘’‘’
        var批次ID = myrst("批次ID")
        var初表ID = myrst("初表ID")
        var时间 = myrst("时间")
        var本段时间 = myrst("本段时间")
        var本段时间分钟 = myrst("本段时间分钟")
        var海流强度节 = myrst("海流强度节")
        var海流强度KM = myrst("海流强度KM")
        var海流强度分差 = myrst("海流强度分差")
     
        myrstN.Open "SELECT tbl海流数据详表.详表ID, tbl海流数据详表.批次ID, tbl海流数据详表.初表ID, tbl海流数据详表.时间, tbl海流数据详表.本段时间, tbl海流数据详表.本段时间分钟, tbl海流数据详表.海流强度节, tbl海流数据详表.海流强度KM, tbl海流数据详表.海流强度分差, tbl海流数据详表.海流力距离, tbl海流数据详表.正向前进距离, tbl海流数据详表.累计正向前进距离, tbl海流数据详表.累计时间 FROM tbl海流数据详表"
''''    myrstN.Open "SELECT tbl海流数据详表.* FROM tbl海流数据详表" , CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        
        Do Until myrstN.EOF                   ''''  循环开始 !!! 内层 !!!
            DoCmd.Echo False, "正在内层计算,请等待! 计数:" & N
            DoCmd.Hourglass True               ''' 漏斗 A
            '''' 开始计算  ‘’‘’
            myrstN.AddNew
            myrstN("批次ID") = var批次ID
            myrstN("初表ID") = var初表ID
            myrstN("时间") = var时间
            myrstN("本段时间") = var本段时间
            myrstN("本段时间分钟") = var本段时间分钟
            myrstN("海流强度节") = var海流强度节
            myrstN("海流强度KM") = var海流强度KM
            myrstN("海流强度分差") = var海流强度分差
        
        
            N = N + 1
            DoCmd.Hourglass False              ''' 漏斗 B
            If N > 3 Then
                Exit Do
            End If
        Loop                         ''''  内层循环尾部 !!!
                
        J = J + 1
        DoCmd.Hourglass False              ''' 漏斗 B
        myrst.MoveNext      ''' 记录下移一个
    Loop                         ''''  循环尾部 !!!


    DoCmd.SetWarnings True
    myrstN.Close              ''' 关闭库-内层
    myrst.Close              ''' 关闭库-外层


 

Top
yuhong 发表于:2016-07-25 17:13:37
曾经也遇到类似的问题,我去掉其中一个记录集的循环,改用一个数组和一个记录集,先从记录集里获取一个数组,关闭这个记录集。个人感觉是不是用同一个连接打开两个记录集同时操作,和游标、锁定相关,没有多研究,为了省事用了数组,外层是数组,内层是记录集!

pc高手 发表于:2016-07-26 12:57:34

yuhong  :   你好!   

在找不到解决的方法下 , 我也采用了变量集(类似数组) +  表 。  不很理想。 但可以解决计算了!

但是, 我想 , access 应该能做到这个需求!

在原来的 DOS 情况下的 FoxPro , 是很容易解决这种多层数据库(表) 的嵌套运算。   概念清楚, 简单。 我使用的很熟练的。 可是, 今天!???





pc高手 发表于:2016-07-28 19:46:03

我找到完美解决方法了!

看了下述的例子后, 深感access功能强大!   表嵌套运算, 一直困扰我。 今天终于解决了!  而且比预期解决的方法更简单。
对比之下, access 的嵌套运算要比当年的 FoxPro 方便的多!  只不过是用熟了 FoxPro , 就用相同的思路去找使用功能, 当然就是错误了! 

不仅可以 2 个表, 多个表嵌套运算也没有问题!  方法很简单! 实际上就是一句话! rstN , N 为变量即可。  rstN.open 表 。

****** 原文的基础上, 我稍加修饰。 ********

Private Sub cmd增加奖励信息_Click()
Dim rst详表 As New ADODB.Recordset
Dim rst初表 As New ADODB.Recordset
rst初表.Open "员工信息", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rst详表.Open "奖励信息", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For i = 0 To rst初表.RecordCount - 1
    rst详表.AddNew
    rst详表.Fields(0) = rst初表.Fields(0)
    rst详表.Fields(1) = Me.Text8
    rst初表.MoveNext
    rst详表.Update
Next i
rst详表.Update
rst详表.Close
rst初表.Close
DoCmd.OpenTable "奖励信息"
DoCmd.SetWarnings False
DoCmd.SetWarnings True
Me.List4.Requery
End Sub






总记录:3篇  页次:1/1 9 1 :