EXCEL使用VBA宏生成SQL语句

合集下载

Excel如何用VBA批量添加及更新SQL数据库中的数据

Excel如何用VBA批量添加及更新SQL数据库中的数据

Excel如何用VBA批量添加及更新SQL数据库中的数据
各位高手朋友,谁知道怎么在excel中,用VBA实现将excel工作表的数据,批量添加/修改到SQL数据库中去,数据库是SQL2008,excel是2007版。

假如,excel中得数据表名称为“sheet1”,有3列数据:学号、姓名、专业。

其中,学号是唯一的,不重复。

SQL数据库名字为:mydata,表名为:mytable。

mytable中存有的数据与上述sheet1中的格式相同。

现在需要实现下述功能:
将sheet1中的数据更新至mytable中,如果经过判断,mytable 中存在相同学号,则进行覆盖修改(对于同一个学号,sheet1中的其它信息可能跟SQL中不同,所以需要覆盖更新);如果经过判断,mytable中没有相同学号,则在SQL中新增记录。

请高手帮忙,非常感谢。

ExcelVBAADOSQL实例集锦

ExcelVBAADOSQL实例集锦

ExcelVBAADOSQL实例集锦1, 包含空值的记录f13 is null‘‘订单生成系统.xls‘f6-第6列,f2-第2列Private Sub Worksheet_Activate()On Error Resume NextDim x As Object, yy As Object, sql As StringSet x = CreateObject("ADODB.Connection")x.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no;';Data Source=" & ActiveWorkbook.FullNamesql = "select f6,f2,f3,f4,f5,f7,f13,f24 -f25 from [sheet1$] where f24 -f25<="" and="" bdsfid="72">'C3' or f13 is null)" ‘不等于字符串用‘C3’包含空值用is nullSet yy = x.Execute(sql)Range("a:h").ClearContentsRange("a1:h1") = Array("编号", "品名", "规格", "产地", "单位", "件装", "属性", "计划") ‘表头另外赋值[a2].CopyFromRecordset yySet yy = NothingSet x = NothingEnd Sub2,用ADO Connection对象查询Option ExplicitPublic conn As ADODB.ConnectionSub Myquery()Dim sConnect$, sql1$Set conn = CreateObject("adodb.connection")Sheets("sheet1").Cells.ClearContentssConnect = "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;" & _"Data Source=" & ThisWorkbook.Path & "\" & /doc/0317259515.html, sql1 = "select 物料代码,物料描述,属性,单位from [物料代码表$] where 属性= '采购' " '表格名要用[$],条件部分用单引号''ThisWorkbook.Sheets("sheet1").Cells(2,1).CopyFromRecordset conn.Execute(sql1) 'copy 后面紧接SQL查询执行语句With Sheets("sheet1").Range("A1") = "物料代码" '建立表头.Range("B1") = "物料描述".Range("C1") = "属性".Range("D1") = "单位"End With'conn.Close '可不用每次关闭数据源的连接End Sub3,用记录集执行单个查询Option ExplicitSub Myquery()Dim rd As ADODB.RecordsetDim i%, j%, k%, sConnect$, sql1$, str$Set rd = New ADODB.Recordsetstr = "外协"Sheets("sheet1").Cells.ClearContentssConnect = "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;" & _"Data Source=" & ThisWorkbook.Path & "\" & /doc/0317259515.html,'conn.Open sConnect '打开数据源sql1 = "select 物料代码,物料描述,属性,单位from [物料代码表$] where 属性= '采购' " '表格名要用[$],条件部分用单引号'' rd.Open sql1, sConnect, adOpenForwardOnly, adLockReadOnlyThisWorkbook.Sheets("sheet1").Cells(2,1).CopyFromRecordset rdWith Sheets("sheet1").Range("A1") = "物料代码" '建立表头.Range("B1") = "物料描述".Range("C1") = "属性".Range("D1") = "单位"End Withrd.Close '关闭记录集Set rd=Nothing '关闭End Sub4,引用一列,如A列‘引用单列、单行、单个单元格.xls'引用一列,如A列Sub onecolumn()Dim Sql$Set Conn = CreateObject("Adodb.Connection")Conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no';data source=" & ThisWorkbook.Path & "\1.xls"Sql = "select f1 from [sheet1$]"Cells.Clear[a1].CopyFromRecordset Conn.Execute(Sql)Conn.CloseSet Conn = NothingEnd SubSub dgzbhz()'2008/12/2‘‘Book12021.xls‘由于分表的第2列表头是“金额”,不用它,改为“一中”,所以要用hdr=no无标题,拷贝时把第一行表头归零,所以最后要加表头。

