大家好,今天继续讲解VBA资料库解决方案的第14讲:如何动态的在资料库中建立数据表。我们在什么是资料库中讲解讲过,表是一种关系,那么这种关系可否能实现动态的建立呢?也就是说,我们在程序中用代码建立数据表,是否可以做到呢?为什么要提出这个问题呢?因为我们在做程序时经常会用到写资料库时要建立数据表,而手工建立确实很麻烦,我们考虑要用VBA代码去建立,其实,用代码去建立是完全可以的,也非常的简单。

实例的应用:在一个资料库mydata中已经存在了一个表」员工记录」,我们要建立另外的一个表「信息参考」,这个表中的内容是为了储存处包括各个部门的部门名称,和部门的定岗人数两个栏位,我们要看看这个代码该如何完成的。代码如下:

Sub mynztableJL()

Dim cnADO, rsADO As Object

Dim strPath, myTable, strSQL As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "mydata2.accdb"

myTable = "信息参考"

TT = False

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, myTable, Empty))

If Not rsADO.EOF Then

MsgBox "工作表已经存在,是否删除数据表?", vbInformation, "数据表判断"

strSQL = "DROP TABLE " & myTable

cnADO.Execute strSQL

TT = True

Else

MsgBox "数据表不存在,下面将建立工作表", vbInformation, "数据表判断"

End If

strSQL = "CREATE TABLE " & myTable _

& "(部门 text(20) not null,总人数 text(10) not null)"

cnADO.Execute strSQL

If TT <> True Then

MsgBox "创建数据表成功!" & vbCrLf & "数据表名称为:" & myTable, , "创建数据表"

Else

MsgBox "创建数据表重新创建成功!" & vbCrLf & "数据表名称为:" & myTable, , "创建数据表"

End If

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码的截图:

代码的讲解:

1 strSQL = "DROP TABLE " & myTable

cnADO.Execute strSQL

这是通过SQL,使用 DROP 语句,删除表。

备注:通过使用 DROP 语句,可以轻松地删除索引、表和资料库。

2 Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, myTable, Empty))

If Not rsADO.EOF Then

MsgBox "工作表已经存在,是否删除数据表?", vbInformation, "数据表判断"

strSQL = "DROP TABLE " & myTable

cnADO.Execute strSQL

TT = True

Else

MsgBox "数据表不存在,下面将建立工作表", vbInformation, "数据表判断"

End If

在上述的代码中首先要判断myTable工作表即"信息参考"的表是否存在,如果存在那么首先要删除这个已经存在的数据表,为了达到人机交互,在删除之前要征得用户的同意。

如果不存在数据表,那么会提示用户,下面将创建。

3 strSQL = "CREATE TABLE " & myTable _

& "(部门 text(20) not null,总人数 text(10) not null)"

cnADO.Execute strSQL

上述代码创建了一个myTable工作表即"信息参考"的数据表,这个工作表有两个栏位,

① 部门 text(20) not null 名称为「部门」, 文本 20个字元长,不为空

② 总人数 text(10) not null名 称为「总人数」,文本 10个字元长,不为空

③ CREATE TABLE 语句用于创建资料库中的表。

语法:CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

4 If TT <> True Then

MsgBox "创建数据表成功!" & vbCrLf & "数据表名称为:" & myTable, , "创建数据表"

Else

MsgBox "创建数据表重新创建成功!" & vbCrLf & "数据表名称为:" & myTable, , "创建数据表"

End If

上面代码中弹出对话框提示用户数据表创建成功,这里提示用户创建的过程是不同的,一种情况是原来没有此数据表是新创建的,一种情况是原先存在此工作表,被删除了,然后再创建的。这个判断是通过的一个变数TT来确认的。

5 rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

上述代码是关闭连接,并释放内存。在代码的编写过程中。一定记著最后要关闭连接和记录集,最后还要释放内存。

下面我们看看代码的运行:

如果是原先存在此数据表,则会有下面的提示:

今日内容回向:

1 如何创建和删除一个资料库中的数据表?

2 创建一个数据表的栏位是如何添加的?

《VBA代码解决方案》系列电子书,是我将一些非常实用的VBA内容结集成册,PDF格式文件,朋友们可以从中查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。


推荐阅读:
相关文章