ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6778|回复: 10

[求助] 怎样用VBA将数据导入到SQL数据库

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-5 16:19 | 显示全部楼层 |阅读模式
求解怎样用VBA将EXCEl的数据导入到SQL数据库

TA的精华主题

TA的得分主题

发表于 2011-12-5 16:30 | 显示全部楼层
本帖最后由 lin_x 于 2011-12-5 16:34 编辑

要写代码的,而且如果数据库是在你们内部的服务器上,别人由于不能连你们内部的sql server 服务器,也帮不上忙,还是找个兼职帮你们弄吧,
或者,你服务器上应该有个叫studio mangement 的东东,用它也可以把excel 的数据导入sql server 数据库

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-5 16:35 | 显示全部楼层
lin_x 发表于 2011-12-5 16:30
要写代码的,而且如果数据库是在你们内部的服务器上,别人由于不能连你们内部的sql server 服务器,也帮不上 ...

恩,我知道要写代码,就是想知道怎么写的

TA的精华主题

TA的得分主题

发表于 2011-12-5 16:41 | 显示全部楼层
给个代码的例子:
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Long
    Dim mydata As String, myTable As String, SQL As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("sheet1")
    mydata = "工资管理"
    myTable = "基本信息"
    Set cnn = New ADODB.Connection
    With cnn
        .ConnectionString = "Provider=SQLOLEDB.1;" _
            & "User ID=sa;" _
            & "Data Source=THTFCOMPUTER;" _
            & "Initial Catalog=" & mydata
        .Open
    End With
    n = ws.Range("A65536").End(xlUp).Row
    For i = 2 To n
        SQL = "select * from " & myTable _
        & " where 职工编号='" & Trim(ws.Cells(i, 1).Value) & "'" _
        & " and 姓名='" & Trim(ws.Cells(i, 2).Value) & "'" _
        & " and 性别='" & Trim(ws.Cells(i, 3).Value) & "'" _
        & " and 所属部门='" & Trim(ws.Cells(i, 4).Value) & "'" _
        & " and 工资总额=" & Trim(ws.Cells(i, 5).Value) _
        & " and 备注='" & Trim(ws.Cells(i, 6).Value) & "'"
        Set rs = New ADODB.Recordset
        rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
        If rs.EOF And rs.BOF Then
            rs.AddNew
            For j = 1 To rs.Fields.Count
                rs.Fields(j - 1) = Trim(ws.Cells(i, j).Value)
            Next j
            rs.Update
        Else
            For j = 1 To rs.Fields.Count
                rs.Fields(j - 1) = Trim(ws.Cells(i, j).Value)
            Next j
            rs.Update
        End If
    Next i
    MsgBox "数据保存完毕!", vbInformation, "保存数据"
    rs.Close
    cnn.Close
    Set wb = Nothing
    Set ws = Nothing
    Set rs = Nothing
    Set cnn = Nothing

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-5 16:51 | 显示全部楼层
zez 发表于 2011-12-5 16:41
给个代码的例子:
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset

不能完全看懂,还要再研究下,多谢

TA的精华主题

TA的得分主题

发表于 2011-12-5 16:55 | 显示全部楼层
lz不是学编程的吧,如果工作上要用,还是建议找人做,毕竟不是自己的专业,会有点力不从心的,呵呵,一点小小的建议。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-5 17:01 | 显示全部楼层
lin_x 发表于 2011-12-5 16:55
lz不是学编程的吧,如果工作上要用,还是建议找人做,毕竟不是自己的专业,会有点力不从心的,呵呵,一点小 ...

恩,不是学编程的,有一点C语言基础,刚毕业没多久,想多学点东西的

TA的精华主题

TA的得分主题

发表于 2011-12-10 13:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
留下收藏,正在学习中…………

TA的精华主题

TA的得分主题

发表于 2011-12-11 09:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
顺带学习了下,不错

TA的精华主题

TA的得分主题

