ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创]使用ADO的例子(VBS与VBA)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-11-23 19:36 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

利用VBA与ADO从数据库中读出文本到当前文档

数据库中的表名为“美文与素材”字段有“题目”与“内容”、“属性”、“作者”等
注意,以下代码仅仅只是说明ADO功能的例子。
-----------------------------------
Sub OpenASC()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql
Dim i
Dim outstr
Dim xiaoxi
xiaoxi = InputBox("您要在Word文章中插入哪个字段的消息?" & Chr(13) & "字段有ID、作者、具体内容三个。")
sql = "select * from 美文与素材"
conn.Provider = "microsoft.jet.oledb.4.0"
conn.Open "F:\ado\b\jjngyy.mdb"'''路径与文件为假定的
'用下面这句也行!
'conn.Open "provider=microsoft.jet.oledb.4.0;data source=D:\A\b\jjngyy.mdb"
rs.Open sql, conn, adOpenKeyset, adLockOptimistic, adCmdText
''以下取出十条记录
For i = 1 To 10
If i <= rs.RecordCount Then
outstr = outstr & i & rs(xiaoxi)
rs.MoveNext
End If
Next
ActiveDocument.Range(0, 0) = (outstr)
conn.Close
Set conn = Nothing
End Sub
''''注意,并没有关闭Word与Accsee!!!使用时小心!


----------------
利用VBA与ADO将文档写入到数据库中
------------------
Sub XieASC()
Dim Arange
Dim A, B, C, AIB, BIB, CIB, x, y1
'Dim conn As New ADODB.Connection'这句可以下句也可以。
Set conn = CreateObject("ADODB.Connection")
A = Documents(1).Name
x = 0
Arange = ""
For Each y1 In Documents(1).Paragraphs
x = x + 1
Arange = Arange & ActiveDocument.Paragraphs(x).Range & Chr(13)
Next

conn.Provider = "microsoft.jet.oledb.4.0"
conn.Open "F:\ado\b\jjngyy.mdb"

'以下进行文件写入
conn.Execute "Insert into 美文与素材 (主题或题目,具体内容) values ('" & A & "','" & Arange & "')"
Set conn = Nothing
End Sub
'''使用心得——插入数据时,使用"Insert into"不如使用“Update”!只要文件中有英文逗号或撇号凡会出错!!
“Update”的例子见后面。
======================

利用VBS读、写取数据库  

————————


''''''''''''''''以下代码为利用VBS读、写取数据库的方法
''数据库名“mm.mdb”有一个表“主表”,含四个字段“id,题目,内容,作者”,
''数据库的路径为“G:\”

Set conn = wscript.CreateObject("ADODB.Connection")
Set rs = wscript.CreateObject("ADODB.Recordset")

sql1 = "select id,题目,内容,作者 from 主表 where 1<>1"'''这句SQL代码是有技巧的,1永远不可能不等于1,所以会打开一个“空记录”,这样就有效的减轻了服务器的负担。

sql2 = "select id,题目,内容,作者 from 主表 "
conn.Provider = "microsoft.jet.oledb.4.0"
conn.Open "g:\mm.mdb"
rs.Open sql1,conn,3,2
'''以下写入到数据库中
xieT=inputbox("请输入题目")
xieL=inputbox("请输入内容")
xieZ=inputbox("请输入作者")
rs.AddNew''新建记录
rs("题目")=cstr(xieT)
rs("内容")=cstr(xieL)
rs("作者")=cstr(xieZ)
rs.UpDate'''更新记录
rs.close
set rs=nothing

''''以上程序的第一部分“写入”完成,下面是“读出”
Set rs = Conn.Execute( sql2)
Do While (Not rs.EOF)
ss=rs("id")
c = rs("内容")
b = rs("作者")
ti = rs("题目")
ttt="数据ID——" & ss & chr(10) & "题目为:" & ti & chr(10) & " 内容为:" & c & chr(13) & " 作者为:" & b
aa=msgbox (ttt)
rs.MoveNext
Loop