excel vba sql语句示例

excel vba sql语句示例

excel vba sql语句示例Excel VBA中SQL语句示例-以中括号为主题在Excel VBA中,SQL(Structured Query Language)是一种用于管理关系数据库的语言。

它允许用户从数据库中检索数据,更新和删除数据,并与数据库进行交互。

中括号[]在SQL语句中用于标识数据表或字段名称。

本文将介绍几个常用的Excel VBA中使用SQL语句并涉及中括号的示例。

1.查询数据表中所有字段使用SELECT语句可以从数据表中选择一条或多条记录。

要选择所有字段,可以使用“*”或字段列表。

使用“*”选取所有字段非常方便,但不建议在大型数据表中使用。

以下是一个示例,它使用“*”选取数据表中的所有字段。

Sub SelectAllFields()'Define variablesDim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim strQuery As String'Open connection to the databaseSet cn = New ADODB.Connectioncn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Documents\Database.accdb;Persist Security Info=False;"cn.Open'Create SQL query to select all fields from the data tablestrQuery = "SELECT * FROM [Data Table]"'Execute the query and store the result in a recordsetSet rs = cn.Execute(strQuery)'Close the database connectioncn.CloseSet cn = NothingEnd Sub2.根据条件查询数据表中的记录使用WHERE子句可以根据指定的条件从数据表中检索一条或多条记录。

excel文件转成sql的函数

excel文件转成sql的函数

excel文件转成sql的函数在Excel中,可以通过编写VBA宏来将数据转换为SQL语句。

下面是一个示例函数,它可以读取Excel文件中的数据并生成相应的INSERT语句。

```Sub ConvertExcelToSQL()Dim conn As ObjectDim rs As ObjectDim sConnString As StringDim strSQL As StringDim i As Integer, j As IntegerDim sSheet As StringDim sDataRange As StringDim sTableName As String' 设置连接字符串(这里使用的是Microsoft OLE DB Provider for SQL Server)sConnString = "Provider=SQLOLEDB;DataSource=ServerName;Initial Catalog=DatabaseName;UserID=UserName;Password=Password;"' 设置要读取数据的工作表名称、数据范围和目标表名称sSheet = "Sheet1"sDataRange = "A1:C10"sTableName = "TableName"' 创建连接对象和记录集对象Set conn = CreateObject("ADODB.Connection")Set rs = CreateObject("ADODB.Recordset")' 打开连接conn.Open sConnString' 选择要操作的工作表strSQL = "SELECT * FROM [" & sSheet & "$" & sDataRange & "]"' 执行查询语句rs.Open strSQL, conn' 生成INSERT语句strSQL = "INSERT INTO " & sTableName & " VALUES "' 遍历查询结果,生成INSERT语句的值部分While Not rs.EOFstrSQL = strSQL & "("For j = 0 To rs.Fields.Count - 1strSQL = strSQL & "'" & rs.Fields(j).Value & "',"Next j' 删除最后一个逗号strSQL = Left(strSQL, Len(strSQL) - 1) & "),"rs.MoveNextWend' 删除最后一个逗号strSQL = Left(strSQL, Len(strSQL) - 1)' 执行插入语句conn.Execute strSQL' 关闭连接和记录集rs.Closeconn.CloseSet rs = NothingSet conn = NothingEnd Sub```要使用这个函数,可以在Excel中按下`Alt + F11`打开VBA编辑器,然后选择`插入`菜单中的`模块`,将上述代码粘贴到模块中。

