初识数据库之红皮书——问题集锦

实例一:"系统登录"对话框

"系统登录"对话框,是数据库管理 系统的基本功能之一,用于提供系统用户登录身份验证的功能,保证系统数据的安全。

如下图:

本实例在数据库中建立一个数据表用于保存系统用户登录信息,在设计登录对话框时通过查询该数据表完成验证。
一、使用ADO对象来访问数据库步骤
1、用Connection对象建立数据库连接
2、用Recordset对象从数据库中获得用户口令,从而验证用户登录信息是否正确。
二、问题总结
1、app.path 绝对路径问题
App.Path是用来获取当前应用程序所在的路径的,这个路径是一个绝对路径。也就是说,如果要使用App.path来获取数据库的路径,那么就要将数据库存放在该工程所在的文件夹内。
2、 Microsoft.Jet.OLEDB版本的问题
Microsoft.Jet.OLEDB.3.51和 Microsoft.Jet.OLEDB.4.0都是作为连接数据库的 接口引擎。不同的是,
Microsoft.Jet.OLEDB.3.51只能用于访问Access97及其以前的版本,Access2000及其以后的版本必须使用Microsoft.Jet.OLEDB.4.0。

实例二:使用ADO访问数据源
红皮书的第二个实例是用ADO访问数据源,对数据进行浏览查看。
用文本框显示记录数据和当前记录编号以及记录总数,用命令按钮切换当前记录。在浏览记录同时,可以对记录进行修改。如下图:

此实例是通过ADO实现对ODBC数据源的访问操作。使用ADO访问,需要3个步骤:建立数据源连接,检索数据和操作数据。

一、创建数据源
开始——设置——控制面板——管理工具——数据源(ODBC)
注:将控制面板的分类视图切换到经典视图,就可以看到管理工具了。然后,再按照红皮书上的步骤操作即可。

二、更新数据源的两种方法:
(1)将数据检索保存到Recordset对象中,用Update方法进行更新。
(2)使用Command对象执行SQL数据更新命令。
三、问题总结
这个例子中遇到的问题只有一个
如下图:

查询代码,原来是我把代码  "If objRS.EOF Then objRS.MoveLast "中的EOF写成了BOF,那EOF和BOF分别代表什么,又有什么区别呢?
BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前。 EOF 指示当前记录位置位于 Recordset 对象的最后一个记录之后。 返回值 BOF 和 EOF 属性返回布尔型值。 说明 
使用 BOF 和 EOF 属性可确定 Recordset 对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。 
如果当前记录位于第一个记录之前,BOF 属性将返回 True 
如果当前记录为第一个记录或位于其后则将返回 False 。 
如果当前记录位于 Recordset 对象的最后一个记录之后 ,EOF 属性将返回 True,而当前记录为 Recordset 对象的最后一个记录或位于其前,则将返回 False。
如果 BOF 或 EOF 属性为 True,则没有当前记录。

实例三:使用数据绑定访问数据
数据绑定是VB中的一项重要数据访问功能。它将控件与数据源的特定字段关联,在程序运行时使控件能自动显示数据源数据,用户对数据的修改也可自动保存。如下图所示:

此实例是利用的ADO Data控件连接数据库来获得用于数据绑定的数据源,不用编写代码即可访问数据库。

注:在使用ADO Data 控件时,必须正确设置属性,先设置通用属性,再设置身份信息,最后设置记录源选项。在设置文本框的数据绑定属性时,也要先设置DataSource属性,再设置DataMember属性,最后设置DataField属性。

实例四:分页显示记录
使用分页功能来显示大量的数据,从而提高效率。
如下图:

本实例使用的时DataGrid控件的数据绑定功能显示分页后的记录。先将当前记录页中的记录复制到一个新的记录集中,再将其绑定到DataGrid控件,来显示当前记录页数据。

实例五:数据查询
从数据库中检索符合条件的数据。在窗体的“用户名”或“身份”文本框中输入所需要查询的字段包含的字符,单击查询按钮执行查询,结果显示在下方的表格中,同时在表格下方显示查询获得的记录条数。如下图所示:


