文档库 最新最全的文档下载
当前位置:文档库 › 在VB程序中用ADO对象动态创建数据库和表

在VB程序中用ADO对象动态创建数据库和表

在VB程序中用ADO对象动态创建数据库和表

蒋铁海

(广东外语外贸大学英文学院信息管理系510420)

摘要:本文阐述了在VB程序中利用ADO对象动态创建数据库和数据表的方法,这些方法在开发VB数据库应用程序中很有实用价值,它可以提高数据库程序灵活性。

关键词:数据库、数据表、ADO、ADOX

1: 问题的提出

在Visual Basic中,常用的数据访问接口有下列三种:数据库访问对象(DAO,Data Access Object)、远程数据库对象(RDO,Remote Data Object)和ActiveX数据对象(ADO,ActiveX Data Object )。数据库访问技术一直在不断进步,而这三种接口的每一种都分别代表了该技术的不同发展阶段。最新的是ADO,它是比RDO 和DAO更加简单,然而更加灵活的对象模型。正因如此,越来越多的人在用VB开发数据库软件时使用ADO作为数据访问接口。在开发过程中,我们通常的使用的方法是:先使用数据库管理系统(例如:Microsoft Access)或VB中的可视化数据管理器建立好数据库和数据表结构,然后在程序中通过使用ADODC数据库控件或引用ADO对象与数据库中的表建立连接,再通过数据库感知控件(例如:文本框、DataGrid等)来进行数据库的各种操作。在这种开发过程中,我们有时需要面对这样一个问题:如何让用户在程序运行过程中动态地建立自己所需的数据库和数据表以提高程序的灵活性呢?在程序运行过程中建立自己所需的数据库和数据表,其本质就是用代码(或者说通过编程)来建立数据库和数据表。众所周知,在Foxpro或ASP编程中,这是很容易的一件事件。那么在VB数据库编程中又是怎样来操作的呢?在VB数据库编程中,如果使用DAO作为数据库访问接口技术,则可以用CreateDatabase结合CreateTableDef方法来实现,目前已有不少书和杂志都讲到了这种方法,本文就不再讲述了;但你如果使用的是最新的数据库访问接口技术ADO,你却发现目前的书和杂志上没有文章讲到如何用代码来建立数据库和数据表的方法,可有时我们非常需要用到这种方法,下面我们就来解决这个问题。

2: ADO与ADOX

我们先来对ADO 和ADOX进行简单的认识。在VB6中,使用ADO开发数据库应用程序时,我们要引用对象库“Microsoft ActiveX Data Objects 2.5 Library”,这个东西的简称就是ADO,它是VB6数据库最核心的对象群,也是VB数据库开发人员经常所引用的对象库,在VB6中你可以看到它的各种版本,从2.0版到2.6版都有,很多人对它已经很熟悉,在此我们不再详细介绍。如果要在程序运行过程中创建数据库和表,我们还要引用对象库“Microsoft ADO Ext 2.1. For DDL Security”,简称为ADOX,其库文件名为是:Msadox.dll。ADOX 是对ADO 对象和编程模型的扩展,它将ADO 扩展为包括创建、修改和删除模式对象,如表格和过程。它还包括安全对象,用于维护用户和组,以及授予和

Tables、Users、Views)、Create(创建新的目录)、Delete(删除集合中的对象)、Refresh(更新集合中的对象)等等。有关ADOX 的详细信息,请在https://www.wendangku.net/doc/546092482.html,/data/ado 中参阅Microsoft 发布的有关ADOX说明的Web 页。

3: 在原有数据表的基础上产生新的数据表

如果仅仅是在已有的数据表的基础上产生新的数据表,我们只要引用对象库“Microsoft ActiveX Data Objects 2.5 Library”再利用Select…Into语句就可以了。例如:有一个名为Wage.mdb的数据库,数据库中有一个名为“工资表”数据表,该数据表的字段有:编号、姓名、基本工资、津贴、应发工资、扣款、实发工资等,这个表中已经有很多的记录。现在我们把其中的实发工资大于2000的记录筛选出来组成一个新表,新表的名称由用户从文本框中输入,新表中我们只要三个字段,它们是:编号、姓名、实发工资。我们用下列程序就可以实现:(事先在窗体中添加一个文本框Text1和一个命令按钮Command1)

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim command As New https://www.wendangku.net/doc/546092482.html,mand

