我现在要在access中做一个人员名单库,通过窗体导入文件更新人员名单,会有不同的人员变更项目。希望实现的功能如下:
一是点击按钮后先验证上传的文件中是否只有一种人员变更项目,如果有一种以上则弹窗提示有多个变更项目且不进行名单变更;
二是上传的变更表验证通过后进行名单变更,变更后弹窗提示本次变更表内的人是否全部变更完成,如果完成弹窗提示"全部变更完成",如果有未被变更的人则弹窗提示"有5人变更失败",点击【下载变更失败清单】按钮可以下载查看本次失败的名单,【变更失败清单】在每次点击变更库按钮时候更新。
人员名单库的字段为所在单位、姓名、证件号、方案、生效日、失效日;
变更项目分为增人、减人、方案变更、单位变更;
我是自学access能力有限,还请各位giegie指导!
access更新mysql数据库_Access快速开发平台--自动更新功能详解
可以参考这个例子
数据库表设计:
表名:人员名单
字段名:所在单位、姓名、证件号、方案、生效日、失效日
表名:变更项目
字段名:人员名单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写一个客户端来更新
参考下面步骤:
创建数据库表:创建一个名为 "Personnel" 的表,包含字段 "单位"、"姓名"、"证件号"、"方案"、"生效日" 和 "失效日"。
创建窗体:创建一个窗体用于导入文件和执行名单变更操作。在窗体上添加一个按钮 "导入文件" 和一个按钮 "变更库"。
导入文件验证:在 "导入文件" 按钮的点击事件中,编写代码来验证上传的文件中是否只有一种人员变更项目。您可以使用 VBA 代码来读取上传的文件,并检查其中的变更项目数量。如果发现多个变更项目,则弹出提示框并取消名单变更操作。
名单变更:在 "变更库" 按钮的点击事件中,编写代码来执行名单变更操作。首先,您需要读取上传的文件,并根据其中的数据进行相应的数据库更新操作。例如,对于增人操作,您可以将新人员信息插入到数据库表中;对于减人操作,您可以从数据库表中删除相应的人员记录;对于方案和单位变更操作,您可以更新数据库表中相应字段的值。
变更完成提示:在名单变更完成后,根据需要弹出相应提示框。如果所有人员都成功进行了名单变更,则弹出提示框显示 "全部变更完成";如果有未被成功变更的人员,则弹出提示框显示 "有 X 人变更失败"(其中 X 是未成功变更的人数)。
下载失败清单:为了实现下载失败清单功能,在每次点击 "变更库" 按钮时更新一个查询结果(或报告),该查询结果包含未成功进行名单变更的人员信息。然后,在窗体上添加一个按钮 "下载失败清单" 并编写代码,在用户点击该按钮时将查询结果导出为 Excel 或其他格式供用户下载查看。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您可以通过以下步骤来实现您的需求:
创建一个Access数据库,包括一个人员名单表和一个变更清单表。人员名单表包括所在单位、姓名、证件号、方案、生效日、失效日等字段,变更清单表包括变更类型、变更日期、变更人员等字段。
创建一个窗体,包括一个上传文件的按钮和一个变更库的按钮。点击上传文件的按钮后,通过VBA代码读取文件中的数据,验证是否只有一种人员变更项目,如果有一种以上则弹窗提示有多个变更项目且不进行名单变更。如果只有一种人员变更项目,则更新人员名单表和变更清单表,弹窗提示本次变更表内的人是否全部变更完成。
在变更库的按钮点击事件中,读取变更清单表中未变更完成的人员,弹窗提示"有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
需要注意的是,以上代码只是一个示例,需要根据您的具体需求进行修改和完善。例如,需要根据变更类型更新人员名单表中的数据,需要在代码中添加相应的逻辑。另外,对于更新失败清单和下载变更失败清单的功能,需要根据实际情况进行实现。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