| Visual Basic常见问题集锦(2) |
 |
 |
|
2001-07-29 10:59
转自:
计算机世界
|
| |
| 由于TAPI 2.X的大多数函数是基于异步方式,VB仅提供有限的支持。随着Windows 2000和TAPI
3.0的发布,VB已能用其公开的COM对象模型提供很好的支持。 |
| 1. ADO2.0/OLE DB 数据库连接更广泛。 |
| 2. 新的Oracle schema及Stored procedure设计能力。 |
| 3. Data Environment 可以设计基于ADO的数据库连接。 |
| 在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) 语法如下: |
| | ({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] |
| | ({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] |
| 如果你希望打开一个有口令保护的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" |
| Dim MyConn As New ADODB.Connection |
| 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 |
| 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 |
| 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 |
| 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。 |
| 用VB5开发的应用程序,在安装后,应用程序产生“The Jet VBA file (VBAJET.dll for
16-bit versions, or VBAJET32.dll for 32-bit versions) failed to initialize
when called. Try reinstalling the applications that returned the
error"的错误信息,该如何解决? |
|
该错误说明系统丢失了必要的DAO或JET的文件。最可能的原因是程序由VB5.0编写而开发机器上(DAO或JET)已升级到VB6.0(如将VB5和VB6
安装在同一台机器上)。VB6.0的JET引擎需要一个额外的动态链接库expsrv.dll。而VB5的Setup
Wizard则不会将此文件打包到安装程序中。 |
| 1. 在没有安装过VB6.0的系统上,安装VB5.0,使用Setup Wizard 封装您的程序。 |
| 2. 升级至VB6.0,使用VB6.0的Package&Deployment Wizard 封装您的程序。 |
|
注意:方法一适用于尚未安装应用程序的客户机上,若客户机已产生了此错误信息,而您又不想升级到VB6.0来封装,那么您需要将客户机的DAO/JET取代为VB5.0的版本。为此,您需手工替代下列文件。 |
| DAO350.dll 在目录\Program Files\Common Files\Microsoft
Shared\DAO,其余两个文件都在\Windows\System(或\Winnt\System32)。 |
| 我用VB编写程序发布到某些计算机上出现运行时错误: ""-2147217872 (80040e30) :The
given type name was unrecognized"。但是在某些机器上却运行正常。我的程序调用了SQL
Server7.0的存储过程。在某些运行正常的机器上已安装了Access 2000, 而出错的机器上安装的是Access
97。请问这个错误会不会是与Access有关? |
| SQL Server 7.0 有SQL Server 6.5不具备的新数据类型:nChar, nVarChar,
它们是Unicode型字符。如果要在VB程序中调用以这些数据类型为参数的存储过程,就需要将旧版本的MDAC升级MDAC2.1或MDAC2.5。新版的MDAC可以在http://www.microsoft.com/data中找到并下载。因为安装Access
2000时会同时安装MDAC2.1,因此你的程序能够在安装Access 2000的机器下正常运行。 |
| 使用"安装与部署向导"(Package & Deployment
Wizard)所生成的安装程序,在Windows95/98上安装时出错"Unable to load file msdadc.dll to
register"的错误信息,该如何解决? |
| Microsoft Data Access Components 只能在安装了DCOM的环境下运行。若您在安装程序中封装了MDAC,那么确保在您的Win95/98上安装DCOM98。您可以通过运行VB6.0的第一片光盘中DCOM98\DCOM98.EXE完成安装。 |
| 不能。 ADO.NET使用managed code, 它不能在VB6中调用。而VB7中可以。 |
|
| |
|
 |
|