VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表

news2025/1/11 20:57:08

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表cbc123125769252bfb7339c136d588dc.jpeg

【分享成果,随喜正能量】 你过去的业障,现在它生起了,你想修道,它给你做障碍,所以你心里不安。那你怎么办?你认识它了,安一安吧!

当你心不安的时候,不要打坐,也不要参禅。做什么?读诵大乘,最好的方法就是读诵大乘。。

第十四讲 如何在数据库中动态删除和建立数据表

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

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

1 动态建立和删除数据表的应用代码

代码如下:

Sub mynz_14() '第14讲:如何动态的在数据库中建立数据表

Dim cnADO As Object, rsADO As Object

Dim strPath As String, myTable As String, 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

代码的截图:

99c543b141e1cf04b6431e19d6a5a94d.jpeg

2 代码的解读和实现效果

代码的讲解:

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

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

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

3f304c1a9d642ff56372063902c0f3a8.jpeg

47ce1bc42423c32b6cbffc451c9f2c22.jpeg

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

f92a9c72e299dabd5634d04025d66091.jpeg

c44791a4d66cc1ec6e4f0321c1aacffc.jpeg

今日内容回向:

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

2 创建一个数据表的字段是如何添加的?

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

65efecd3e26908a8b20c5ac19fc04fce.jpeg

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

8b2486d4f1ad25f76e96be18d5574623.jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【楼兰图腾】

题目 思路 本质上这个问题就是在求分别在一个数左边和右边的&#xff0c;大于该数的个数的乘积&#xff08;小于同理&#xff09; 维护一个下标指元素大小的线段树来方便求大于和小于某数值的元素个数 通过从左到右遍历&#xff0c;来确定此时的线段树状态一定不包括右边 因为…

【C++ Primer Plus习题】8.3

问题: 解答: #include <iostream> #include <string> #include <cctype> using namespace std;void function(string& str) {for (int i 0; i < str.size(); i){str[i]toupper(str[i]);} }int main() {string str;while (true){cout << "…

【超详细】深度学习的Hello World:使用pytroch训练一个自定义的手写体数字识别模型完整流程【附数据集与完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Unet改进15:添加TripletAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加TripletAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 由于注意机制具有在通道或空间位置之间建立相互依赖关系的能力,近年来在各种计算机视觉任务中得到了广泛的研究和应用。在本文中,我们研究了轻量级但…

龙芯+FreeRTOS+LVGL实战笔记(新)——01准备开发环境

本专栏是笔者另一个专栏《龙芯RT-ThreadLVGL实战笔记》的姊妹篇&#xff0c;主要的区别在于实时操作系统的不同&#xff0c;章节的安排和任务的推进保持一致&#xff0c;并对源码做了改进和优化&#xff0c;各位可以先到本人主页下去浏览另一专栏的博客列表&#xff08;目前已撰…

C++STL之vector类:相关习题解析

目录 只出现一次的数字| 只出现一次的数字|| 只出现一次的数字||| 杨辉三角(vector>的理解) 删除排序数组中的重复项 删除排序数组中的重复项|| 数组中出现次数超过一半的数字 只出现一次的数字| . - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 我们都…

★ 算法OJ题 ★ 力扣15 - 三数之和

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;芝麻凛将和大家一起做一道双指针算法题--三数之和~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 解法一&#xff1a;排序 暴力枚举 利…

JavaEE:多线程进阶(常见的锁策略)

文章目录 常见的锁策略各种锁的概念 synchronized特点加锁过程 锁消除(编译器的优化策略)锁粗化(编译器的优化策略) 常见的锁策略 锁是一个非常广义的问题. synchronized只是市面上五花八门的锁的一种典型的实现.它是Java内置的,推荐使用的锁. 各种锁的概念 下面这些概念,一…

JavaScript程序结构