Private Sub Command1_Click()

Dim bm As String

Dim sql As String

If Text1.Text <> "" Then

bm = Trim(Text1.Text)

sql= "Select 编号,姓名,实发工资Into " + bm + " From 工资表Where 实发工资>2000"

Set command.ActiveConnection = conn

https://www.wendangku.net/doc/546092482.html,mandText = sql

command.Execute

Else

MsgBox "你必须输入一个名字"

End If

Private Sub Form_Load()

Dim str As String

str = App.Path

If Right(str, 1) <> "\" Then

str = str + "\"

End If

pstr = "Provider=Microsoft.Jet.OLEDB.3.51;"

pstr = pstr & "Persist Security Info=False;"

pstr = pstr & "Data Source=" & str & "wage.mdb"

conn.Open pstr

rs.CursorLocation = adUseClient

rs.Open "工资表", conn, adOpenKeyset, adLockPessimistic

Set DataGrid1.DataSource = rs

End Sub

当然,我们还可以把程序设计得更好,比如:让用户先在窗口中任意选择所需的字段和一些条件,然后再组合生成一个新表。但无论如何,这种操作只能在从原表的基础上产生一个新表,不能产生一个数据库文件,并且新表和原表放在同一个数据库中。

4: 建立新的数据库和表

前面讲到的方法有一定的局限性,它不能让用户产生自己所需的数据库文件,即使能产生数据表也只能在原有表的基础上生成。我们现在的目的就是让用户利用ADO对象在程序运行过程中创建数据库和表,就好象他利用Access来建立数据库和表一样。为此,我们应该引用对象库“Microsoft ActiveX Data Objects 2.5 Library”和“Microsoft ADO Ext 2.1. For DDL Security”

我们不妨用一个实例来说明具体的操作过程和方法。我们的实例要达到目的是:在程序运行过程中建立一个数据库,数据库的名称由用户输入。然后在数据库中建立一个名为“MyTable”的数据表,数据表中有三个字段,它们分别是:“编号”(整数型)、“姓名”(字符型,宽度为8)、“住址”(字符型,宽度为50),接着在数据表中添加一条记录,最后在DataGrid控件中把记录的内容显示出来,并且让用户在DataGrid控件中任意修改、添加记录。

首先在VB中新建一个窗体,然后在“工程”菜单中引用对象库“Microsoft ActiveX Data Objects 2.5 Library”和“Microsoft ADO Ext 2.1. For DDL Security”。接着定义三个窗体级的对象变量和一个窗体级的字符串变量,它们的具体定义是:

Dim cat As New ADOX.Catalog ’不用cat用另外一个名字也可以

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim pstr As String ’定义该变量是为了后面的书写方便

为了更灵活地创建数据库,我们可以在窗体中加入一个通用对话框、一个DataGrid控件,三个命令按钮,它们的标题分别是:创建数据库和表、查看、更新。通用对话框的作用是给用户输入数据库文件名和决定数据库的存放位置。

“创建数据库和表”命令按钮对应的代码是:

Private Sub Command1_Click()

Dim fm As String ‘fm变量用来获取用户输入的文件名

CommonDialog1.Filter = "MDB文件(*.mdb)|*.mdb|AllFiles(*.*)|*.*|" CommonDialog1.FilterIndex = 1

CommonDialog1.InitDir = "D:\Jthpaper"

CommonDialog1.Flags = 6

CommonDialog1.Action = 2

If CommonDialog1.FileName = "" Then

MsgBox "你必须输入一个文件名,请重新保存一次!"

Exit Sub

Else

fm = CommonDialog1.FileName

End If