VBA与SQL语句的结合与应用实例

VBA与SQL语句的结合与应用实例

VBA与SQL语句的结合与应用实例在现代信息化时代,数据处理已经成为各个行业中不可或缺的一环。

在处理大量数据时,使用Excel和SQL数据库是非常常见的选择。

而结合VBA(Visual Basic for Applications)和SQL语句,可以将两者的优势发挥到极致,提高数据处理的效率和准确性。

本文将通过一些实例来展示VBA与SQL语句的结合与应用。

案例一:数据导入与清洗假设我们有一个存储了客户订单的Excel表格,我们需要将其中的数据导入到SQL数据库中进行进一步处理。

这时,我们可以使用VBA编写一个宏来实现自动将Excel中的数据导入到数据库表中。

首先,我们需要在Excel中添加一个按钮,通过宏来触发数据导入的操作。

然后,我们可以使用VBA代码来连接到数据库,并执行相应的SQL语句将数据导入。

示例代码如下:```vbaSub ImportDataToSQL()Dim conn As ObjectDim rs As ObjectDim strSQL As StringDim rng As RangeDim cell As RangeSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = "Provider=<provider>; Data Source=<data_source>; Initial Catalog=<catalog>; User ID=<user_id>; Password=<password>"conn.OpenSet rng = ThisWorkbook.Sheets("Sheet1").Range("A2:D10") ' 假设数据范围为A2:D10strSQL = "INSERT INTO TableName (Column1, Column2, Column3, Column4) VALUES (?,?,?,?)"For Each cell In rngSet rs = CreateObject("ADODB.Recordset")rs.Open strSQL, connrs.AddNewrs.Fields("Column1").Value = cell.Offset(0, 0).Valuers.Fields("Column2").Value = cell.Offset(0, 1).Valuers.Fields("Column3").Value = cell.Offset(0, 2).Valuers.Fields("Column4").Value = cell.Offset(0, 3).Valuers.Updaters.CloseSet rs = NothingNext cellconn.CloseSet conn = NothingEnd Sub```在上述示例代码中,我们需要替换掉连接字符串中的`<provider>`、`<data_source>`、`<catalog>`、`<user_id>`和`<password>`,以便正确连接到目标数据库。

ExcelVBA导入Excel中数据到SQLServer中

ExcelVBA导入Excel中数据到SQLServer中

[方法一]如何把EXC‎EL中的数据‎导入SQL SERVER‎数据库中(2010-12-30 17:16:53)有时候需要把‎E XCEL中‎的数据导入到‎数据库中。

一条一条的在‎数据库中建数‎据显然不可取‎,如何找一条快‎捷的途径进行‎转换是很有必‎要的。

在这里主要是‎介绍一种在E‎X CEL中用‎V BA进行编‎程,把EXCEL‎的数据转换成‎S QL语句,存入到一个文‎件中,然后在数据库‎服务器上提交‎这些SQL语‎句来实现。

一、两边的数据格‎式(一)数据库的表结‎构生成数据库表‎的SQL语句‎如下:create‎table Addres‎s(ID Intege‎r identi‎t y(1,1) not null primar‎y key,Name varcha‎r(20) not null,Dept varcha‎r(50),Spell varcha‎r(20),Mobile‎ varcha‎r(11),Tel varcha‎r(20),EMail varcha‎r(30),VOIP varcha‎r(6),Remark‎ varcha‎r(200),);EXCEL中‎的数据格式(二)转换的VBA‎函数Sub Genera‎t eSQL()Dim i, k As LongDim s As String‎Open "d:\txl.sql" For Output‎As #1 '打开一个文件‎以供输入SQ‎L语句i = 2While Cells(i, 1) <> ""s = "INSERT‎INTO ADDRES‎S (Name,Dept,Mobile‎,Tel,VOIP,EMail) VALUES‎("For k = 1 To 5s = s & "'" & Cells(i, k) & "',"Nexts = s & "'" & Cells(i, 6) & "');"Print #1, s '输出一条语句‎至文件i = i + 1WendClose #1 '关闭文件End Sub以上的代码用‎于逐行把数据‎转换成SQL‎语句写入“d:\txl.sql”中。

