gpt4 book ai didi

ms-access - 如何编写脚本来查找和更正表中的无效条目

转载 作者:行者123 更新时间:2023-12-04 04:47:13 28 4
gpt4 key购买 nike

首先,我想清楚地表明,我对 Access 和 VBA 的了解充其量是极其有限的。我有一个员工数据库系统,由于它的年龄已经很容易出现小数据损坏问题,并且由于 2003/2007 和 2010 年之间的差异而导致控制中断。虽然我已经设法解决了大部分问题,但我有一个特别值得关注的是我们用来管理对数据库的 Access 的脚本。该系统分为两个文件,一个是用户可以 Access 数据库的前端,一个是包含所有表的后端文件。

我遇到的问题是处理用户登录的前端表单。 Access 系统的设置方式是用户输入他们的 SSN,然后脚本在表中找到他们的 SSN,如果存在,则查看是否选中了 Access 复选框。如果他们有权 Access ,他们将被定向到主菜单,否则他们会收到一条拒绝消息。但我发现是出于某种原因,如果人事表中的条目的 SSN 不完整,脚本就会中断,任何人都可以 Access 数据库。

有一个在前端运行的查询,它查看主人事表并仅提取前两列,SSAN 和 Access。

表单本身有一个可见的文本框“Text8”和一个隐藏的组合框“Combo4”。 Combo4 使用前面提到的行源查询 ( SELECT qryAccess.SSAN FROM qryAccess; ),而 Text8 是用户输入其 SSN 的地方。

这是现在的代码:

Option Compare Database

Private Sub Combo4_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[SSAN] = '" & Me![Combo4] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Me![Access] = True Then
DoCmd.RunMacro "Access"
Else
DoCmd.OpenForm "frmDenied"
End If
End Sub

Private Sub Text8_AfterUpdate()
Me![Combo4] = Me![Text8]

' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[SSAN] = '" & Me![Combo4] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Me![Access] = True Then
DoCmd.RunMacro "Access"
Else
DoCmd.OpenForm "frmDenied"
End If
End Sub

就像我之前说的,只要 SSN 的每个条目都是完整的 9 位数字,这个系统就可以工作。但是,如果由于某种原因该条目不是我刚刚在我的数据库中找到的完整 9(不,我不知道是什么导致了这种情况发生,有一个输入掩码,000-00-0000;;_ ),这个系统崩溃了。您可以为 SSN 输入“abc”并获得对数据库的 Access 权限。

我如何编写一个小脚本来预先检查表格中不符合设置的 9 位格式的 SSN 条目,如果找到它们,则将它们重置为未使用的数字,例如 000000000、000000001 等?

此外,如果您对如何简化现有代码有任何建议,我非常乐意采纳。

最佳答案

将此功能添加到您的应用程序

Public Function IsValidSSN(ByVal SSN As String) As Boolean

'Determines if SSN is a valid social security number
'requires SSN to be in either "#########" or "###-##-####" format

IsValidSSN = (SSN Like "###-##-####") Or _
SSN Like ("#########")

End Function

还将您的功能更改为:
Private Sub Combo4_AfterUpdate()
' Find the record that matches the control.
If IsValidSSN(Me![Combo4]) Then
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[SSAN] = '" & Me![Combo4] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Me![Access] = True Then
DoCmd.RunMacro "Access"
Else
DoCmd.OpenForm "frmDenied"
End If
Else
DoCmd.OpenForm "frmDenied"
End IF
End Sub

Private Sub Text8_AfterUpdate()
Me![Combo4] = Me![Text8]

If IsValidSSN(Me![Text8]) Then
' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[SSAN] = '" & Me![Combo4] & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

If Me![Access] = True Then
DoCmd.RunMacro "Access"
Else
DoCmd.OpenForm "frmDenied"
End If
Else
DoCmd.OpenForm "frmDenied"
End If
End Sub

编辑

另外,您为什么使用组合框输入 SSN?您可以在文本框上使用输入掩码。此外,我强烈建议您将系统转换为 SSN 以外的其他标识,因为它是 容易通过通过在打开应用程序时按住 shift 键,通过此代码查看包含每个人 SSN 的表格。至于简化您的代码,只需完全删除该组合框。如果他们将其输入到文本框中,则无需将其放入隐藏的组合框中。

关于ms-access - 如何编写脚本来查找和更正表中的无效条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002005/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com