aceess数据库更新表同时及更新后验证条件并弹窗提示

我现在要在access中做一个人员名单库,通过窗体导入文件更新人员名单,会有不同的人员变更项目。希望实现的功能如下:
一是点击按钮后先验证上传的文件中是否只有一种人员变更项目,如果有一种以上则弹窗提示有多个变更项目且不进行名单变更;
二是上传的变更表验证通过后进行名单变更,变更后弹窗提示本次变更表内的人是否全部变更完成,如果完成弹窗提示"全部变更完成",如果有未被变更的人则弹窗提示"有5人变更失败",点击【下载变更失败清单】按钮可以下载查看本次失败的名单,【变更失败清单】在每次点击变更库按钮时候更新。
人员名单库的字段为所在单位、姓名、证件号、方案、生效日、失效日;
变更项目分为增人、减人、方案变更、单位变更;

我是自学access能力有限,还请各位giegie指导!

img

access更新mysql数据库_Access快速开发平台--自动更新功能详解
可以参考这个例子


http://www.accessoft.com/article-show.asp?id=1319

数据库表设计:
表名:人员名单
字段名:所在单位、姓名、证件号、方案、生效日、失效日
表名:变更项目
字段名:人员名单ID、变更项目、变更前、变更后、变更日期
窗体设计:
窗体名:人员名单管理
控件名:按钮(名称:cmdImport)
监听事件如下:

Private Sub cmdImport_Click()  
    Dim strMsg As String  
    Dim cntChangeItems As Integer  
      
    ' 验证上传的文件中是否只有一种人员变更项目  
    cntChangeItems = CountChangeItems()  
    If cntChangeItems > 1 Then  
        strMsg = "本次变更包含多个变更项目,无法进行名单变更。"  
        MsgBox strMsg, vbExclamation, "多个变更项目"  
        Exit Sub  
    End If  
      
    ' 进行名单变更  
    If PerformChange boolSuccess, strMsg  
    If not boolSuccess Then  
        MsgBox strMsg, vbExclamation, "变更失败"  
        Exit Sub  
    End If  
      
    ' 弹窗提示本次变更是否完成  
    If cntChangeItems = 0 Then  
        MsgBox "全部变更完成!", vbInformation, "变更完成"  
    Else  
        MsgBox "有 " & cntChangeItems & " 人变更失败!", vbExclamation, "变更失败"  
    End If  
End Sub

可以通过写sql进行更新数据

可以用python写一个客户端来更新

参考下面步骤:

  1. 创建数据库表:创建一个名为 "Personnel" 的表,包含字段 "单位"、"姓名"、"证件号"、"方案"、"生效日" 和 "失效日"。

  2. 创建窗体:创建一个窗体用于导入文件和执行名单变更操作。在窗体上添加一个按钮 "导入文件" 和一个按钮 "变更库"。

  3. 导入文件验证:在 "导入文件" 按钮的点击事件中,编写代码来验证上传的文件中是否只有一种人员变更项目。您可以使用 VBA 代码来读取上传的文件,并检查其中的变更项目数量。如果发现多个变更项目,则弹出提示框并取消名单变更操作。

  4. 名单变更:在 "变更库" 按钮的点击事件中,编写代码来执行名单变更操作。首先,您需要读取上传的文件,并根据其中的数据进行相应的数据库更新操作。例如,对于增人操作,您可以将新人员信息插入到数据库表中;对于减人操作,您可以从数据库表中删除相应的人员记录;对于方案和单位变更操作,您可以更新数据库表中相应字段的值。

  5. 变更完成提示:在名单变更完成后,根据需要弹出相应提示框。如果所有人员都成功进行了名单变更,则弹出提示框显示 "全部变更完成";如果有未被成功变更的人员,则弹出提示框显示 "有 X 人变更失败"(其中 X 是未成功变更的人数)。

  6. 下载失败清单:为了实现下载失败清单功能,在每次点击 "变更库" 按钮时更新一个查询结果(或报告),该查询结果包含未成功进行名单变更的人员信息。然后,在窗体上添加一个按钮 "下载失败清单" 并编写代码,在用户点击该按钮时将查询结果导出为 Excel 或其他格式供用户下载查看。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

您可以通过以下步骤来实现您的需求:

  1. 创建一个Access数据库,包括一个人员名单表和一个变更清单表。人员名单表包括所在单位、姓名、证件号、方案、生效日、失效日等字段,变更清单表包括变更类型、变更日期、变更人员等字段。

  2. 创建一个窗体,包括一个上传文件的按钮和一个变更库的按钮。点击上传文件的按钮后,通过VBA代码读取文件中的数据,验证是否只有一种人员变更项目,如果有一种以上则弹窗提示有多个变更项目且不进行名单变更。如果只有一种人员变更项目,则更新人员名单表和变更清单表,弹窗提示本次变更表内的人是否全部变更完成。

  3. 在变更库的按钮点击事件中,读取变更清单表中未变更完成的人员,弹窗提示"有5人变更失败",并提供下载变更失败清单的功能。