把excel数据生成sqlinsert语句(原)

把excel数据生成sqlinsert语句(原)

把excel数据生成sqlinsert语句(原)
实际应用中,我们经常需要把Excel中的数据导入MS SQL Server 或MySQL Oracle等数据库中。

这些数据库都提供了很好的工具供用户直接将Excel中的数据导入数据库中。

但是很多时候我们并不能直接操作数据库管理器(因为安全需要会配置防火墙拦截数据库端口),我们只能通过web页面对数据库进行远程操作。

这个时候,将Excel中的数据转换成sql Insert语句就非常有必要了。

例子:
excel表格中有A、B、C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age 。

在你的excel表格中增加一列,利用excel的公式自动生成sql语句,方法如下:
1、增加一列(D列)
2、在第一行的D列,就是D1中输入公式:=CONCATENATE("insert into users (name,sex,age) values ('",A1,"','",B1,"','",C1,"');")
3、此时D1已经生成了如下的sql语句:insert into users (name,sex,age) values ('ls','女','24');
4、将D1的公式复制到所有行的D列
5、此时D列已经生成了所有的sql语句
6、把D列复制到一个纯文本文件中。

注意:生成的insert语句中有一个特殊字符"?",需要转换成空格。

推荐使用UltraEdit进行处理。

通过Excel生成批量SQL语句(Excel快速生成SQL更新语句)

通过Excel生成批量SQL语句(Excel快速生成SQL更新语句)

通过Excel⽣成批量SQL语句(Excel快速⽣成SQL更新语句)们经常会遇到这样的要求:⽤户给发过来⼀些数据,要我们直接给存放到数据库⾥⾯,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL⾥⾯⽤Insert into来实现,但是如果有⼏⼗条⼏百条甚⾄上千条数据的时候继续写单独的SQL语句的话那就惨了,其实有两种简单的⽅法;第⼀,将Excel数据整理好了之后,通过SQL的导⼊功能直接导进数据库,但是得保证数据库字段和Excel的字段⼀致。

第⼆,通过Excel来⽣成对应的SQL语句,直接将SQL语句复制到分析器⾥⾯执⾏即可,本⽂就说⼀下如何来实现这第⼆种办法。

⾸先看下图,我们的⽬的就是将这20条数据Insert到数据库⾥⾯去,⼀条两条的话可以⾃⼰写Insert语句,这⾥有20条数据,总不能完全⼿写20条语句出来吧,很显然,不能⼀条⼀条的去写SQL了,太多了,这⾥还只有20条,如果是200条,2000条数据呢?INSERT INTO TableName(Column1,Column2,Column3) VALUES('Value1','Value2','Value3')写出⼀条语句之后,直接从头拉到尾,你会发现所有的数据都有对应的脚本了,这个时候你便可以直接复制到分析器,按⼀下"F5",OK,你的任务完成了。

因为在公式⾥⾯,所以有时候那些语句会变化,当你⽣成这些语句之后,你可以选择性的粘贴为数值,然后再放到SQL⾥⾯去执⾏,如下:好了,以上是我的⼀点⼉⼩经验,希望对⼤家有⽤,只有互相分享才能得到提⾼,如果您觉得还⾏的话请帮忙顶⼀下,谢谢!下⾯补充是启源分享的Excel快速⽣成SQL更新语句供应商调整了产品信息,我们的业务系统需要进⾏同步。

运维部同事已经把产品新的产品信息发过来。

如图:虽然后台可以调整参数,但是竟然有⼏百个产品都更新了,作为程序员的我们当然不会傻傻的去挨个调整,使⽤SQL语句⼏分钟就搞定,⽽且还不出错。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

