数据库怎么新建表

发布时间: 2023-11-21 13:05 阅读: 文章来源:1MUMB4718PS

【分享成果,随喜正能量】方向比速度重要,智慧比吃苦重要,学习比学历重要,机遇比关系重要,要什么比做什么重要!观念比能力重要,策划比实施重要,行动比承诺重要,选择比努力重要,感知比告知重要,创造比证明重要,尊重生命比别人看法重要.

《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第19讲:如何在数据库中新建一个查询表

第十九讲 新建查询表,并在工作表中显示结果

大家好,今日讲解VBA数据库解决方案第19讲:如何在数据库中新建一个查询表,并在工作表中显示出来。关于Recorsset集合的一些操作,在前几讲中讲了很多,这里提醒大家一点:任何对象都不是孤立存在的,要结合实际来理解。有朋友向我咨询一些概念的问题,在写这套资料时,我也同样要参考很多的资料,有时要对照着英语去理解一些概念,这时往往发现很多的概念在英语中和之前人们汉语翻译有时是对不上的。特别是现在的数据库讲解阶段,涉及到ADO、 RDO、连接、打开、引用,单纯的从概念上真的很难理解,这时我建议大家不要纠结于纯概念,要从实际出发,比如:一段代码就是一个连接,一个代码就是一个创建,这样有实际内容参考的去理解就可以了;再者,无论是什么途径,我们的目的是应用,只要我们能达到应用,就达到了我们的目的。很多写VBA的人都是专业人士,而我仅仅是根据多年的经验来写东西,会紧扣以实用为目的,目的是实用。

今日我们讲解如何从Recorsset记录集中根据某特定的条件形成一个数据库中新表。在前几讲的讲解中是把这些记录直接显示在工作表中,即显示在EXCEL文件中,今日的内容和前面的内容有所不同,是要形成一个表,然后再显示。

1 应用场景的具体分析

实例:我们还是利用之前的数据库,如下资料,把职务为普通员工的职工要重新建立一个查询表,最后再在工作表中显示出来.

随着讲解的深入,实际工作中经常会遇到的问题会逐渐的体现,大家要跟紧我,我们一起学习,这套教程和《VBA代码解决方案》不同,有些内容是连续的,需要读者慢慢的连续的去领会。

2 新建查询表并回填工作表的代码及代码解读

下面看看我们今日课题的代码:

Sub mynz_19() ‘第19讲:如何在数据库中新建一个查询表,并在工作表中显示出来

Dim cnADO, rsADO As Object

Dim strPath, strSQL, strViewName As String

Set cnADO = CreateObject("ADODB.Connection")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strViewName = "普通员工表"

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

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

If Not rsADO.EOF Then

MsgBox ("请注意:原有表将删除!")

strSQL = "drop TABLE " & strViewName

cnADO.Execute strSQL

End If

strSQL = "CREATE VIEW " & strViewName _

& " AS select * FROM 员工信息 " _

& "Where 职务= ‘员工‘"

cnADO.Execute strSQL

MsgBox "查询表创建成功!", , "创建视图"

rsADO.Close

strSQL = "select * FROM 普通员工表"

rsADO.Open strSQL, cnADO, 1, 3

Sheets("19").select

Cells.ClearContents

For i = 0 To rsADO.Fields.Count - 1

Sheets("19").Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

For i = 1 To rsADO.RecordCount

For j = 0 To rsADO.Fields.Count - 1

Sheets("19").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码部分截图:

代码的讲解:

1) If Not rsADO.EOF Then

MsgBox ("请注意:原有表将删除!")

strSQL = "drop TABLE " & strViewName

cnADO.Execute strSQL

End If

以上代码判断是否存在这个表,如果存在,那么删除。

2) strSQL = "CREATE VIEW " & strViewName _

& " AS select * FROM 员工信息 " _

& "Where 职务= ‘员工‘"

cnADO.Execute strSQL

MsgBox "查询表创建成功!", , "创建视图"

rsADO.Close

上述代码创建了查询表,并弹出对话框通知用户。

这里用的CREATE VIEW 就是创建视图的意思:在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。SQL CREATE VIEW 语法

CREATE VIEW view_name AS

select column_name(s)

FROM table_name

WHERE condition

注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

3) rsADO.Close

strSQL = "select * FROM 普通员工表"

rsADO.Open strSQL, cnADO, 1, 3

For i = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

For i = 1 To rsADO.RecordCount

For j = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

上述代码先关闭之前的rsADO,然后新建立一个查询的SQL,用于向工作表输出数据

4) rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

最后关闭连接和释放内存。

特别注意点:在上述代码中要注意的是在新的记录集建立之前一定要关闭原先的记录集,但这个时候的数据库连接不用关闭,因为还是用的同一个数据库。

好了,我们看看我们的运行结果:

看看数据库的表:

今日内容回向:

1 如何建立一些查询表?

2 查询表建立后输出的时候要注意什么?

本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

上述教程的学习顺序:

① 713265或者743265。

② 78

•••展开全文
相关文章