发表于 2013-7-20 20:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以实现先删除表中原有数据,已WID作为关键字,随后再插入数据。
下来要实现的就是可以在对话框中输入关键字,而不是要在代码中直接填写。因为每隔一段时间就要使用新的关键字了。还有就是数据库的用户名和密码也是要更换的。
  1. Sub qqqQQQ1()
  2.     Dim conn As New ADODB.Connection
  3.     Dim conn2
  4.     Dim rs As New ADODB.Recordset
  5.     Dim i%, strTemp$, RowNum%, K%
  6.     Dim wkSheet As Worksheet
  7.     If MsgBox("确认要导入数据吗?", vbYesNo) = 7 Then Exit Sub
  8.     '建立与SQL的连接
  9.    conn.Open "Driver={SQL Server};server=.;uid=sa;pwd=dz;database=mainlogsql_cq;"
  10.     Set wkSheet = Worksheets("sheet2")
  11.     '删除表中原有数据,已成功
  12.     strTemp = "DELETE FROM JP_JXSJB WHERE WID='H38'"
  13.     conn.Execute strTemp
  14.     RowNum = Range("c65536").End(xlUp).Row
  15.     On Error GoTo 9
  16.     conn.BeginTrans
  17.         K = 0
  18.         For i = 2 To RowNum
  19.             If wkSheet.Cells(i, 1).Value <> 0 Then
  20.                 '拼写INSERT语句的SQL语句
  21.                 strTemp = "insert into JP_JXSJB(WID,SKNO,RID,DATE,TIME,ACTC,JXLX,XH,DEPTH,XDD,XDF,FWD,FWF,VDEPTH,X,Y,ZWY,ZFW,QJBHL,CLSJ,BZ) "
  22.                 strTemp = strTemp & " values( '" & wkSheet.Cells(i, 1).Value & "'  ,  '" & _
  23.                                                     wkSheet.Cells(i, 2).Value & "'  ,  '" & _
  24.                                                     wkSheet.Cells(i, 3).Value & "'  ,  '" & _
  25.                                                     wkSheet.Cells(i, 4).Value & "'  ,  '" & _
  26.                                                     wkSheet.Cells(i, 5).Value & "'  ,  '" & _
  27.                                                     wkSheet.Cells(i, 6).Value & "'  ,  '" & _
  28.                                                     wkSheet.Cells(i, 7).Value & "'  ,  '" & _
  29.                                                     wkSheet.Cells(i, 8).Value & "'  ,  '" & _
  30.                                                     wkSheet.Cells(i, 9).Value & "'  ,  '" & _
  31.                                                     wkSheet.Cells(i, 10).Value & "'  ,  '" & _
  32.                                                     wkSheet.Cells(i, 11).Value & "'  ,  '" & _
  33.                                                     wkSheet.Cells(i, 12).Value & "'  ,  '" & _
  34.                                                     wkSheet.Cells(i, 13).Value & "'  ,  '" & _
  35.                                                     wkSheet.Cells(i, 14).Value & "'  ,  '" & _
  36.                                                     wkSheet.Cells(i, 15).Value & "'  ,  '" & _
  37.                                                     wkSheet.Cells(i, 16).Value & "'  ,  '" & _
  38.                                                     wkSheet.Cells(i, 17).Value & "'  ,  '" & _
  39.                                                     wkSheet.Cells(i, 18).Value & "'  ,  '" & _
  40.                                                     wkSheet.Cells(i, 19).Value & "'  ,  '" & _
  41.                                                     wkSheet.Cells(i, 20).Value & "'  ,  '" & _
  42.                                                     wkSheet.Cells(i, 21).Value & "')"
  43.                 '执行INSERT语句
  44.                 conn.Execute strTemp
  45.                 K = K + 1
  46.             End If
  47.         Next
  48.     conn.CommitTrans '结束插入操作的事务
  49.     ThisWorkbook.Save
  50.     '显示已经插入的记录条数
  51.     conn.Close '关闭链接
  52.     Set rs = Nothing '释放内存
  53.     Set conn = Nothing '释放内存
  54.    
  55.     Set wkSheet = Nothing
  56.     Application.ScreenUpdating = True
  57.    
  58.     MsgBox "导入完毕!" & Chr(10) & Chr(10) & "已经插入的条数:" & K
  59.     Exit Sub
  60. 9:
  61.     'Conn.RollbackTrans
  62.     MsgBox Err.Description & "第" & i & "行 导入出错"

  63. End Sub
复制代码
还是要谢谢各位的帮忙啊。对excel的控件还不是很熟悉,继续钻研中。因为不是学编程的,只能看懂,所以都是在前人的基础上直接修改代码。呵呵。希望大家不要吐槽
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-28 23:31 , Processed in 0.045781 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表