zoukankan      html  css  js  c++  java
  • 自动识别添加或更新数据到数据库

    功能:判断EXCEL指定单元格区域内的数据在数据库中是否存在如果存在将更新指定区域单元格内的数据到数据库中,如果有区域内有新增的数据那么将新增的数据添加到数据库。

    如果指定区域内的数据在数据库中不存在将添加指定区域内单元格的数据到数据库中。

    代码

    Sub saveTeamMem()
    
    Dim rs As New ADODB.Recordset
    Dim cnn As String
    Dim sql As String
    pn = ThisWorkbook.Sheets("A3").Range("AF4").Value
    cnn = "Provider=Microsoft.ACE.OLEDB.16.0;" & _
        "Data Source=" & ThisWorkbook.Path & ".A3db2019.accdb"
    
    sql = "select ProjectID,MemName,MemDept,MemRole from A3_TeamMem where projectID='" & pn & "'"
    Set rs = New Recordset
    rs.Open sql, cnn, 1, 3
    With ThisWorkbook.Sheets("A3")
        For i = 27 To 35
            If .Range("C" & i) <> "" Then
                n = i     'The Max row number in which data exists on excel worksheet
                t = t + 1 'Calculate the number of rows in which data exists on excel worksheet
            End If
        Next i
        
        If rs.RecordCount = 0 Then
            For j = 27 To n
                rs.AddNew
                rs.Fields("ProjectID") = .Range("AF4").Value
                rs.Fields("MemName") = .Range("C" & j).Value
                rs.Fields("MemDept") = .Range("F" & j).Value
                rs.Fields("MemRole") = .Range("I" & j).Value
                rs.Update
            Next j
            MsgBox "Update sucessful!"
            Exit Sub
        Else
            Total = rs.RecordCount
            p = 0
            If Total < t Then
               Do
                    p = p + 1
                    rs.MoveLast
                    rs.AddNew
                    rs.Fields("ProjectID") = .Range("AF4").Value
                    rs.Fields("MemName") = "-"
                    rs.Fields("MemDept") = "-"
                    rs.Fields("MemRole") = "-"
                    rs.Update
                    Currtotal = rs.RecordCount
                    currNum = t - Total
                Loop Until p = currNum
            Call updateTeamMem(n)
            End If
            d = 0
            If t < Total Then
                Do
                    d = d + 1
                    rs.MoveLast
                    rs.Delete
                Loop Until d = Total - t
            End If
        End If
    End With
    Call updateTeamMem(n)
    rs.Close
    End Sub
    
    
    Sub updateTeamMem(num)
    
    Dim rs As New ADODB.Recordset
    Dim cnn As String
    Dim sql As String
    pn = ThisWorkbook.Sheets("A3").Range("AF4").Value
    cnn = "Provider=Microsoft.ACE.OLEDB.16.0;" & _
        "Data Source=" & ThisWorkbook.Path & ".A3db2019.accdb"
    On Error Resume Next
    sql = "select ProjectID,MemName,MemDept,MemRole from A3_TeamMem where projectID='" & pn & "'"
    Set rs = New Recordset
    rs.Open sql, cnn, 2, 3
    With ThisWorkbook.Sheets("A3")
        For k = 27 To num
            rs.Fields("MemName") = .Range("C" & k).Value
            rs.Fields("MemDept") = .Range("F" & k).Value
            rs.Fields("MemRole") = .Range("I" & k).Value
            rs.MoveNext
            rs.Update
        Next
        MsgBox "Update sucessful!"
    End With
    End Sub
  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    stm32内存管理
    STM32CubeMx——ADC多通道采集
    STM32CubeMx——串口使用DMA收发数据
    STM32CubeMx——串口收发
    stm32CubeMx+TrueSTUDIO+uc/os-III移植开发(二)
    stm32CubeMx+TrueSTUDIO+uc/os-III移植开发(一)
    STM32F103RCT6移植到STM32F103C8T6注意事项
    关于STM32F103系列从大容量向中容量移植的若干问题
    KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法
  • 原文地址:https://www.cnblogs.com/luoye00/p/10564451.html
Copyright © 2011-2022 走看看