ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]通用型ACCESS数据库内容查看,修改器

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-14 11:07 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他插件和工具

一般都这样,有同感,我也给公司写了一些程序(财务的、销售的,excel的,access的,还有两者混合的)。。。

一开始都不用,现在离也离不了了。。。

嘿,这世道就这样了。。。

TA的精华主题

TA的得分主题

发表于 2006-6-14 11:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢,学习了,收藏

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-14 19:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

if vba = "毒品" then

我们= "吸毒贩毒人员"

公司同事="道友"

end if

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-14 20:20 | 显示全部楼层
以下是引用[I]qee用[/I]在2006-6-10 13:21:18的发言:

嫌速度慢啊?我向来把速度慢看为享受的,只要在8小时之内完成,别让我陪着加班就行.
如果在读行的时候直接就写入记录集相应行(二者应相等的吧?),可以省掉find的时间,当然,小节上通过WITH的使用等也会省些时间.
如果还不够快,不防把数据库的更新和工作表的事件(change等)绑定,化整为零,这样的话,增加/删除/修改几个按钮好象也多余了.

"如果在读行的时候直接就写入记录集相应行(二者应相等的吧?),可以省掉find的时间 " 找不到好方法实现,以下是原文,逐行逐个写入 For a1 = 4 To [a65536].End(xlUp).Row mz = Cells(a1, 1) rs1.FindFirst "姓名='" & mz & "'" rs1.Edit For a = 2 To [iv3].End(xlToLeft).Column aaa = Cells(3, a) rs1.Fields(aaa) = Cells(a1, a) Next a rs1.Update Next a1 假设这样 A B C 3 姓名 固定电话 爱好 4 张三 123 北京 5 李四 456 上海 如何 不用第二个 for 直接整行写入到 rs1 这是第2个FOR rs1.Fields(aaa) = Cells(a1, a) 此时aaa= "固定电话", Cells(a1, a)的内容是修改后的内容 可直接写成: rs1.Fields("固定电话") = "123" 第二个FOR 再走一次,就是 rs1.Fields("爱好") = "北京" 我想达到这样的目的, rs1.Fields("固定电话","爱好") = "123","北京" 但这样写行不通,如何写请用兄教我
[此贴子已经被作者于2006-6-14 21:29:37编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-14 23:42 | 显示全部楼层
ADO批量更新ACCESS库: Sub ADO_UPDATE_ACCESS_Click() Dim endline%, line%, addr$, Sql$ Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & _ "\通讯录.mdb;Jet OLEDB:Database Password=123" endline = [a65536].End(xlUp).Row For line = 4 To endline conn.Execute ("delete from 档案1 where 姓名='" & Cells(line, "a") & "'") '先整条删除再整条插入比逐字段更新速度应快 Next addr = Range(Cells(3, "a"), Cells(endline, [iv3].End(xlToLeft).Column)).Address(0, 0) '得到数据区的地址 Sql = "INSERT INTO [档案1] SELECT * FROM [Excel 8.0;Database=" & ThisWorkbook.FullName & ";HDR=YES].[sheet1$" & addr & "];" conn.Execute Sql MsgBox "更新完毕" conn.Close Set conn = Nothing End Sub az3sPGN7.rar (22.17 KB, 下载次数: 289)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-15 13:09 | 显示全部楼层

爱歌学姐费心了![em23]

删除再加入的方法的确很快.

但这不是我要的结果,实际工作中有上百个字段,由不同的部门和系统分工修改

不可能把所有字段都列出,有些甚至是不许查看的.我试用update + 一维数组 方法,可行,

要改的字段也不用和数据库中的同顺序,但只认一维数组,也就是一次修改一个人,多人就要用到循环了.

如果找到 update + 二维数组 的方法就好了,可以一次修改多条记录.循环都省了

Sub shj()'此处以一条记录为例
t = Timer
Dim mz$
Dim cn As New ADODB.Connection
Dim rc As New ADODB.Recordset
cn.Open "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Sheets("b").[c13] & _
";Jet OLEDB:Database Password=" & Sheets("b").[c11]
mz = [a4]
rc.Open "select * from " & Sheets("b").[c12] & " where 姓名='" & mz & "'", _
cn, adOpenKeyset, adLockOptimistic
arb = Range("d3:e3")'qee用说过vba宽容地把只有一行的数认做是一维数组,在这就不行
arr = Range("d4:e4")
'数组转置
arb = Application.Transpose(arb)
arr = Application.Transpose(arr)
'再转置=没转置,但不这么来一下,UPDATE就不认
arb = Application.Transpose(arb)
arr = Application.Transpose(arr)
'arb = Array("爱好", "结交时间") '激活这两句,则不用转置
'arr = Array("qqrrq", 4) '说明update 认的是一维数组
rc.Update arb, arr
rc.Close
cn.Close
Set cn = Nothing
Set rc = Nothing
MsgBox "已存入数据库,用时 " & Timer - t & "秒"

End Sub


爱歌学姐[em17]功力比我深,希望能找到方法.

TA的精华主题

TA的得分主题

发表于 2006-6-15 13:26 | 显示全部楼层
以下是引用[I]ldy888[/I]在2006-6-15 13:09:27的发言:实际工作中有上百个字段,由不同的部门和系统分工修改

不可能把所有字段都列出,

所以我的方法是不用列字段的啊,而如果用update,还不光是列出字段的问题,你还要判断各字段的类型,这不仅更难做到,而且肯定慢啊........ 你的意思我还不是很明白,要求跟你文件中的又不一样了吗?你的原文件中好像只要求把那一块数据写进access啊.....

TA的精华主题

TA的得分主题

发表于 2006-6-15 13:39 | 显示全部楼层
哦,刚看到你的这个方法可以保证类型相同: rc.Update arb, arr 那你这个跟我的不同在哪里呢?目的不都是把一块数据写进ACC吗? 你的选区是用这种方式: arb = Range("d3:e3") arr = Range("d4:e4") 我的选区是用: addr=Range("d3:e4") 如果区域固定,直接写进insert语句就可以了 Sql = "INSERT INTO [档案1] SELECT * FROM [Excel 8.0;Database=" & ThisWorkbook.FullName & ";HDR=YES].[sheet1$d3:e4];" 所以还看不出两种方法的不同.......

TA的精华主题

TA的得分主题

发表于 2006-6-15 13:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
quote以下是引用[I]qee用[/I]在2006-6-10 13:21:18的发言:

嫌速度慢啊?我向来把速度慢看为享受的,只要在8小时之内完成,别让我陪着加班就行. ........... [/QUOTE] 呵呵,高科技,高智慧偷懒

TA的精华主题

TA的得分主题

发表于 2006-6-15 13:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

if vba = "毒品" then

我们= "吸毒贩毒人员"

公司同事="道友"

kill us.name

end if

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 23:49 , Processed in 0.048821 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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