ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] excel数据导入SQL,编号单元格重复的则覆盖,不重复的则追加,如何实现?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-2 09:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码供参考!
  1. Sub UploadNoteExcelObject(mth As String, myPath As String, sRow As Integer)
  2.     '添加或更新Excel文件导入记录
  3.     Dim OpenWorkbook As New Excel.workbook, sql$, i%, dbs As Database, UploadPerson$      '定义变量
  4.     Dim StoreNumber$, Times$, StoreBrand$, FinMonth%, FinYear%, Update#, State$, ReportKind$
  5.     On Error Resume Next        '容错代码
  6.     Set OpenWorkbook = GetObject(myPath)        '打开Excel文件
  7.     With OpenWorkbook.Sheets("Help")            '简化代码
  8.         StoreNumber = .Range("b4")              '从Help工作表中B4单元格获取门店编号
  9.         StoreBrand = .Range("f4")              '从Help工作表中f4单元格获取门店品牌
  10.         FinMonth = .Range("j4")              '从Help工作表中j4单元格获取导入月份
  11.         FinYear = .Range("e2")              '从Help工作表中e2单元格获取导入年份
  12.         ReportKind = .Range("e4")              '从Help工作表中e4单元格获取报表性质
  13.         Update = Date                   '添加或更新记录日期
  14.         UploadPerson = Environ("UserName")          '添加或更新或上传记录人
  15.     End With
  16.     OpenWorkbook.Close              '关闭Excel文件
  17.     State = DLookup("State", "tblUploadNote", "StoreNumber='" & StoreNumber & "' And StoreBrand='" & StoreBrand _
  18.                     & "' And ReportKind='" & ReportKind & "' And FinYear=" & FinYear & " And FinMonth=" & FinMonth)
  19.                     '根据从Excel文件中获取的信息,查询出Access文件tblUploadNote的门店审核状态
  20.     If State = "已审核" Then
  21.         MsgBox StoreNumber & Chr(10) & "报表已审核,数据将被忽略!"        '提示用户报表审核状态
  22.         Exit Sub       '判断状态是否已审核,是则退出程序
  23.     End If
  24.     Set dbs = CurrentDb             '为变量赋值
  25.     If Len(State) > 0 Then          '判断门店是否有导入过,是则更新记录,否则新增记录
  26.         i = DLookup("Times", "tblUploadNote", "StoreNumber='" & StoreNumber & "' and FinYear=" & FinYear & " And FinMonth=" & FinMonth _
  27.                     & " And ReportKind='" & ReportKind & "' And StoreBrand='" & StoreBrand & "'") + 1
  28.                     '获得最新的导入次数
  29.         sql = "Update tblUploadNote Set [Update]=" & Update & ",Times=" & i & ",UploadPerson='" & UploadPerson & "' Where StoreNumber='" & StoreNumber & "' And FinYear=" _
  30.                 & FinYear & " and FinMonth=" & FinMonth & " and ReportKind='" & ReportKind & "' And StoreBrand='" & StoreBrand & "'"
  31.                     '更新导入日期与导入次数
  32.     Else
  33.         sql = "Insert into tblUploadNote(StoreNumber,StoreBrand,ReportKind,FinYear,FinMonth,[Update],Times,UploadPerson)  Values('" _
  34.                 & StoreNumber & "','" & StoreBrand & "','" & ReportKind & "'," & FinYear & "," & FinMonth & "," & Update & "," & 1 & ",'" & UploadPerson & "')"
  35.                 '新增记录
  36.     End If
  37.     DoCmd.RunSQL sql    '执行sql语句,将Excel文件数据更新或新增到Access的tblUploadNote表中
  38.     Set OpenWorkbook = Nothing     '适放对象
  39.     Set dbs = Nothing     '适放对象
  40.     Call UploadBSAndPL(myPath)      '调用UploadBSAndPL程序
  41.     Call UploadCF(mth, myPath)      '调用UploadCF程序
  42.     Call UpdateBSAndPL(mth, sRow)      '调用UpdateBSAndPL程序
  43. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-2 09:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能否提供附件供我学习,非常感谢!

TA的精华主题

TA的得分主题

发表于 2011-8-2 09:43 | 显示全部楼层

回复 12楼 2217918 的帖子

我的附件太大不好上传,把你的附件传上来吧,我在你的基础上改

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-2 09:49 | 显示全部楼层
好的,非常感谢,我已经上传附件了

1.rar

