用DataBase对象操纵Access数据库的问题~~

lovelyxiaoyu 2005-11-22 04:06:57
Function ConnectDB() As Boolean
On Error GoTo errMsg
'DAOにてpio.mdbとの接続を行なう
Dim objPIOWrk As Workspace
Set objPIOWrk = DBEngine.CreateWorkspace("PIO", "Admin", "")
Dim strDBPath As String
strDBPath = "C:\pio.mdb"
Set pObjPIODB = objPIOWrk.OpenDatabase(strDBPath)

'DAOにてtogou.mdbとの接続を行なう
Dim objTogouWrk As Workspace
Set objTogouWrk = DBEngine.CreateWorkspace("TOGOU", "Admin", "")
strDBPath = "C:\togou.mdb"
Set pObjTogouDB = objTogouWrk.OpenDatabase(strDBPath)

'*********For Test*******
' Dim objMsgRs As Recordset
' Set objMsgRs = pObjTogouDB.OpenRecordset("SELECT * FROM T_MSG ")
' objMsgRs.MoveFirst
' Do While Not objMsgRs.EOF
' MsgBox (objMsgRs.Fields(1))
' objMsgRs.MoveNext
' Loop
'********* End For Test*******

ConnectDB = True
Exit Function
errMsg:
'接続に失敗した場合
ConnectDB = False
End Function

该函数定义在一个模块中,pObjPIODB 和 pObjTogouDB 是全局变量,声明如下:
'pio.mdbワークスペースオブジェクト
Public pObjPIODB As Database
'togou.mdbワークスペースオブジェクト
Public pObjTogouDB As Database
问题如下:
我把该函数的For Test段注释去掉后,发现可以顺利的读出表_MSG中的数据但是如果在窗体的Form_Load事件调用该函数后,接着在后面加上For Test段的代码,就发生异常(错误代码为3420)了,请问大家这是什么原因呢?


...全文
61 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
faysky2 2005-11-22
  • 打赏
  • 举报
