Access交流中心

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

EXCEL更新到ACCESS为何连续更新不行, 只能单独更新?

jj77  发表于:2013-08-06 12:21:19  
复制

我在EXCEL编辑数据, 遇到需要特别记录的数据需要编辑一些字段, 并更新到ACCESS里头的一个表中

更新我会调用UDPTOAC过程, 这个过程里头目的是要循环的对所有选定的记录(不包括隐藏的), 更新到 ACCESS里头

PopulateOneField这个函数是根据指定行号的ID来更新某一条记录的(所有记录都是唯一的)


但问题是:  我发现 EXCEL里头选择一行可以更新, 但选择多行会将所有更新的内容变成 第一行的内容, 奇怪, 郁闷...谁帮忙看看 谢谢!


Sub UdpToAC()    

    Dim isok
    isok = MsgBox("继续将更新ACCESS内容, 请确认!" & Now, vbYesNo)
    If isok <> vbYes Then Exit Sub


    Dim iRow, irow1, irow2
    irow1 = Selection.Row
    irow2 = Selection.Row + Selection.Rows.Count - 1
    '选定行更新
    For iRow = irow1 To irow2
        '隐藏的行不更新
        If Cells(iRow, 1).EntireRow.Hidden <> True Then
            Call PopulateOneField(iRow)
        End If
    Next
End Sub




 PopulateOneField  函数就更新某条记录对应的字段, 是这样的
Function PopulateOneField(iRow)
    
    Dim cnn As ADODB.Connection
    Dim MyConn
    Dim rst As ADODB.Recordset
    Dim i As Long, j As Long
    Dim Rw As Long
    Dim sSQL As String
    Dim updColumnStr, arrstr
    
    Rw = Range("A2").End(xlDown).Row

    Set cnn = New ADODB.Connection
    MyConn = TARGET_DB
    
    With cnn
        .Provider = ACC2007LinkFile
        .Open MyConn
    End With

    
    '//****更新特定字段所对应的列号***
    '
    updColumnStr = "25,70,24,26,27,31,69"
    '
    '
    '
    arrstr = Split(updColumnStr, ",")

    Set rst = New ADODB.Recordset
   
    rst.CursorLocation = adUseServer

    '更新表中选定单元格所在行记录里的某字段
    sSQL = "SELECT [f25],[f70],[f24],[f26],[f27],[f31],[f69] FROM [基础数据档] WHERE 零件件号 = """ & Cells(iRow, 1).Value & """"

    rst.Open Source:=sSQL, ActiveConnection:=cnn, _
             CursorType:=1, LockType:=3
    
    For i = 0 To UBound(arrstr)
        If arrstr(i) <> "" Then
            rst(Cells(1, arrstr(i) / 1).Value) = Cells(ActiveCell.Row, arrstr(i) / 1).Value
        End If
    Next
    
    rst.Update
    rst.Close
    
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing

End Function

谁帮忙看看, 为何不能连续更新, 只能一条一条更新呢?

 

Top
在水一方 发表于:2013-08-08 09:23:07
建议发mdb,代码太多的话,一般没有人愿意做。

jj77 发表于:2013-08-09 08:09:34

晕, 我终于知道了

rst(Cells(1, arrstr(i) / 1).Value) = Cells(ActiveCell.Row, arrstr(i) / 1).Value

改成

rst(Cells(1, arrstr(i) / 1).Value) = Cells(iRow, arrstr(i) / 1).Value


太大意了



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