ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:excel数据写入access

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-14 10:08 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请问如何把excel不重复的数据对应更新到access数据库
条件是工作表里面有空格
判断条件是:
1  ID号
2挂号
如果ID号为空就只判断挂号
如果不重复就追加数据
如果挂号重复就覆盖原来的数据
注:实际数据可能不止这么一点,但是数据库的字段和工作表的字段始终是一致的

数据.zip (52.55 KB, 下载次数: 34)

TA的精华主题

TA的得分主题

发表于 2015-1-14 11:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请参考:
  1. Sub updateaddRecordyyy() '更新数据库已经存在记录,插入不存在记录
  2.     Dim cnn As New ADODB.Connection
  3.     Dim rst As New ADODB.Recordset
  4.     Dim myPath As String
  5.     Dim myTable As String
  6.     Dim strTemp As String
  7.     Dim SQL As String
  8.     Dim strMsg As String
  9.     Dim s As String
  10.     Dim aField As Variant
  11.     myPath = ThisWorkbook.Path & "\记录.mdb"
  12.     myTable = "收入记录"
  13.     On Error GoTo ErrMsg
  14.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath '连接数据库

  15. '    生成更新SQL语句
  16.     SQL = "SELECT B.ID号,B.挂号 FROM " & myTable & " A,[Excel 8.0;Database=" & ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _
  17.         & Range("A1").CurrentRegion.Address(0, 0) & "] B WHERE A.ID号=B.ID号 AND A.挂号=B.挂号"
  18.     Set rst = New ADODB.Recordset
  19.     rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
  20.     If rst.RecordCount > 0 Then
  21.         aField = Range("A1:N1") '工作表中的字段名写入数组
  22.     '    生成更新字符串,如:a.科室名称=b.科室名称,a.西药费=b.西药费,……
  23.         For i = 2 To UBound(aField, 2)
  24.             If i <> 4 Then strTemp = strTemp & ",a." & aField(1, i) & "=b." & aField(1, i)
  25.             s = s & ",A." & aField(1, i)
  26.         Next
  27.         SQL = "UPDATE " & myTable & " A,[Excel 8.0;Database=" & ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _
  28.             & Range("A1").CurrentRegion.Address(0, 0) & "] B SET " & Mid(strTemp, 2) & " WHERE A.ID号=B.ID号 AND A.挂号=B.挂号"
  29.         cnn.Execute SQL
  30.         strMsg = rst.RecordCount & "条记录已更新!"
  31.     End If
  32.     If rst.RecordCount < Range("A" & Rows.Count).End(xlUp).Row - 1 Then
  33.     '    生成数据库不存在记录的SQL语句
  34.         SQL = " SELECT " & Mid(s, 2) & " FROM [Excel 8.0;Database=" & ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" & Range("A1").CurrentRegion.Address(0, 0) _
  35.             & "] A LEFT JOIN " & myTable & " B ON A.ID号=B.ID号 AND A.挂号=B.挂号 WHERE B.ID号 IS NULL"
  36.         Set rst = New ADODB.Recordset
  37.         rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
  38.    
  39.         '插入数据库不存在记录
  40.         If rst.RecordCount > 0 Then '如果工作表中含有数据库不存在记录
  41.             SQL = "INSERT INTO " & myTable & SQL
  42.             cnn.Execute SQL
  43.             strMsg = strMsg & vbCrLf & rst.RecordCount & "条记录已添加到数据库!"
  44.         End If
  45.     End If
  46.     MsgBox strMsg, vbInformation, "提示"

  47. '    关闭连接释放内存
  48.     rst.Close
  49.     cnn.Close
  50.     Set rst = Nothing
  51.     Set cnn = Nothing
  52.     Exit Sub
  53. ErrMsg:
  54.     MsgBox Err.Description, , "错误报告"
  55. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-14 11:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以ID号、挂号为判断条件,挂号有重复,不能单独作为判断条件
请测试附件
新建文件夹.rar (55.14 KB, 下载次数: 129)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-14 12:34 | 显示全部楼层
zhaogang1960 发表于 2015-1-14 11:48
以ID号、挂号为判断条件,挂号有重复,不能单独作为判断条件
请测试附件

谢谢老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-14 12:45 | 显示全部楼层
zhaogang1960 发表于 2015-1-14 11:48
以ID号、挂号为判断条件,挂号有重复,不能单独作为判断条件
请测试附件

就是这种效果
再次麻烦老师,可否把aField = Range("A1:N1"),把N1用个变量,不管字段多少都可以用
因为在实际中还要其他表的数据和这个表的数据不一样
谢谢!

TA的精华主题

TA的得分主题

发表于 2015-1-14 12:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
linyh1742595842 发表于 2015-1-14 12:45
就是这种效果
再次麻烦老师,可否把aField = Range("A1:N1"),把N1用个变量,不管字段多少都可以用
因为 ...
  1. aField = Intersect(Range("A1").CurrentRegion, Rows(1)) '工作表中的字段名写入数组
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-14 13:18 | 显示全部楼层
zhaogang1960 发表于 2015-1-14 12:53

嗯 好的
测试看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-14 17:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2015-1-14 12:53

老师您好!
经过测试 挂号有重复的
我的意思是挂号是一样的就覆盖原来的数据
在数据库里面如果挂号没有重复就追加

TA的精华主题

TA的得分主题

发表于 2015-1-14 18:22 | 显示全部楼层
linyh1742595842 发表于 2015-1-14 17:41
老师您好!
经过测试 挂号有重复的
我的意思是挂号是一样的就覆盖原来的数据

数据库中挂号本来就有重复,如果已经存在,则会更新该挂号字段所有记录,如999出现了4次,这4条记录都会被更新
建议去掉ID号这个条件

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-14 18:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2015-1-14 18:22
数据库中挂号本来就有重复,如果已经存在,则会更新该挂号字段所有记录,如999出现了4次,这4条记录都会被 ...

嗯  好的 谢谢老师
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 23:44 , Processed in 0.045296 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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