下面是一个简单的示例代码:

Private Sub btnUpload_Click()
    ' 通过文件对话框选择要上传的文件
    Dim fileDialog As FileDialog
    Set fileDialog = Application.FileDialog(msoFileDialogFilePicker)
    fileDialog.AllowMultiSelect = False
    fileDialog.Title = "请选择要上传的文件"
    fileDialog.Filters.Clear
    fileDialog.Filters.Add "Excel文件", "*.xlsx"
    If fileDialog.Show = -1 Then
        Dim filePath As String
        filePath = fileDialog.SelectedItems(1)
        ' 读取Excel文件中的数据
        Dim excelApp As Object
        Set excelApp = CreateObject("Excel.Application")
        excelApp.Visible = False
        Dim excelWorkbook As Object
        Set excelWorkbook = excelApp.Workbooks.Open(filePath)
        Dim excelWorksheet As Object
        Set excelWorksheet = excelWorkbook.Worksheets(1)
        Dim data As Variant
        data = excelWorksheet.UsedRange.Value
        excelWorkbook.Close False
        excelApp.Quit
        ' 验证是否只有一种人员变更项目
        Dim changeType As String
        Dim changeTypeCount As Integer
        For i = 2 To UBound(data)
            If data(i, 1) <> "" Then
                If changeType = "" Then
                    changeType = data(i, 1)
                    changeTypeCount = 1
                ElseIf data(i, 1) = changeType Then
                    changeTypeCount = changeTypeCount + 1
                Else
                    MsgBox "上传的文件中存在多个变更项目,无法进行名单变更!", vbOKOnly + vbExclamation, "警告"
                    Exit Sub
                End If
            End If
        Next
        ' 更新人员名单表和变更清单表
        Dim db As DAO.Database
        Set db = CurrentDb()
        Dim rs As DAO.Recordset
        Set rs = db.OpenRecordset("SELECT * FROM 人员名单")
        For i = 2 To UBound(data)
            If data(i, 1) <> "" Then
                rs.AddNew
                rs!所在单位 = data(i, 2)
                rs!姓名 = data(i, 3)
                rs!证件号 = data(i, 4)
                rs!方案 = data(i, 5)
                rs!生效日 = data(i, 6)
                rs!失效日 = data(i, 7)
                rs.Update
                ' 添加变更清单记录
                Dim changeRecord As DAO.Recordset
                Set changeRecord = db.OpenRecordset("SELECT * FROM 变更清单")
                changeRecord.AddNew
                changeRecord!变更类型 = data(i, 1)
                changeRecord!变更日期 = Now()
                changeRecord!变更人员 = data(i, 3)
                changeRecord.Update
            End If
        Next
        rs.Close
        db.Close
        ' 弹窗提示变更完成情况
        If changeTypeCount = UBound(data) - 1 Then
            MsgBox "本次变更表内的人已全部变更完成!", vbOKOnly + vbInformation, "提示"
        Else
            MsgBox "本次变更表内的人未全部变更完成,共有 " & UBound(data) - changeTypeCount - 1 & " 人变更失败。", vbOKOnly + vbExclamation, "警告"
            ' 更新失败清单
            ' TODO: 添加更新失败清单的代码
        End If
    End If
End Sub

Private Sub btnChange_Click()
    ' 读取变更清单表中未变更完成的人员
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("SELECT * FROM 变更清单 WHERE 完成状态 = '未完成'")
    Dim failedList As String
    failedList = "变更失败清单:" & vbCrLf
    While Not rs.EOF
        ' TODO: 根据变更类型更新人员名单表中的数据
        ' 如果更新成功,则将变更清单表中的完成状态设置为已完成
        ' 否则将失败的人员添加到变更失败清单中
        rs.MoveNext
    Wend
    rs.Close
    db.Close
    ' 弹窗提示变更完成情况
    If failedList = "变更失败清单:" & vbCrLf Then
        MsgBox "全部变更完成!", vbOKOnly + vbInformation, "提示"
    Else
        MsgBox "部分人员变更失败,详见变更失败清单。", vbOKOnly + vbExclamation, "警告"
        ' 更新失败清单
        ' TODO: 添加更新失败清单的代码
        ' 提供下载变更失败清单的功能
        ' TODO: 添加下载变更失败清单的代码
    End If
End Sub

需要注意的是,以上代码只是一个示例,需要根据您的具体需求进行修改和完善。例如,需要根据变更类型更新人员名单表中的数据,需要在代码中添加相应的逻辑。另外,对于更新失败清单和下载变更失败清单的功能,需要根据实际情况进行实现。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