将Access数据库中图文信息导出到Word文档的方法
作者:***
来源:《电脑知识与技术》2009年第33期
摘要:该文介绍了将Access数据库中的图文混编内容导出到Word文档的方法,并给出了用Visual Basic 6.0实现的程序实例。
关键词:Access Database;图像;导出;Word Document
中图分类号:TP317文献标识码:A文章编号:1009-3044(2009)33-9121-02
Exporting the Method of Graphic Information on the Access Database to Word Document
CHE Guang-hong
(School of Information Engineering, Anhui University of Finance & Economics, Hefei 233041, China)
Abstract: Introduced a method of the contents of the graphic mixed on Access database exported to Word documents,and gives Example program using Visual Basic 6.0.
Key words: Access Database; graphic; export; word document
1 问题的提出
最近,在工作中遇到了这样一个问题:需要将Access数据库的一些表中的内容导出到Word文档,但这些表中有备注型字段,其中存放着图文混编的信息。
麻烦的是简体中文版OfficeXP和Office2003中的Access都没有提供直接将这种类型字段的数据按原格式导出到Word(或RTF格式)文档的功能(更高版本的Office有无此种功能?)。使用Access的导出功能将表导出为RTF文件时,所有备注型字段的内容均呈现为“乱码”。例如,图1所示的就是某表导出到RTF格式文件的情况,其中前三列为文本型字段的内容,是正确的;而第四列是备注型字段的内容,为“乱码”。
为了解决这个问题,在网上搜索了好几天,但始终没有到现成的方法。无奈之下只好自己动手了。还好,经过苦苦摸索,终于到了解决问题的方法。该方法虽非完美,但确实能够解
决上述问题。所以还是将其写出来,供有上述需求但还没有到更好的解决方法的读者参考。
2 解决方法
为了到解决问题的途径,我们先来揭开这些“乱码”的面纱。使用过Visual Basic编写数据库应用程序的人都知道,存放于Access数据库表中备注字段中的图文混编的内容可以正确地显示于RichTextBox控件中,而RichTextBox控件的内容是可以保存为RTF格式的文件的。所以,图1中那些看似“乱码”的内容其实一点也不乱,它们是相应字段内容在RTF格式文件中的编码。例如,圖1右边单元格的完整内容如下:
{\rtf1\ansi\ansicpg936\deff0{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
\viewkind4\uc1\pard\lang2052\f0\fs18
\par\'ce\'aa\'bd\'e2\'be\'f6\'c4\'b3\'b8\'f6\'ca\'b5\'bc\'ca\'ce\'ca\'cc\'e2\'b6\'f8\'b1\'e0\'c5\'c5\'b5\'c4\'d6\'b8\'c1\'ee\'d0\'f2\'c1\'d0\'b3\'c6\'d6\'ae\'ce\'aa()\'a1\'a3
\par A.\'d6\'b8\'c1\'ee
\par B.\'b9\'fd\'b3\'cc
\par C.\'b3\'cc\'d0\'f2
\par D.\'ba\'af\'ca\'fd
\par }
如果将上面内容存放到一个文本文件中,然后将文本文件的扩展名改为.RTF,再用Word打开时,我们就会看到其本来面目,原来是一道单项选择题:
明白了这个道理,也就有了解决问题基本思路:设法将Access数据库表(含有备注字段)中的所有记录的内容按原顺序放入一个RichTextBox控件中,然后将RichTextBox控件中的内容写入一个RTF文件,最后用Word打开该RTF文件,将其另存为Word文档即可。
将表中所有记录的内容按原顺序放入一个RichTextBox控件中的处理过程如下(假设rsTm为记录集,rtfT为RichTextBox控件):
rtfT.TextRTF = ""
Do While Not rsTm.EOF
rtfT.SelRTF = rsTm.Fields(0).Value '第一字段值
rtfT.SelRTF = " " '字段值之间加以空格
rtfT.SelRTF = rsTm.Fields(1).Value '第二字段值
rtfT.SelRTF = " " '字段值之间加以空格
' ......
rtfT.SelRTF = rsTm.Fields(n-1).Value '第n字段值
rtfT.SelRTF = vbCrLf '每个记录后换一行
rsTm.MoveNext
Loop
3 程序实现
假设有一个名为Test.mdb的Access数据库,其中有一个含有4个字段(含有备注型字段)的表t1,现在我们用VB 6.0编写一个成程序,来将表t1中的内容导出到一个名为f的RTF格式文件中。实现方法如下:
程序界面如图2所示。
只需一个RichTextBox控件(名称属性设置为rtfT)和一个命令按钮控件。
需要编写下列代码:
1)在窗体的“通用-声明”部分定义用于连接数据库的变量:
Dim connTk As New ADODB.Connection
Dim rsTm As New ADODB.Recordset
2)在窗体的Load事件中连接数据库:
Private Sub Form_Load()
Dim strSQL As String
strSQL = "Provider=MSDASQL.1;Extended Properties=DBQ=" _
& App.Path & "\test.MDB;DefaultDir=" & App.Path _
& ";Driver={Microsoft Access Driver (*.mdb)}"
connTk.ConnectionString = strSQL
connTk.Open strSQL, "", ""
End Sub
3)在窗体的Unload事件中取消数据库的连接:
Private Sub Form_Unload(Cancel As Integer)
sql数据库用什么软件打开 If rsTm.State = adStateOpen Then rsTm.Close
Set rsTm = Nothing
connTk.Close
Set connTk = Nothing
End Sub
4)在命令按钮的Click事件中完成导出功能:
Private Sub Command1_Click()
Dim strSQL As String
' 将表t1的内容提取到记录集rsTm
strSQL = "select * from t1"
If rsTm.State = adStateOpen Then rsTm.Close
rsTm.CursorLocation = adUseClient
rsTm.Open strSQL, connTk, adOpenDynamic, adLockOptimistic
DoEvents
' 将记录集rsTm的全部记录放到RichTextBox控件rtfT中
' --------------------------------
rtfT.TextRTF = ""
Do While Not rsTm.EOF
rtfT.SelRTF = rsTm.Fields(0).Value 'ID字段值
rtfT.SelRTF = " " '字段值之間加以空格
rtfT.SelRTF = rsTm.Fields(1).Value 'th字段值
rtfT.SelRTF = " " '字段值之间加以空格
rtfT.SelRTF = rsTm.Fields(2).Value 'da字段值
rtfT.SelRTF = " " '字段值之间加以空格
rtfT.SelRTF = rsTm.Fields(3).Value 'tm字段值(备注型)
rtfT.SelRTF = vbCrLf '每个记录后换一行
rsTm.MoveNext
Loop
' 将rtfT中的内容写入到名为f的RTF文件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论