我将如何防止用户进入数据库中不存在的记录(使用 Microsoft DAO 2.5/3.51 的 Visual basic 6.0)

Posted

技术标签:

【中文标题】我将如何防止用户进入数据库中不存在的记录(使用 Microsoft DAO 2.5/3.51 的 Visual basic 6.0)【英文标题】:How would I go about preventing the user from going into nonexistent records in a database (Visual basic 6.0 using Microsoft DAO 2.5/3.51) 【发布时间】:2021-09-14 08:02:28 【问题描述】:

首先,我使用的是 Visual Basic 6,因为这是我学校教的。 我们的目的是为一个想要一个允许员工与数据库交互的程序的假定客户做一个实践项目。 我已经为记录导航制作了第一个、上一个、下一个和最后一个按钮,但是,问题是允许用户使用 prev 或 next 超出现有记录,并且它使程序崩溃,并显示没有值的错误

我尝试过以下方法: 制作 2 个计数器,一个用于您所在的当前记录,一个用于所选记录集中的记录数。我认为它会做的是,如果您当前的记录试图超过记录计数,它将取消该操作,但最终 recordset.recordcount 由于某种原因总是返回 1 或 0

我也试过测试主键字段是否为空,但它返回的错误是没有这样的记录

那么我将如何限制用户超出记录范围?

【问题讨论】:

检查记录集 .BOF 和 .EOF 值,看看您是在记录集的开头还是结尾,并采取相应措施。 哇,DAO 啊?考虑到 VB6 的全部意义之一就是集成 ADO 以取代旧技术,这似乎是一个奇怪的选择。 @JohnEason 我已经弄清楚了,BOF 和 EOF 仅在您位于文件之外时才检查,而不是在您仍在文件中且在开始/结束时检查。 【参考方案1】:

最后,我能够针对我的问题使用错误处理程序来处理用户试图超出现有记录的错误。

我所做的是:

On Error GoTo ErrHandler 'If any error happens go to ErrHandler

recordset.movenext 
setFields 'Subroutine for setting the text boxes to their values

ErrHandler:
recordset.movelast 'If the user tries to go beyond the last record move him back

更新 2:我也尝试过使用人们在 cmets 中所说的 BOF 和 EOF。我首先对它们有些困惑,因为我认为这些属性是在检查它是第一条记录还是最后一条记录,但实际上它是在检查您是否在文件之外。

recordset.movenext 'move to the next record
If recordset.EOF = True Then 'If the user is outside the file
    recordset.moveprevious 'Move him back
Else 'If he is not
    setFields 'Set the fields
End If 'End the if

这比错误处理程序简单得多。

【讨论】:

无需使用错误处理程序。正如我在上一条评论中所说,只需使用 .BOF 或 .EOF 来检查您是否位于记录集的开头或结尾之前允许用户移动到下一个或上一个记录! 是的。这通常就像 CommandNN.Enable = Not .EOF 用于向前移动,Not .BOF 用于在完成移动后立即向后移动一样简单。 致the reviewers:你为什么建议删除这个答案?这是 OP 发布对他们有用的东西,提供他们使用的代码。

以上是关于我将如何防止用户进入数据库中不存在的记录(使用 Microsoft DAO 2.5/3.51 的 Visual basic 6.0)的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何选择表中不存在的记录?

如何防止 Hibernate 删除 JSON 帖子中不存在的子对象?

如何从表 A 中选择表 B 中不存在的记录 [重复]

如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?

使用代码布局时如何防止视图进入UITabBar

如何将数组存储到mysql中?