将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小时内删除。