有时候需要将Excel文件中的数据导入到数据库中,常用的做法是使用程序读取Excel,然后存入数据库;这里换一个方法,用Excel生成SQL语句,然后用这些SQL语句来更新数据库。

本文主要说明Excel如何使用VB宏构造需要的SQL语句,并生成文件。

2、如何添加按钮:
依次打开:视图–工具栏–控件工具箱,选择“命令按钮”,自己画一个就行了;
依次打开:右键–属性,可以修改名称、样式等。

具体操作可以上网找找。

3、如何使用VB宏:
依次打开:工具–宏–安全性,看看你的Excel是否允许使用“宏”。

然后打开:工具–宏–Visual Basic编辑器,双击左侧的“Sheet1”,然后在右侧的代码区域粘贴如下代码:
'最大行数
Const MAX_NUM_ROW=5000
'导出文件路径所在单元格
Const PATH_OUTPUT_ROW=3
Const PATH_OUTPUT_COL=3
'定义列常量
Const NAME_COL=1
Const GENDER_COL=2
Const PHONE_COL=3
Const EMAIL_COL=4
'读取数据开始行数
Const START_ROW=5
'定义数据实体类
Private Type Tmplt
NAME As String
GENDER As String
PHONE As String
EMAIL As String
End Type
'行数变量
Dim noOfTmplts As Integer
'数据实体类数组
Dim TmpltArray(MAX_NUM_ROW)As Tmplt
'点击按钮触发事件
Private Sub CommandButton1_Click()
generateSQL
End Sub
'生成SQL
Private Sub generateSQL()
makedir
initData
writeToFile
End Sub
'构建文件输出路径
Private Sub makedir()
On Error Resume Next
MkDir Sheet1.Cells(PATH_OUTPUT_ROW,PATH_OUTPUT_COL)
End Sub
'读取Excel数据,填充实体类数组
Private Sub initData()
Erase TmpltArray
noOfTmplts=0
Dim j As Integer
'循环读取Excel数据行
For j=START_ROW To MAX_NUM_ROW
TmpltArray(noOfTmplts).NAME=Sheet1.Cells(j,NAME_COL) TmpltArray(noOfTmplts).GENDER=Sheet1.Cells(j,GENDER_COL) TmpltArray(noOfTmplts).PHONE=Sheet1.Cells(j,PHONE_COL) TmpltArray(noOfTmplts).EMAIL=Sheet1.Cells(j,EMAIL_COL) noOfTmplts=noOfTmplts+1
Next
End Sub
'读取实体类数组,生成SQL并写入文件
Private Sub writeToFile()
Dim lvOutputPath As String
'输出文件路径
lvOutputPath=Sheet1.Cells(PATH_OUTPUT_ROW,PATH_OUTPUT_COL) If lvOutputPath=""Then
MsgBox"没有找到输出文件路径!"
Exit Sub
End If
fileNum=FreeFile
'打开输出文件
Open lvOutputPath For Output As fileNum
Dim lvUserSql As String
Dim nameStr As String
Dim genderStr As String
Dim phoneStr As String
Dim emailStr As String
'循环生成SQL
For j=0To noOfTmplts-1
nameStr=TmpltArray(j).NAME
genderStr=TmpltArray(j).GENDER
phoneStr=TmpltArray(j).PHONE
emailStr=TmpltArray(j).EMAIL
If nameStr<>""Then
lvUserSql="Insert into Students(name,gender,phone,email)values('"&nameStr&"','"& genderStr&"','"&phoneStr&"','"&emailStr&"');"
Print#fileNum,lvUserSql
End If
Next
Close fileNum
MsgBox"文件生成完成!"
Exit Sub
Err_Open_File:
Close lvFileNum
If Err.Number=76Then
'路径未找到
MsgBox Err.Description
Exit Sub
Else
MsgBox Err.Description
Exit Sub
End If
End Sub
OK,这样就可以了!点击你的按钮,看看生成文件了吗?
如果按钮还是编辑状态,关了再打开就行了。

相关文档
最新文档