Access交流中心

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

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

jj77  发表于:2013-08-06 12:55:26  
复制

我在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
jj77 发表于:2013-08-07 08:38:46
谁知道帮忙看下吧, 问题可能在什么地方呢?  我第一次搞这个 实在毫无头绪了...

hannanrenjie 发表于:2013-08-07 08:45:15

同关注!怎么没人回复呢。



jj77 发表于:2013-08-07 15:39:01

请高手看到,耐心看看把


过程很简单,  第一个过程就是循环 调用第二个函数来的(循环传递 行号)

第二个函数就是通过参数行号, 获取第一列的零件编号, 这是个唯一key,  然后根据这个唯一KEY查找access里头的记录, 然后再将行号所在的一些列的数据, 赋值更新到access里头....


我太纳闷了,EXCEL里头 每次如果只点击一个单元格(占用一行), 点击EXCEL按钮调用就更新OK;   但我如果选择上下两单元格(占用两行), 按道理就是循环2次,相当于单击两次按钮才是阿,,,可就是不行...每次都是将内容更新为和第一行一样的内容


看上去过程应该不难才对,  高手看了别烦阿, 谢谢拉, 帮我分析下把





jj77 发表于:2013-08-09 08:10:05

晕, 我终于知道了

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


太大意了



jj77 发表于:2013-08-20 10:21:18
不能设置自己的答案为最佳答案。。。。。。。。。。。。。。。。。。

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