33.72 KB, 下载次数: 44

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-2 09:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-2 13:35 | 显示全部楼层
  1. Sub Test()
  2.     Dim conn, rst, sql$, i As Single
  3.     Set conn = CreateObject("ADODB.Connection")
  4.     Set rst = CreateObject("ADODB.Recordset"): i = 2
  5.     On Error Resume Next
  6.     conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & ThisWorkbook.Path & "\Test.mdb"
  7.     While Cells(i, 3) <> ""
  8.         sql = "Select 编号 From tblTest" & " Where 编号=" & Cells(i, 2)
  9.         Set rst = conn.Execute(sql)
  10.         sql = "Update tblTest Set 路数=" & Cells(i, "j") & " Where 编号=" & Cells(i, 2)
  11.         conn.Execute (sql)
  12.         If rst.EOF Then
  13.             Err.Clear
  14.             sql = "Insert into tblTest( 编号,路数) Values(" & Cells(i, 2) & "," & Cells(i, "j") & ")"
  15.             conn.Execute (sql)
  16.         End If
  17.         i = i + 1
  18.     Wend
  19.     conn.Close
  20.     Set conn = Nothing
  21.     Set rst = Nothing
  22. End Sub
复制代码
1.rar (60.44 KB, 下载次数: 115)

代码供参考!

TA的精华主题

TA的得分主题

发表于 2011-8-4 00:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
简单的处理下?如果你的数据不会变更的话
在M列加入标识,已录入

...........................
If wkSheet.Cells(i, 2).Value <> 0 Then
        if  wkSheet.Cells(i, "M").Value <>"已录入" then
                          wkSheet.Cells(i, "M").Value ="已录入"
                      后面的基本不用改,直接加入end if 就行了
              
                '拼写INSERT语句的SQL语句
                strTemp = "insert into 物资信息 (编号,材质楞型,楞别,班组,类别,长度,宽度,门幅,路数,订单数,入库数) "

TA的精华主题

TA的得分主题

发表于 2011-8-4 01:01 | 显示全部楼层
如下会有结果吧
如果数据都已录入数据库了还要保存文件干吗?用时提取出来就是了


Sub qqq1()
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim i%, strTemp$, RowNum%, K%
    Dim wkSheet As Worksheet
    If MsgBox("确认要导入数据吗?", vbYesNo) = 7 Then Exit Sub
    '建立与SQL的连接
   conn.Open "Driver={SQL Server};server=192.168.107.111;uid=sa;pwd=sa;database=JSSY;"
    Application.ScreenUpdating = False
    Set wkSheet = Worksheets("原始数据")
   
    On Error GoTo 9
    conn.BeginTrans
        K = 0
        With wkSheet
        RowNum = .Range("c65536").End(xlUp).Row
        For i = 2 To RowNum
            If .Cells(i, 2).Value <> 0 Then
                If .Cells(i, "M").Value <> "已录入" Then
                    Dim SQL$
                    SQL = "select 编号 from 物资信息 where 编号 ='" & .Cells(i, 2).Value & "'"
                    Set rs = Nothing
'这里要加一句


          rs.open sql,conn,1,1,1




                    If rs.RecordCount > 1 Then '存在旧的号的话就删除
                        conn.Execute "delete 物资信息 where 编号 ='" & .Cells(i, 2).Value & "'"
                    End If
                    
                    '拼写INSERT语句的SQL语句
                    strTemp = "insert into 物资信息 (编号,材质楞型,楞别,班组,类别,长度,宽度,门幅,路数,订单数,入库数) "
                    strTemp = strTemp & " values( '" & .Cells(i, 2).Value & "'  ,  '" & _
                                                       .Cells(i, 3).Value & "'  ,  '" & _
                                                       .Cells(i, 4).Value & "'  ,  '" & _
                                                       .Cells(i, 5).Value & "'  ,  '" & _
                                                       .Cells(i, 6).Value & "'  ,  '" & _
                                                       .Cells(i, 7).Value & "'  ,  '" & _
                                                       .Cells(i, 8).Value & "'  ,  '" & _
                                                       .Cells(i, 9).Value & "'  ,  '" & _
                                                       .Cells(i, 10).Value & "'  ,  '" & _
                                                       .Cells(i, 11).Value & "'  ,  '" & _
                                                       .Cells(i, 12).Value & "')"
                    '执行INSERT语句
                    conn.Execute strTemp
                    K = K + 1
                   .Cells(i, "M").Value = "已录入"          '防止重复比较加快录入速度
                End If
            End If
        Next
        End With
    conn.CommitTrans        '结束插入操作的事务
    On Error GoTo 0
    ThisWorkbook.Save
    '显示已经插入的记录条数
    conn.Close              '关闭链接
    Set rs = Nothing        '释放内存
    Set conn = Nothing      '释放内存
   
    Set wkSheet = Nothing
    Application.ScreenUpdating = True
   
    MsgBox "导入完毕!" & Chr(10) & Chr(10) & "已经插入的条数:" & K
    Exit Sub
9:
    conn.RollbackTrans
    MsgBox Err.Description & "第" & i & "行 导入出错"

End Sub

[ 本帖最后由 sunsoncheng 于 2011-8-4 08:11 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-4 08:05 | 显示全部楼层
出现以下错误,请帮忙看看。
无标题.png

TA的精华主题

TA的得分主题

发表于 2011-8-4 08:13 | 显示全部楼层
'这里要加一句
    rs.open sql,conn,1,1,1

头晕了,应是加一句的:)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 16:47 , Processed in 0.046522 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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