rs.close
set rs=nothing
conn.Close
Set conn = Nothing
'''这段代码演示了“Update”在更新新数据时的用法,较之于"Insert into"更理想。
================================
最后)——
利用Word的VBA与ADO联接,我们完全可以制做一个自己的“写作素材资料库”。
作为办公来说,我们就可以写一个“word文件归档数据库”。

vbs的这段代码,则可以用于在桌面上控制数据库。

[此贴子已经被konggs于2006-7-4 20:04:21编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-23 19:44 | 显示全部楼层

感想:

1、使用DDE已过时、系统资源占用大、且适用性不广;

2、使用Automcation,则最好是只用要Office各套件之间;很方便,但同样受“如果没有安装Office”怎么办(当然这种可能性很小)的限制、系统资源占用最小;

3、最好的选择——用ADO(OLEDB、ODBC等)起码的好处是不受系统限制、可控制性好(SQL语句提供了很强大的控制能力!)!·方便今后学习SQL与ASP等,只是系统资源占用略大。

[此贴子已经被作者于2004-11-23 20:15:41编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-23 22:13 | 显示全部楼层

为帮助大家理解,对代码补充说明如下——

第二段代码中有这么一节:

For Each y1 In Documents(1).Paragraphs x = x + 1 Arange = Arange & ActiveDocument.Paragraphs(x).Range & Chr(13) Next

为什么要这样一段一段来取得Word文档的内容呢?

如果是直接读出文档的Range的话,存入数据库之后,将会被数据库转换成没有格式的纯文本,再从数据库中读出来,会失去段落格式,所以这样每段读,并添上Chr(13)分段。

语句——

conn.Execute "Insert into 美文与素材 (主题或题目,具体内容) values ('" & A & "','" & Arange & "')"

中“values”的后面,既使用了单引号,又使用了双引号和逗号,稍有不慎就会出错,所以我不喜欢用“Insert into”语句,我也建议大家多用第三段代码中RS对象的的“Update”方法。

第三段VBS代码中,RS对象分别用了两种方式申明,一种是前半部分中的“rs.Open sql1,conn,3,2”

后面的“3”与“2”是数据库的锁定方式,使用时一定要特别注意!

另一种申明的方式是第二部分中的“Set rs = Conn.Execute( sql2)”,直接使用了Conncation对象的Execute方法执行一条SQL语句得到该对象。

最后再补充说一点:如果要在word或Excel 中使用Accsee对象,不要忘了在工程中引用该对象。

TA的精华主题

TA的得分主题

发表于 2004-11-24 06:51 | 显示全部楼层

有劳七兄!如果我没有记错,应该是本版中一个突破,以前没有详细介绍ADO使用的贴子。

我目前也在学习SQL语句。

这个ADO操作例子收藏了,谢谢!

本版能为拥有七兄这个的高手由衷高兴。

TA的精华主题

TA的得分主题

发表于 2004-11-24 18:41 | 显示全部楼层

如闻仙乐,呵呵……不懂。

慢慢学吧,谢谢七叶。

TA的精华主题

TA的得分主题

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

守柔,你那里有这个吗?

守柔,SQL语句——你那里有这个吗?

e5dyYG9R.rar (201.84 KB, 下载次数: 219)

TA的精华主题

TA的得分主题

发表于 2004-11-25 07:00 | 显示全部楼层

这个JETSQL40.chm文件我这儿有.

现在感觉有些MS确实太复杂了.WORD(EXCEL)-VBA-VBS-SQL-ADO-VB-各种控件-DLL等等,来不及学习啊,脑子现在是越来越不管用了.如有兴趣,可见:http://club.excelhome.net/viewthread.php?tid=70082

还有,以前我ACCESS从示用过,与数据库打交道,这个是非学不可了.所以,也得学.

到时候免不了向七兄讨教的.

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-11-26 20:17 | 显示全部楼层

哎呀!!好东东,好东东,简直是好东东!!

谢谢守柔!!!谢谢守柔!!!

看来我要改一改只逛Word版的习惯了!!!!

TA的精华主题

TA的得分主题

发表于 2004-11-27 14:13 | 显示全部楼层

多谢七叶兄的大作

收藏研究

TA的精华主题

TA的得分主题

发表于 2005-11-19 17:24 | 显示全部楼层

近日来看七兄的大贴,发现看不懂。[em04]

看了大头与officecan精英站的Word版的精华,唯一的,我们家的精华贴子最难懂。

看来,路漫漫其修远兮!七兄真是[em17]

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

本版积分规则

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

GMT+8, 2024-11-16 08:53 , Processed in 0.047809 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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