ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] excel 工作环境下,将excel 批量导入到 sqlserver2000 的代码 使用insert

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-19 10:55 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求: excel 工作环境下,将excel 批量导入到 sqlserver2000 的代码 使用insert
跪求: excel 工作环境下,将excel 批量导入到 sqlserver2000 的代码 使用insert   
找遍了网上,找不到 ,因为使用是是excel VBA 做的客户端 ,所以只能求 在excel 工作环境下的 代码

TA的精华主题

TA的得分主题

发表于 2009-5-20 08:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我整理的读书笔记

1.记录导入:
1)  直接导入: “文件”菜单“获取外部数据”“导入”。
a) 以新建表的方式导入,用默认第一行标题为字段名。
b) 以追加方式把记录导入现有表:现有表中不能有自动编号字段,否则导不成功,如,把供应商.xls导入现有的罗斯福数据库中,可以先删除表中“供应商ID”这个自动编号的字段,在核对xls文件中字段与供应商表中字段要求一致后,就可以导入数据。导入成功后再在表中添加回来自动编号这个字段。  或者,把供应商.xls中,自动编号的字段保留空白,也可以导入成功。
2)  直接用sql语句导入: 建表并设置好字段属性,如空白的“供应商”表,准备把“供应商表格.xls”中“供应商”工作表中记录导入时,新建一个SQL查询语句,然后执行查询就可以追加记录到“供应商”表中:
INSERT INTO 供应商 SELECT * FROM [Excel 5.0;HDR=YES;DATABASE=F: \供应商表格.xls].供应商;
3)  用链接表: 当你只是要导入EXCEL数据到现有的“供应商”表中时,可以先链接供应商表格.xls文件(“文件”菜单“获取外部数据”“链接表”),然后直接用sql语句来做:
INSERT INTO 供应商 SELECT 公司名称 AS 公司名称, 联系人姓名 AS 联系人姓名, 联系人职务 AS 联系人职务, 地址 AS 地址, 城市 AS 城市 FROM 供应商表格;
a) 追加查询:链接Excel,设置追加条件,如,从“供应商表格”链接表中只把“供应商”表中没有的记录追加到“供应商”表中:
方法一:INSERT INTO 供应商 SELECT 公司名称 AS 公司名称, 联系人姓名 AS 联系人姓名, 联系人职务 AS 联系人职务, 地址 AS 地址, 城市 AS 城市, 地区 AS 地区, 邮政编码 AS 邮政编码, 国家 AS 国家, 电话 AS 电话, 传真 AS 传真, 主页 AS 主页 FROM 供应商表格 WHERE 公司名称 not in (select 公司名称 from  供应商);     此法“供应商”表或“供应商表格.xls”有自动编号也不会影响,追加的记录会依次排在原来记录后面。
方法二:INSERT INTO 供应商 SELECT 供应商表格.* FROM 供应商表格 LEFT JOIN 供应商 ON 供应商.公司名称=供应商表格.公司名称 WHERE (((供应商.公司名称) is null));   此法要注意自动编号,如果原来表中自动编号为为5的那条记录删掉了,而“供应商表格.xls”有自动编号为5的记录,那么会追加自动编号为5的那条记录,也就是覆盖的方法。
4) 复制粘帖:在EXCEL中复制一条或多条记录,在表中选中整条空白记录后粘帖。前提:字段一一对应。

[ 本帖最后由 .无忧. 于 2009-5-20 08:21 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-23 17:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
十分感谢,我马上进行了测试: 在excel VBA工作环境 下,录入如下VBA 代码:

Sub 批量更新中sqlserver() ' 批量更新sqlserver
Application.ScreenUpdating = False
    Dim sql$, countt%, i%
   
    Set conn = CreateObject("ADODB.Connection")         '(1)
      conn.Open "Provider=sqloledb;Server=tj2;Database=销售;User ID=sa;Password="
    conn.Execute ("delete from 数据库") '先整条删除再整条插入比逐字段更新速度应快(可以执行,服务器是通的)
   
    sql = "INSERT INTO 数据库 SELECT * FROM [Excel 5.0;HDR=YES;DATABASE=d:\数据库.xls].数据库"
    conn.Execute sql
    conn.Close '
    Set conn = Nothing                             '(6)
    Application.ScreenUpdating = True
End Sub

但显示 说  [Excel 5.0;HDR=YES;DATABASE=d:\数据库.xls].数据库 对象名不存在
请问:你给我的代码是 在excel 工作环境 下吗(  因为我是以excel 作为客户端 ,访问sqlserver服务),本机上没有sqlserver客户端 的
如果是,请帮我修改以上代码
再次万分感谢

TA的精华主题

TA的得分主题

发表于 2009-5-23 20:19 | 显示全部楼层
首先在excel中是需要路径的,你先查看一下你的exce;文件路径对不对。
另外{SELECT * FROM [Excel 5.0;HDR=YES;DATABASE=d:\数据库.xls].数据库}好像是需要先要设置一个参数才能用的。
推荐使用动态存储过程

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-25 17:10 | 显示全部楼层

请再示例

这个参数是什么,动态存储过程是什么,能以代码的形式示例吗,如果有一段完整的VBA 代码就好了
请教高手,我的邮箱:
tj103@tom.com
QQ:70167460
  手机:13319507378

TA的精华主题

TA的得分主题

发表于 2009-7-28 19:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-9-7 10:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-11 20:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有相应的实例吗?要是能举例说明就更好了。楼主的SELECT 语句在哪里执行呢?查询分析器还是企业管理器?

TA的精华主题

TA的得分主题

发表于 2013-5-13 07:56 | 显示全部楼层
Public Sub 实例()
    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
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:45 , Processed in 0.045596 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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