VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • vb教程之Visual Basic访问数据库的常见问题

VB6.0的数据访问技术有无任何的改进?
VB6.0的数据访问技术有了许多改进:
1. ADO2.0/OLE DB 数据库连接更广泛。
2. 新的Oracle schema及Stored procedure设计能力。
3. Data Environment 可以设计基于ADO的数据库连接。
4. 整合新的Report Designer。
5. MHFlexGrid控件可显示分层数据。
6. 改进的Data Binding技术。
 

在Visual Basic 6.0中什么是 Data Report Designer?
微软的Visual Basic 6.0 Data Report Designer是内嵌于VB6.0的分层式报表设计器。Report Designer 使开发者能从新的Data Environment Designer 中用把对象拖放入分级的报表设计器中,来创建基于文本的,单级或多级的报表,可用于打印或保存为txt或html格式的文件。另外,Data Report Designer 便于VB6.0 开发人员以程序方式控制他们整个报表的操作,就像数据集成和验证,都在VB6.0 的开发环境中完成。该工具与VB5 所带的Crystal Report 工具相比,其与开发环境的集成程度有了较大程度的提高。
" 我查询 ADO recordset的RecordCount属性总是返回 -1。
在ADO 1.5版本时当我们用adOpenForwardonly 游标类型打开记录集时,RecordCount属性返回 -1,在ADO 2.0, 2.1和2.5版本时用adOpenDynamic类型也会发生这种情况。因此如果要访问记录集的RecordCount属性,请使用adOpenKeyset 或 adOpenStatic作为Server端的游标或使用客户端的游标打开记录集。另外请注意使用的LockType,有些LockType会强制改变游标类型。如果数据供给程序不支持你所设的游标类型,数据供给程序可能会使用一种相近的游标作为替换,也造成游标类型的改变,请同时参照数据供给程序的文档。
 

如何在VB中使用ADO SHAPE Command 实现分层记录集?
分层记录集通过客户端游标引擎实现的MSDataShape provider提供数据。层次结构的记录有点类似于使用JOIN 和 GROUP BY 的SQL 语句,但又有不同,后者返回的记录集包含了主表和从表的字段,而前者的记录集仅含有主表的字段,另外,这个记录集也含有一个附加的字段代表相关从表的数据,你可以将它赋给另一个记录集变量。当你为统计功能使用GROUP BY 和统计函数时,统计值总出现在记录集上,而使用分层记录统计信息会出现在主记录集上而子记录集还保存着子记录的详细内容。

有三种类型的SHAPE可供选择,基于关系的(Relation Based),基于参数的(Parameter Based)和基于组的(Group Based) 语法如下:
SHAPE {parent-statement}
APPEND Aggregate
| ({child-statement} [As Alias]
RELATE parent-field TO child-field | parameter-marker
[, parent-field TO child-field | parameter-marker ...])
[, Aggregate | ({child statement})...]
SHAPE {non-normalized-statement} [AS Alias]
COMPUTE Aggregate
| Alias
| ({child-statement} [As Alias] RELATE parent-field TO
child-field | parameter-marker)
[, Aggregate | Alias | ({child-statement}...)]
[BY grouping-field [, grouping-field]]
SHAPE {non-normalized-statement} [AS Alias]
BY grouping-field [, grouping-field]
详细信息请查阅:msdn\knowedge Base : Q189657
 

如何使用ADO访问加密的Access数据库?
如果你希望打开一个有口令保护的Access数据库,你可以用以下三种语法的任一种:
Dim MyConn As New ADODB.Connection
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Properties("Data Source") = "C:\...\JetPassword.MDB"
MyConn.Properties("Jet OLEDB:Database Password") = "MyPwd"
MyConn.Open
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Data Source=C:\...\JetPassword.MDB;" & _
Jet OLEDB:Database Password=MyPwd"
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Open ConnectionString:=strConn
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
Data Source=C:\...\JetPassword.MDB;" & _
"Jet OLEDB:Database Password=MyPwd"
MyConn.Open ConnectionString:=strConn
如果你打开一个数据库使用了Jet安全保护,你需要使用以下方式:
Dim MyConn As New ADODB.Connection
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Properties("Data Source") = "C:\...\JetSecurity.MDB"
MyConn.Properties("Jet OLEDB:System database") = "C:\...\System.MDW"
MyConn.Open UserID:="Admin", Password:="MyPwd"
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Data Source=C:\...\JetSecurity.MDB;" & _
"Jet OLEDB:System database=C:\...\System.MDW"
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Open ConnectionString:=strConn, _
UserID:="Admin", Password:="MyPwd"
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.3.51;"
"Data Source=C:\...\JetSecurity.MDB;" & _
"Jet OLEDB:System database=C:\...\System.MDW"
MyConn.Open ConnectionString:=strConn, _
UserID:="Admin", Password:="MyPwd"

注意:Jet 3.51 OLEDB provider 被设计用来打开Access97数据库,如果你要打开Access 2000 请使用Jet 4.0 OLEDB provider,当然Jet 3.51 OLEDB provider也能打开Access 97。
如果你希望使用Jet 4.0只要将Microsoft.Jet.OLEDB.3.51换成Microsoft.Jet.OLEDB.4.0
 

我用VB编写程序发布到某些计算机上,在连接Access数据库时出现运行时错误"3706: ADO could not find the specified provider",这是什么问题?
MDAC 2.0会安装Jet OLE DB provider 3.51版本。MDAC 2.1会安装Jet OLE DB provider 4.0版本,但如果机器上已经安装了3.51版本,MDAC 2.1不会删除也不会覆盖旧的3.51版本,这就使节3.51和4.0同时存在与你的开发机上。当连接Access数据库时,Jet OLE DB provider需要检查provider的版本号。而你在制作安装包时仅包含了MDAC 2.1,目标机上自然不可能有Jet OLE DB provider 3.51版本被安装,这就是错误发生的原因。此时你需要修改你的程序,使其使用4.0的Jet OLE DB provider。

相关教程