初识数据库之红皮书——问题集锦
2014-05-03 15:46
162 查看
实例一:"系统登录"对话框
"系统登录"对话框,是数据库管理 系统的基本功能之一,用于提供系统用户登录身份验证的功能,保证系统数据的安全。
如下图:
本实例在数据库中建立一个数据表用于保存系统用户登录信息,在设计登录对话框时通过查询该数据表完成验证。
一、使用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
查询效果如下:
既没有空行,也没有上一次的查询结果了。好开心啊!
上面有一个问题不知道怎么解决,哪位大神可以帮帮忙啊,不胜感激!
总结一下,出现这么多的问题,主要还是自己不细心的原因,不过还好,第一次出现问题了,下一次就会避免了。通过这些错误,能更好的理解这几个例子,也算是很不错的收获吧!
"系统登录"对话框,是数据库管理 系统的基本功能之一,用于提供系统用户登录身份验证的功能,保证系统数据的安全。
如下图:
本实例在数据库中建立一个数据表用于保存系统用户登录信息,在设计登录对话框时通过查询该数据表完成验证。
一、使用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
查询效果如下:
既没有空行,也没有上一次的查询结果了。好开心啊!
上面有一个问题不知道怎么解决,哪位大神可以帮帮忙啊,不胜感激!
总结一下,出现这么多的问题,主要还是自己不细心的原因,不过还好,第一次出现问题了,下一次就会避免了。通过这些错误,能更好的理解这几个例子,也算是很不错的收获吧!
相关文章推荐
- asp 遇到过的问题集锦,附加asp语句添加数据库和生成表,asp命令更改指定文件的文件名,asp值传递的应用091116小结
- linux问题集锦——数据库
- 面试/笔试第三弹 —— 数据库面试问题集锦
- 【原】WIn8 store 开发中使用SqlLite3数据库问题集锦
- JDBC连接数据库问题集锦
- 问题集锦13:数据库升级后,程序无法连接数据库
- MSSQL数据库转移问题集锦
- Android问题—sqlLite数据库升级的一些集锦
- 问题集锦12:附加数据库出错(错误5123)
- 数据库开发红皮书实例遇到的一些问题:“找不到可安装的ISAM” “BOF或EOF中有一个是'真',或者当前的记录已被删除……”
- 问题集锦04:使用Management Studio查看数据库性能统计报告时
- PHP 数据库访问问题集锦
- 数据库小问题集锦
- 问题集锦03:使用sqlcmd连接数据库出错
- 初识数据库之红皮书——实例小结
- Sybase 12.5数据库安装,删除以及连接字符串问题
- entity framework 数据库默认时间的问题的一种解决方案
- 域控安装问题集锦
- Python MySQLdb写入数据库乱码问题解决方法
- Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 分类: oracle sde 2015-06-12 11:03 88人阅读 评论(0) 收藏