pstr = "Provider=Microsoft.Jet.OLEDB.4.0;" ’不能把这里的4.0改为3.51

pstr = pstr & "Data Source=" & fm

cat.Create pstr ‘创建数据库

Dim tbl As New Table

cat.ActiveConnection = pstr

https://www.wendangku.net/doc/546092482.html, = "MyTable" ‘表的名称

tbl.Columns.Append "编号", adInteger ‘表的第一个字段

tbl.Columns.Append "姓名", adVarWChar, 8 ‘表的第二个字段

tbl.Columns.Append "住址", adVarWChar, 50 ‘表的第三个字段

cat.Tables.Append tbl ‘建立数据表

conn.Open pstr

rs.CursorLocation = adUseClient

rs.Open "MyTable", conn, adOpenKeyset, adLockPessimistic

rs.AddNew ‘往表中添加新记录

rs.Fields(0).Value = 9801

rs.Fields(1).Value = "孙悟空"

rs.Fields(2).Value = "广州市花果山"

rs.Update

End Sub

上面程序中有一个需要说明的地方,这就是语句:pstr = "Provider=Microsoft.Jet.OLEDB.4.0;",这个语句表示Microsoft Jet OLEDB驱动程序的版本是4.0,这是目前最新的版本,利用它你可以用VB中的ADO对象访问Access2000及其以下版本所建立的数据库。你不能把这里的“4.0”改为“3.51”,否则程序不能正常运行;在VB6中,3.51版本的Microsoft Jet OLEDB驱动程序对应的是Access97数据库。换而言之,用这种方法建立的数据库和表跟用Access2000所建立的数据库和表是同一类型的,你只能直接用Access2000来打开,虽然你可以用VB6来访问这种数据库和其中的数据表,但你不能用Access97或VB6中的“可视化数据管理器”来直接打开。

在程序运行时只要用户单击该命令按钮就可以创建自己所需的数据库。“查看”命令按钮对应的代码是:

Private Sub Command3_Click()

Set DataGrid1.DataSource = rs

End Sub

“更新”命令按钮对应的代码是:

Private Sub Command4_Click()

rs.UpdateBatch

End Sub

我们这个实例只是用来说明问题,在实际应用当中你可以把它进一步改进,例如:你在窗体中再增加一些文本框和组合框,供用户输入或选择数据表的名称、字段的名称、字段的宽度和小数位数。这样,用户就可以自主地决定数据库的所有内容了,程序的灵活性也就大大提高了。

5:结束语

如果你使用的是最新的数据访问接口技术ADO(Microsoft强烈建议大家使用这种最新技术),你又想在程序运行过程中创建数据库文件和数据表,此时,你应该在Visual BASIC 6.0中引用对象库“Microsoft ActiveX Data Objects 2.5 Library”和“Microsoft ADO Ext 2.1. For DDL Security”,然后使用ADOX对象的Create、Append等方法就可以实现。这种方法使用的Microsoft Jet OLEDB驱动程序的版本是4.0,因此,使用这种方法建立的数据库文件和数据表可以直接使用Access2000打开。笔者在VB数据库软件开发过程中已多次使用这种方法,该方法在提高程序的灵活性和满足用户的特殊需要方面有很大的作用。

参考文献

1. [美]Rob Krumm,轻松学用ADO编程,郝启堂等译,电子工业出版社,2001

2. 王国荣,Visual Basic 6.0数据库程序设计,人民邮电出版社,1999

3. [美]Roger Jennings ,Visual Basic 6.0数据库开发人员指南,前导工作室译,机械工业出版社,1999

4. 谭浩强薛淑斌袁玫, Visual Basic程序设计,清华大学出版社,2000

作者简介:蒋铁海(1965-),男,计算机副教授

主要从事数据库、网络、CAI及管理信息系统等方向的研究和教学工作。

作者单位:广东外语外贸大学英文学院信息管理系广州 510420

电话:020-********转2464(办)

电子信箱:newhust@https://www.wendangku.net/doc/546092482.html,

相关文档
相关文档 最新文档