回复
怎么看不清楚啊
把For Test代码中的Dim objMsgRs As Recordset定义改一下试试:
Dim objMsgRs As New ADODB.Recordset'记得先引用ADO(Microsoft ActiveX Data Object 2.X Library)
存取对象变量库结构作为一个功能较完备的Windows软件开发平台,Visual Basic专业版提供了对数据库应用的强大支持。尤其提供了使用数据控件和绑定控制项,使用数据库存取对象变量(Data Access Object Variable),直接调用ODBC 2.0 API接口函数等三种访问数据库的方法。对其标准内置的Ms Access数据库,它可以提供不弱于专业数据库软件的支持,可以进行完整的数据库维护、操作及其事务处理。在VB中,将非Access数据库称为外来数据库。对于FoxPro、dBASE、Paradox等外来数据库。虽然借助VB的Data Manager 能够对这些数据库进行NEW、OPEN、DESIGN、DELETE等操作,但在应用程序的运行状态中并不能从底层真正实现这些功能。本文从使用数据库存取对象变量的方法出发,实现了非Access格式数据库(以FoxPro数据库为例)的建新库、拷贝数据库结构、动态调入等操作,阐述了从编程技巧上弥补VB对这些外来数据库支持不足的可行性 。 一 、 VB数据库的体系结构具体的VB的数据库结构。 VB数据库的核心结构是所谓的MicroSoft JET数据库引擎,JET引擎的作用就像是一块"面 板",在其上可以插入多种ISAM(Indexed Sequential Access Method,即索引顺序存取方 法) 数据驱动程序。JET引擎为Access格式数据库提供了直接的内部(build-in)支持,这就是VB对Access数据库具有丰富支持的真正原因。 VB专业版中提供了FoxPro、dBASE(或 Xbase)、Paradox、Btrieve等数据库的ISAM驱动程序,这就使得VB能支持这些数据库格 式。另外,其他的许多兼容ISAM的驱动程序也可以通过从厂商的售后服务得到。因而从理论上说,VB能支持所有兼容ISAM的数据库格式(前提是只需获得这些数据库的ISAM驱动接口程序)。 由上可见,Ms JET引擎实质上提供了:一个符合ANSI标准的语法分析器;为查询结果集的使用而提供的内存管理功能;同所支持的数据库的外部接口;为应用代码提供的内部接口。实际上,在VB中从一种数据库类型转化为另一种数据库类型几乎不需要或只需要很少的代码修改。而且,尽管dBASE、Paradox本身的DDL (Data Definition Language,即数据定义语言)和DML(Data Manipulation Language,即数据操纵语言)是非结构化查询的,但它们仍然可以使用VB的SQL语句和JET引擎来操纵。 从VB的程序代码的角度来看,ODBC,ISAM驱动程序以及Ms Access数据库的整个外部结构够可以统一为一个一致的编程接口。也即是说,提供给VB应用程序员的记录集对象视图同所使用的数据库格式及类型是相互独立的。即对FoxPro等数据库仍然可以使用众多的数据库存取对象变量,这就为非Access数据库的访问提供了最重要的方法。   二 、使用非Access数据库时的参数设置及配置文件的参数读取如果在VB的程序中使用了数据库的操作,将应用程序生成EXE文件或打包生成安装程序后,则必须提供一个配置 (.INI)文件,在INI文件中可以对不同类型的数据库进行设置。如果找不到这个INI文件, 将会导致不能访问数据库。通常情况下,INI文件的文件名和应用程序的名称相同,所以如果没有指明,VB的程序会在Windows子目录中去找和应用程序同名的INI文件。可以使用VB中的SetDataAccessOptions语句来设置INI文件。 SetDataAccessOptions语句的用法如下:SetDataAccessOptions 1 ,IniFileName其中IniFileName参数指明的是INI文件的带路径的文件名。值得注意的是,当应用程序找不到这个INI文件时,或在调用 OpenDataBase函数时对其Connect参数值没有设定为VB规定的标准值,如对FoxPro 2.5格式设定为了" FoxPro;"(应为" FoxPro 2.5; "),或者没有安装相应的ISAM驱动程序,则此时VB会显示一条错误信息" Not Found Installable ISAM "。通常,INI文件在应用程序分发出去以前已经生成,或者在安装时动态生成,也可以在应用程序中自己生成。 通常这种 INI文件中有" [Options]"、"[ISAM]"、" [Installed ISAMs]"、"[FoxPro ISAM]"、"[dBASE ISAM] " 、" [Paradox ISAM] "等设置段,对于一个完整的应用程序则还应有一个属于应用 程序自己的设置段如" [MyDB]”。可在其中设置DataType、Server、DataBase、 OpenOnStartup、DisplaySQL、QueryTimeOut等较为重要的数据库参数,并以此限定应用程序一般的运行环境。 Windows API接口函数在Kernel.exe动态链接库中提供了一个OSWritePrivateProfileString函数,此函数能按Windows下配置文件(.INI)的书写格式写入信息。 在通常情况下,应用程序还需要在运行时读取配置文件内相关项的参数。比如PageTimeOut(页加锁超时时限)、MaxBufferSize(缓冲区大小)、LockRetry(加锁失败时重试次数)等参数,通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。 设此应用程序的配置文件为MyDB.INI,则具体过程如下:Funtion GetINIString$( Byval Fname$ ,Byval szItem$ ,Byval szDeFault$ ) ' 此自定义子函数实现INI 文件内设置段内参数的读取Dim Tmp As String,x As Integer Tmp = String( 2048,32 ) x = OSGetPrivateProfileString(Fname$,szItem$ , szDefault$,Tmp,Len(Tmp) ," MyDB.INI " ) GetINIString = Mid$( Tmp,1,x ) EndFunction以下这些函数的声明可写在模块文件内,且每个函数的声明必须在一行内Declare Function OSGetPrivateProfileString% Lib "Kernel" Alias "GetPrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal ReturnString$, ByVal NumBytes As Integer, ByVal FileName$) Declare Function OSWritePrivateProfileString% Lib "Kernel" Alias "WritePrivateProfileString" (ByVal AppName$, ByVal KeyName$, ByVal keydefault$, ByVal FileName$) Declare Function OSGetWindowsDirectory% Lib "Kernel" Alias "GetWindowsDirectory" (ByVal a$, ByVal b%) Sub Form1_Load( ) Dim st As String Dim x As Integer Dim tmp As String tmp = String$( 255, 32 ) ' INI文件内为各种数据库格式指明已安装的相应ISAM驱动程序x = OSWritePrivateProfileString(" Installable ISAMS", "Paradox 3.X", "PDX110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE III", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE IV", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.0", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "FoxPro 2.5", "XBS110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "Installable ISAMS", "Btrieve", "BTRV110.DLL", "MyDB.INI" ) x = OSWritePrivateProfileString( "dBase ISAM", "Deleted", "On", "MyDB.INI" ) ' 指明 INI文件的位置x = OSGetWindowsDirectory( tmp, 255 ) st = Mid$( tmp, 1, x ) SetDataAccessOption 1, st + "\mydb.ini" '获得INI文件一些参数 gwMaxGridRows = Val(GetINIString( " MyDB.INI " ,"MaxRows", "250" )) glQueryTimeout = Val(GetINIString( " MyDB.INI " ,"QueryTimeout", "5" )) glLoginTimeout = Val(GetINIString( " MyDB.INI " ,"LoginTimeout", "20" )) End Sub   三 、数据存取对象变量对外来数据库编程的方法及其实例在VB专业版数据库编程的三种方法中,第二种-使用数据库存取对象变量(DAO)的方法最具有功能强大、灵活的特点。 它能够在程序中存取ODBC 2.0的管理函数;可以控制多种记录集类型:Dynaset,Snapshot 及Table记录集合对象;可以存储过程和查询动作;可以存取数据库集合对象,例如 TableDefs,Fields,Indexes及QueryDefs;具有真正的事物处理能力。因而,这种方法对数据库处理的大多数情况都非常适用。 由于VB中的记录集对象与所使用的数据库格式及类型是相互独立的,所以在非Access数据库中也可以使用数据库存取对象变量的方法。因而 对FoxPro等外来数据库而言,使用数据库存取对象变量的方法同样也是一种最佳的选择。 有一点需要注意的是,VB的标准版中仅能使用数据控件(Data Control)对数据库中的记录进行访问,主要的数据库存取对象中也仅有Database、Dynaset对象可通过数据控件的属 性提供,其它的重要对象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在VB的标准版中生成,所以使用数据存取对象变量的方法只能用VB 3.0以上的专业版。 (一)、非Access数据库的新建及库结构的修改VB专业版中的数据库存取对象变量可以分为两类,一类用于数据库结构的维护和管理,另一类用于数据的存取。其中表示数据库结构时可以使用下面的对象DataBase、TableDef、Field、Index,以及三个集合 (Collection): TableDefs、Fields和Indexes 。每一个集合都是由若干个对象组成的,这些数据对象的集合可以完全看作是一个数组,并按数组的方法来调用。一旦数据库对象建立后,就可以用它对数据库的结构进行修改和数据处理。对于非Access数据库,大部分都是对应于一个目 录,所以可以使用VB的MkDir语句先生成一个目录,亦即新建一个数据库。而每一个非 Access数据库文件可看作是此目录下的一个数据表(Table),但实际上它们是互相独立的。 下面是新建一个FoxPro 2.5格式数据库的程序实例。 Sub CreateNew ( ) Dim Db1 As database , Td As TableDefs Dim T1 As New Tabledef , F1 As New Field , F2 As New Field , F3 As New Field Dim Ix1 As New Index Dim Path As String Const DB_TEXT = 10 , DB_INTEGER = 3 ChDir "\" Path$ = InputBox( " 请输入新路径名: ", "输入对话框" ) MkDir Path$ ' 新建一个子目录Set Db1 = OpenDatabase(Path$, True, False, "FoxPro 2.5;") Set Td = Db1.TableDefs T1.Name ="MyDB" '新建一个数据表,数据表名为MyDB F1.Name = "Name" , F1.Type = DB_TEXT , F1.Size = 20 F2.Name = "Class" , F2.Type = DB_TEXT , F2.Size = 20 F3.Name = "Grade" , F3.Type = DB_INTEGER T1.Fields.Append F1 '向数据表中添加这些字段T1.Fields.Append F2。
Access 2010数据库应用技术 (第2版) 第1章 数据库技术概论 u 了解数据库技术的产生背景与发展过程。 u 掌握数据库系统的组成与特点。 u 理解数据模型的概念。 u 掌握关系数据库的基本知识。 u 熟悉Access 2010的操作环境。 1.数据和信息 数据是人们用于记录事物情况的物理符号。 信息是数据中所包含的意义。信息是经过加工处理并对人 类社会实践和生产活动产生决策影响的数据。 数据是用来表示信息的,但并非任何数据都能表示信息; 信息是加工处理后的数据,是数据所表达的内容。信息不随 表示它的数据形式而改变,它是反映客观现实世界的知识; 而数据则具有任意性,用不同的数据形式可以表示同样的信息。 1.1 数据与数据处理 2.数据处理与数据管理 数据处理是指将数据转换成信息的过程,其基本目 的是从大量的、杂乱无章的、难以理解的数据中整理出对人 们有价值、有意义的数据(即信息),作为决策的依据。 数据管理是指数据的收集、组织、存储、检索和维护等操 作,这些操作是数据处理的中心环节,是任何数据处理业 务中不可缺少的部分。数据管理的基本目的是为了实现数 据共享、降低数据冗余、提高数据的独立性、安全性和完 整性,从而能更加有效地管理和使用数据资源。 1.2.1 人工管理阶段 20世纪50年代中期以前,数据管理是以人工管理方式进行的。 数据管理的特点如下。 (1)数据不保存 (2)由应用程序管理数据 (3)数据有冗余,无法实现共享 (4)数据对应用程序不具有独立性 1.2 数据库技术的发展 1.2.2 文件管理阶段 20世纪50年代后期至60年代后期,计算机开始大量用于数 据管理。 数据处理应用程序利用操作系统的文件管理功能,将相关 数据按一定的规则构成文件,通过文件系统对文件中的数据 进行存取和管理,实现数据的文件管理方式。其特点可概括 为如下两点。 Ø 数据可以长期保存 Ø 数据对应用程序有一定的独立性 当数据量增加、使用数据的用户越来越多时,文件管理便 不能适应更有效地使用数据的需要了,其症结表现在3个方面。 (1)数据的共享性差、冗余度大,容易造成数据不一致 (2)数据独立性差 (3)数据之间缺乏有机的联系,缺乏对数据的统一控制和管 理 1.2.3 数据库管理阶段 20世纪60年代后期,数据管理技术在文件管理的基础上发 展到数据库管理。 数据库(Database,DB)是按一定的组织方式存储起来的、 相互关联的数据集合。在数据库管理阶段,由一种叫做数据 库管理系统(Database Management System,DBMS)的系统软 件来对数据进行统一的控制和管理。 在应用程序和数据库之间保持较高的独立性,数据具有完 整性、一致性和安全性高等特点,并且具有充分的共享性, 有效地减少了数据冗余。 1.2.4 新型数据库系统 数据库技术的发展先后经历了层次数据库、网状数据库和 关系数据库。层次数据库和网状数据库可以看作第1代数据 库系统,关系数据库可以看作第2代数据库系统。实际应用 中涌现出的许多问题,促使数据库技术不断向前发展,出现 了许多不同类型的新型数据库系统。 (1)分布式数据库系统 (2)面向对象数据库系统 (3)多媒体数据库系统 (4)数据仓库技术 1.3.1 数据库系统的组成 数据库系统是由计算机系统、数据库及其描述机构、数据 库管理系统和有关人员组成的具有高度组织性的整体。 1.计算机硬件 计算机硬件是数据库系统的物质基础,是存储数据库及运 行数据库管理系统的硬件资源,主要包括计算机主机、存储 设备、输入输出设备及计算机网络环境。 1.3 数据库系统 2.计算机软件 数据库系统中的软件包括操作系统、数据库管理系统及数 据库应用系统等。 数据库管理系统是数据库系统的核心软件之一,它提供数 据定义、数据操纵数据库管理、数据库建立和维护及通信 等功能。数据库管理系统必须运行在相应的系统平台上,有 操作系统和相关系统软件的支持。 数据库应用系统是指系统开发人员利用数据库系统资源开 发出来的、面向某一类实际应用的应用软件系统。 3.数据库 数据库是指数据库系统中按照一定的方式组织的、存储在 外部存储设备上的、能为多个用户共享的、与应用程序相互 独立的相关数据集合。它不仅包括描述事物的数据本身,而 且还包括相关事物之间的联系。 4.数据库系统的有关人员 数据库系统的有关人员主要有3类:最终用户、数据库应用 系统开发人员和数据库管理员(Database Administrator,DBA)。 1.3.2 数据库的结构体系 数据库领域公认的标准结构是三级模式结构及 二级映射,三级模式包括外模式、概念模式和内 模式,二级映射则分别是概念模式/内模式的映射 及外模式/概念模式的映射。这种三级模式与二级 映射构成了数据

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