Access交流中心

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

帮我修改一下代码

中原一剑  发表于:2021-05-14 23:00:49  
复制

Private Sub Command0_Click()
    Set cnn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open "Select * From 表1", cnn
   DoCmd.SetWarnings 0
    DoCmd.RunSQL "Delete * From 报表格式"
    Do Until rst.EOF
      If Not IsNull(rst(i)) Then n = rst(i)
       For i = 1 To 5 
          If Not IsNull(rst(b)) Then z = rst(b)
          For b = 6 To 10  
       Next
           strSQL = "Insert INTO 报表格式(产品名称,最后报价) VALUES ( '" & n & "','" & z & "')"
            cnn.Execute strSQL   
       rst.MoveNext
    Loop
DoCmd.OpenReport "报表1", acViewPreview
End Sub

 

Top
西出阳关无故人 发表于:2021-05-16 12:56:59
'********************************盲人摸象*******************************************************


'猜测的表结构:
'表1(供应商,第一次报价产品名称,第二次报价产品名称,...,第五次报价产品名称,第一次报价,第二次报价,...第五次报价,...)
'报价格式(供应商,产品名称,最后报价)
'猜测的需求:
'一共要求了五次报价,因为有些供应商考虑因素不同,可能只有一次报价,也可能有三次或五次报价.现在要求统计最后一次报价


Private Sub Command0_Click()
    Dim i, j, N, b, Z
    Set cnn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open "Select * From 表1", cnn
    cnn.Execute "Delete * From 报表格式"
    For j = 1 To rst.RecordCount    '循环rst的每条记录
        '//
        N = "": Z = ""        '初始化变量
        For i = 1 To 5    '循环每条记录的1到5字段
            If IsNull(rst(i)) Then
                Exit For    '如果字段值为空,跳出循环i
            Else
                N = rst(i)    '如果字段值不为空,把字段值赋给变量N
            End If
        Next i
        For b = 6 To 10    '循环每条记录的6到10字段
            If Not IsNull(rst(b)) Then
                Exit For    '如果字段值为空,跳出循环b
            Else
                Z = rst(b)    '如果字段值不为空,把字段值赋给变量Z
            End If
        Next
        '\\
        '从//到\\的意思是是,看看最后一次不为空的报价是在哪个字段.当然表的第n次报价的产品名称和报价只能同时为空,或同时不为空.
        If N <> "" And Z <> "" Then
            '如果本条记录至少有一次报价不为空
            strSQL = "Insert INTO 报表格式(供应商,产品名称,最后报价) VALUES ('" & rst(0) & "', '" & N & "','" & Z & "')"
            cnn.Execute strSQL    '把最后一次报价插入到表"报表格式"
        End If
        rst.MoveNext    '下一条记录
    Next j
    DoCmd.OpenReport "报表1", acViewPreview
End Sub



西出阳关无故人 发表于:2021-05-16 14:51:44

如果你的表与  http://www.accessoft.com/bbs/showtopic.asp?id=34453  相同,则采用下面的代码:

Private Sub Command0_Click()
   Dim i, j, N, strSQL
   Dim cnn As ADODB.Connection, rst As ADODB.Recordset
    Set cnn = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open "Select * From 表1", cnn, adOpenStatic, adLockReadOnly
    cnn.Execute "Delete * From 报表格式"
    For j = 1 To rst.RecordCount    '循环rst的每条记录
        N = ""        '初始化变量
        For i = 6 To 2 Step -1    '循环每条记录的6到2字段,对应"第五次报价,第四次报价...第一次报价"字段.
            If IsNull(rst(i)) = False Then
                N = rst(i)    '如果字段值不为空,把字段值赋给变量N
                Exit For '不再看上一次的报价,跳出循环 i,也就是说从第五次报价看到第一次报价,有报价就不再考虑前面的所有报价了,只取最后一次的非空报价.
            End If
        Next i
        Debug.Print j, N, Z
        If N <> "" Then
            '如果本条记录至少有一次报价不为空
            strSQL = "Insert INTO 报表格式(产品名称,最后报价) VALUES ( '" & rst(1) & "','" & N & "')"
            cnn.Execute strSQL    '把最后一次报价插入到表"报表格式"
        End If
        rst.MoveNext    '下一条记录
    Next j
    DoCmd.OpenReport "报表1", acViewPreview
End Sub



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