程序结构有三种&#xff1a;选择结构、循环结构 、顺序结构 一、选择结构 1、简介 根据条件进行判断&#xff0c;从而执行不同的操作&#xff0c;称为选择结构&#xff08;分支结构&#xff09;&#xff0c;其实就是条件判断 选择结构的类型&#xff1a;if、switch 2、if结…

第十七篇——九变篇:紧扣战略重心,别跑题

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 九变种前面偏向宏观给讲解了九变的含义&#xff1b;这一篇通过更加微观的…

如何基于numpy和scipy实现曲面的最大梯度计算与显示

大家在做三维可视化研究过程中,经常需要做三维曲面的绘制和相交分析,在不知道三维曲面方程的情况下,如何基于曲面散点数据计算曲面的最大梯度点和梯度线的三维可视化是大家基于曲面分析研究中的重点关注的问题,本文在python环境下,基于numpy、pandas、scipy和matplotlib等…

MYSQL————联合查询

联合多个表进行查询 设计数据时把表进行拆分&#xff0c;为了消除表中字段的依赖关系&#xff0c;比如部分函数依赖&#xff0c;传递依赖&#xff0c;这时会导致一条SQL查出来的数据&#xff0c;对于业务来说是不完整的&#xff0c;我们就可以使用联合查询把关系中的数据全部查…

dk安装redis

docker search redis docker pull redis 由于我是使用的镜像 所以我的拉取命令就是 docker pull dockerpull.com/redis 拉下镜像之后&#xff0c;点击下面地址选择自己需要的 redis 版本的配置文件 redis/redis.conf at 6.2.6 redis/redis GitHubRedis is an in-memory data…

Python和Java及MATLAB和CUDA显微镜导图

&#x1f3af;要点 交互式设备控制和图像处理图像背景和阴影校正可视化萤光团位置算法和读取光学图像读写转换显微镜图像生物医学细胞图像分析荧光图像算法计算亮度数据和模拟表征新型染料和缓冲液强度估计细菌图像分析扫描透射和高分辨率透射图像模拟多模态成像分割可视化透射…

python安装protobuf记录

需求背景 客户需要protobuf环境配置以及插件安装&#xff0c;我主要通过在pycharm里面配置参数&#xff0c;将问题解决&#xff01; 导语 Python中的protobuf(Protocol Buffers)是一种用于序列化结构化数据的语言无关、平台无关、可扩展的机制。它能够让您在不同的应用程序和语…

搭建基于QT的TCP服务器与客户端

1、实现功能 1、服务器和客户端能够建立连接 2、服务器可以给客户端发送信息 3、客户端可以给服务器发送信息 2、server 2-1、widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> QT_BEGIN_NA…

2024 年 IBM 量子开发者大会:等你来

在 2024 年 IBM Quantum™ 开发者大会上&#xff0c;与会者将获得 IBM Quantum 尖端工具和即将推出的路线图更新的独家、亲身预览&#xff0c;所有这些都围绕一个主题 — — Qiskit 的性能。 2024 年 IBM 量子开发者大会 在此申请 重要日期 7 月 24 日&#xff1a; 开放申请 8 …

leetcode 902. Numbers At Most N Given Digit Set

题目链接 Given an array of digits which is sorted in non-decreasing order. You can write numbers using each digits[i] as many times as we want. For example, if digits [1,3,5], we may write numbers such as 13, 551, and 1351315. Return the number of posit…

Docker续6:容器网络

1.bridge-utils 一个用于Linux系统的网络桥接工具集。它提供了一些命令行工具&#xff0c;帮助用户创建、管理和配置网络桥接。网络桥接是一种将多个网络接口连接在一起&#xff0c;以使它们能够作为单个网络段进行通信的技术。 bridge-utils 常用的命令包括&#xff1a; b…

大阪OSAKA分子泵电源TC163HTC203TC353TC523TC1104TC553TC1813手侧

大阪OSAKA分子泵电源TC163HTC203TC353TC523TC1104TC553TC1813手侧