EXCEL VBA怎么读写SQLSERVER 数据库

EXCEL VBA怎么读写SQLSERVER 数据库,第1张

Sub 按钮1_Click()

Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表

'Dim cn As New ADODBConnection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用

'Dim rs As New ADODBRecordset '定义记录集对象,保存数据表

‘工具 ---〉引用 ---〉Microsoft ActiveX data objects

'下面两句就不需要增加引用ADO

Set cn = CreateObject("AdodbConnection")

Set rs = CreateObject("AdodbRecordset")

Dim strCn As String, strSQL As String '字符串变量

Dim strCond As String

strCn = "Provider=sqloledb;Server=R9HDET7;Database=dbname;Uid=username;Pwd=password" '定义数据库链接字符串

'下面的语句将读取数据表数据,并将它保存到excel工作表中:工作表为一张两维表,记录集也是一张两维表

strSQL = "select CUSTOMER_NAME from VSC_BI_CUSTOMER " '定义SQL查询命令字符串

cnOpen strCn '与数据库建立连接,如果成功,返回连接对象cn

rsOpen strSQL, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中

i = 2

Set sht = ThisWorkbookWorksheets("Test") '把sht指向当前工作簿的Test工作表

Do While Not rsEOF '当数据指针未移到记录集末尾时,循环下列 *** 作

shtCells(i, 1) = rs("CUSTOMER_NAME") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列

rsMoveNext '把指针移向下一条记录

i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行

Loop '循环

rsClose '关闭记录集,至此,程序将把某数据表的字段1保存在excel工作表sheet1的第1列,行数等于数据表的记录数

cnClose '关闭数据库链接,释放资源

End Sub

vba是在最初组织旧版评教系统时就接触过的,但一直没研究过,也没仔细看过。只知道它可以整理数据。

了解:

Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。——来自百度百科

背景:

这次使用vba是因为:这次评教最初用的外网,连的万达238的数据库,但由于服务器出现问题,及时更换了局域网,连的校内207的库。之后万达服务器恢复后,又继续用外网。即:评教的数据在两个数据库中。这样对统计成绩就造成了一定的困难。——如何对成绩进行整合??

解决:

其实在这里用vba,就相当于把excel当成数据库,对其进行 *** 作。

我是先把成绩分别导出来,也就是有两份成绩单。每一份都不完整:有可能一个老师,一部分学生给的分在1个库中,另一部分的分在另一个库。这样统计出来成绩就是这样的:

数据库1:

数据库2:

vba代码:

'作 者:赵寒-借鉴师哥旧版vba

'时 间:2016-6-19 19:52:10

'过程说明:此过程为多个库中评教数据合并专用过程。主要功能是计算某教师、某课程在多个库中学生评分

' 的平均值。

'使用说明:处理的Excel必须是直接从评教系统导出的Excel,不得更换Excel中列的顺序。且需要将多个成绩单数据放在同一个excel进行整合统计。

Sub formatting()

Dim rowCount As Integer '总行数

Dim colCount As Integer '总列数

Dim tempRowCount As Integer '临时行数

Dim tempColumnCount As Integer '临时列数

Dim arrResult(100) As String '存放临时结果

Dim strSheetName As String '存放原工作表名

Dim sheetResult As Worksheet '自定义的工作表

Dim n

1、打开源数据文件,把首行中的对应的数据,复制行到空白位置。

2、选中J2单元格,单击编辑栏中的"插入函数“,如图示。

3、d出”插入函数“对话框,设置其类别为”逻辑“,并选择列表框中的IF选项。然后确定。

4、在d出的”函数参数“对话框中,设置Logical_test参数为”I2=“”,将Value_if_true设置为“”,即空白内容。

将Value_if_false参数框中输入“VLOOKUP(I2,A2:B2846,2),然后确定。

5、选中J2单元格,注意是J2,不是I2哦(I2是输入证券代码的地方),鼠标移动到单元格右下角,出现十字光标时,按住鼠标左键向右拖动到O2单元格。如图

6、这个时候会发现原来源数据中的C2-G2单元格中的内容就会自动填充到K2-O2单元格中。这个时候,如需要的数据是按源数据中的数据从上 到下排列的,就可以不用修改了。直接重复第5步中的方法,把J2-O2每个单元格下拉填充就完成了。如图示,先把需要的数据列复制到I列中,然后依次下拉 填充。

7、但有时候,需要的不是按照源数据中的排序,比如说,现用的这个例子,如果在I3中,输入000002就会出错。如图示。

8,这是j3中的函数为VLOOKUP(I3,A3:B2847,2)),也就是搜索从A3到B2487区域中 的内容。没有包含A2,所以我们输入000002在源数据中找不到。所以使用这个方法前,要先对需要的数据按源数据进行排序。不然,是不准确的。

在SQL数据库的很多应用场景中,需要将SQL中的某个数据库或查询的结果导出到EXCEL中,因为Excel更容易对数据处理和方便用户邮箱传输。本次经验归纳了SQL数据表导出到EXCEL中的三种方法:

1、复制粘贴,将SQL查询语句按指定条件导出数据;——适合小量数据。

2、导出完整的SQL数据表为Excel文件;——适合大量数据。

3、定时自动导出指定SQL数据表为Excel文件;——适合大量数据。

其它:DTS数据转换服务导入导出向导或者DTS设计器创建DTS包;

>

'Database Connection

Dim cn As Workspace

Dim db As Database

Dim Rs As Recordset

Dim YOURPWD$, strSQL$, sContent$

'设置数据库

Set cn = DBEngineWorkspaces(0)

Set db = cnOpenDatabase(sDbPath, False, False, ";pwd=" & YOURPWD)

'打开数据库

strSQL = "Select From YourTable"

Set Rs = dbOpenRecordset(strSQL, , dbReadOnly)

以上就是关于EXCEL VBA怎么读写SQLSERVER 数据库全部的内容,包括:EXCEL VBA怎么读写SQLSERVER 数据库、excel里面宏写的vba,数据库能单独进行数据库整合嘛、EXCEL从数据库提取数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9524679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存