此实例完成数据的查询是使用ADO Command 对象创建参数查询。采用Command对象执行的查询,返回的时行集而非记录集,行集不支持标签,不能作为数据绑定的数据源。所以在查询结果是使用MSFlexGrid控件,通过代码使数据显示在控件中。

一、 使用ADO Command 对象创建参数查询步骤。
(1)创建Command对象,使用?作为Select语句中的查询参数。
 objCmd.CommandText  "SELECT * FROM 系统用户 WHERE 用户名 LIKE? AND 身份 LIKE?"
(2)使用Command对象CreateParameter方法创建查询参数对象,然后将其添加到Command对象的Parameter上集合中。
    Dim Parm As New Parameter
    Set Parm = objCmd.CreateParameter("用户名", adVarChar, adParamInput, 10)
    objCmd.Parameters.Append Parm
    Set Parm = objCmd.CreateParameter("身份", adVarChar, adParamInput, 10)
    objCmd.Parameters.Append Parm
(3)设置查询参数的值。
    objCmd("用户名") = "%" & txtuser & "%"
    objCmd("身份") = "%" & txtStatus & "%"
(4)执行Command对象的Execute方法完成查询。

二、问题总结
这个例子,其实很简单,但是在做这个例子的时候由于自己的粗心,导致出现了很多问题,不能出现预想的效果。下面几张图片就是自己遇到的问题,以及解决办法,供好友们参考。
(一)未找到提供程序。

根据提示找出问题代码,是 Microsoft.Jet.OLEDB.4.0写错了, Microsoft.Jet.OLEDB.4.0是数据库接口技术,用来访问数据库的,如果这个地方写错了,程序就不能正常运行。
温馨提示: strcn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info =False;" & _
            "Data Source =" & App.Path & "\实例01.mdb"
上面这句代码,必须严格按照规定来写,一个字都不能少,不能错,否则程序不能正常运行。

二、不正常地定义参数对象。

同样找到问题代码:
    Set Parm = objCmd.CreateParameter ("用户名", adVarChar, adParamInput, 10)
    objCmd.Parameters.Append Parm
    Set Parm = objCmd.CreateParameter ("身份", adVarChar, adParamInput, 10)
    objCmd.Parameters.Append Parm
由于第一次两行代码括号里的内容都没写,所以出现上面的错误。

三、语法错误,操作符丢失

根据提示,找出如下代码:
 With objCmd
       .CommandText = "SELECT * FROM 系统用户 WHERE 用户名 LIKE?" & _
                     "AND 身份 LIKE?"
这句代码和上面的那个问题一样,代码不能出一丁点的错误,否则就会出现上面的错误。

四、应用程序在当前操作中使用了错误类型的值。

在我的数据库里保存了这样一条记录,用户名为”"hanmengtian",身份为"管理员"。可是当我用用户名字段来查询时,就会出现以上错误。
查找代码,提示下面这句代码有问题。
 objCmd("用户名") = "%" & txtuser & "%"
我改了好久,发现用户名这个文本框的输入不能超过8个字符,大于8个字符就会出现上面的问题。可是数据库中明明有这条记录,为什么就不能查询呢?不解!

五、查询结果,空一行,并且不能实时刷新,会保留上一次的结果。

上网查找方法,提供了多种方法,例如用   MSFlexGrid. Clear或者 MSFlexGrid. Refresh,但是试过之后,没有达到效果。
(1)使用 MSFlexGrid. Clear,效果如下图:

记录的数据是清除了,可是还是保留着空的表格。
(2)使用 MSFlexGrid. Refresh,没有任何效果,和以前一样

问题虽小,可是也一定要解决,找了好久,终于找多了解决方法,那就是下面这句代码:
MSFlexGrid1.Rows = 1 ,或者在MSFlexGrid控件的属性窗口将Rows的值设置为1
查询效果如下:

既没有空行,也没有上一次的查询结果了。好开心啊!

上面有一个问题不知道怎么解决,哪位大神可以帮帮忙啊,不胜感激!
总结一下,出现这么多的问题,主要还是自己不细心的原因,不过还好,第一次出现问题了,下一次就会避免了。通过这些错误,能更好的理解这几个例子,也算是很不错的收获吧!









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸运的梦之星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值