手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mysql>列表

Word域与数据库的结合编程

来源: 作者: 时间:2008-03-24
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
站.长.站

如果表格行数少于表数据的行数则应该增加表格行数。增加多少表格行数由表数据的行数减去现有表格行数加入计算出来。当插入了行,光标一定下移了几行,这里要还原光标至原来位置,方法是先保留插入点,插入行后,重新选择插入点,使光标上移几行。表格已经插入行以后就不要再插入了,所以至IsInsertRow为真。

中.国.站长站

 

以下为引用的内容:
'向表格中增加行数。
    Private Function IsInsert(ByVal mySelection As Selection,
    ByVal recCount As Integer) As Boolean
      Dim InsertRowCount As Integer           '插入的行数
      Dim CurrCell As Cell
      CurrCell = mySelection.Cells.Item(1)
      InsertRowCount = recCount - mySelection.Tables.Item(1).Rows.Count + 1
        If InsertRowCount > 0 Then
            mySelection.InsertRows(InsertRowCount) Www~Chinaz~com
            CurrCell.Select()
            mySelection.MoveUp(Unit:=wdLine, Count:=InsertRowCount)
            IsInsertRow = True
        End If
End Function

Www@Chinaz@com

 

Word的菜单和工具箱很多,用户操作时先关掉这些不必要的东西,最后恢复Word环境的原状。 Www.Chinaz.com

以下为引用的内容:
'恢复Word环境的所有命令及菜单。
    Public Sub OpenCommandBar()
        Dim i As Integer
        For i = 0 To UBound(CommandBarIndex) - 1
            wdDoc.CommandBars(i + 1).Visible = True
        Next
        For i = 0 To UBound(SaveCommandBarMenuIndex) - 1
            wdDoc.CommandBars.Item("Menu Bar").Controls(i + 1)。Visible = True
Www~Chinaz~com

        Next
    End Sub
    '关闭Word环境的所有命令及菜单。
    Public Sub CloseCommandBar()
        Dim i As Integer
        Dim cBar
        ReDim CommandBarIndex(1)
        ReDim SaveCommandBarMenuIndex(1)
        i = 0
        For Each cBar In wdDoc.CommandBars
            If cBar.Type = 0 And cBar.Enabled = True Then
                If cBar.Visible = True Then
                    ReDim CommandBarIndex(i + 1)
                    CommandBarIndex(i) = cBar.Index

站长.站


                    i = i + 1
                    cBar.Visible = False
                End If
            End If
        Next
        i = 0
        For Each cBar In wdDoc.CommandBars("Menu Bar").Controls
            If cBar.Visible = True Then
                ReDim SaveCommandBarMenuIndex(i + 1)
                SaveCommandBarMenuIndex(i) = cBar.Index

中国站长.站


                i = i + 1
                cBar.Visible = False
            End If
        Next
End Sub
Chinaz_com

2、增加一个处理数据库的类COleDataAccess。

中.国站长站

 

COleDataAccess类很简单,包含连接数据库的方法ConnAccess,打开静态表的方法GetDataTable,由字段名得到字段值的方法GetFieldValues。

中.国.站.长.站

 

以下为引用的内容:
Public Class COleDataAccess
Private mOleCnnDB As New OleDbConnection()
'连接Access数据库:DBName数据库名。
    Public Sub ConnAccess(ByVal DBName As String)
        mOleCnnDB.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""
";User ID=Admin;" & _
         "Data Source='" & DBName & "'"
      mOleCnnDB.Open()
    End Sub

中国站长_站,为中文网站提供动力


    '获取数据表.strSql查询条件。
    Public Overloads Function GetDataTable(ByVal strSql As String) As DataTable
        Dim myDataSet As New DataSet()
        Dim myOleDataAdapter As New OleDbDataAdapter()
        myOleDataAdapter.SelectCommand = New OleDbCommand(strSql, mOleCnnDB)
        Try
            myOleDataAdapter.Fill(myDataSet)
        Catch er As Exception
            MsgBox(er.ToString)
        End Try
        Return myDataSet.Tables(0)
    End Function
'由字段名得到字段值的方法:. TableName表名 ; FieldName 字段名
    Public Overloads Function GetFieldValues(ByVal TableName As String,

中国站长_站,为中文网站提供动力


    ByVal FieldName As String) As Object()
        Dim dr As DataTable
        Dim sql As String
        sql = "select " + FieldName + " from " + TableName
        dr = GetDataTable(sql)
        Dim al(dr.Rows.Count) As Object
        dr.Rows.CopyTo(al, 0)
        Return al
    End Function
End Class
中.国.站长站

3、增加模块Module1 [中国站长站]

模块Module1定义COleDataAccess类的变量clsDB,并连接数据库,显示用户窗体。

中国站.长.站

 

以下为引用的内容:
Module Module1
    Public clsDB As New COleDataAccess()
    Sub main()
        clsDB.ConnAccess("工程数据。mdb")
        Dim frm As New frmUserWord()
        frm.ShowDialog()
    End Sub
End Module
站.长.站

4、增加用户操作窗体 Www.Chinaz.com

向工程中增加一窗体frmUserWord,窗体标题为"处理Word文档",在frmUserWord上加入3个CommandButton,用于打开文件(cmdOpenFile)、填充数据(cmdFill)、保存文件(cmdSave)用的命令按钮;2个ComboBox,用于所插入的字段名;2个 Label;2个CommonDialog,用于执行打开文件和保存文件;打开文件的对话框OpenFileDialog1、保存文件的对话框SaveFileDialog1。界面如下: 站长.站

窗体frmUserWord类事实很简单,frmUserWord 类的代码如下:
 

以下为引用的内容:
Public Class frmUserWord
    Inherits System.Windows.Forms.Form
Dim clsDoc As New CWordDoc()
'打开Word文件。并使处理界面位于Word最顶端,适当调整Word位置,关闭Word其它功能。
Private Sub cmdOpenFile_Click(ByVal sender As System。Object,
ByVal e As System。EventArgs) Handles cmdOpenFile。Click
        Dim FileName As String
        OpenFileDialog1.ShowDialog()
        FileName = OpenFileDialog1.FileName

中.国站长站


        If FileName = "" Then
            Exit Sub
        End If
        clsDoc.OpenWordDocument(FileName)
        clsDoc.SetWordSize(0, 50, 2000, 2000)
       clsDoc.CloseCommandBar()
        Me.Top = 0
        Me.Left = 0
        Me.Width = 10000
        Me.Height = 80
        ComboBox1.Enabled = True
        ComboBox2.Enabled = True
        cmdSave.Enabled = True
        cmdFill.Enabled = True
End Sub

中国站.长.站

 

在Form的Load事件中定义打开和保存文件的格式,并填充ComboBox数据。ComboBox数据对应数据库表的字段名。
 

以下为引用的内容:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        OpenFileDialog1.Title = "打开文件"
        OpenFileDialog1.Filter = "Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot"
        SaveFileDialog1.Title = "保存文件"
Chinaz

        SaveFileDialog1.Filter = "Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot"
        Dim dt As New DataTable()
        dt = clsDB.GetDataTable("select * from 工程")
        For i = 0 To dt.Columns.Count - 1
            ComboBox1.Items.Add(dt.Columns.Item(i).ColumnName)
        Next
        dt = clsDB.GetDataTable("select * from 校核")
        For i = 0 To dt.Columns.Count - 1
            ComboBox2.Items.Add(dt.Columns.Item(i).ColumnName)
        Next
    End Sub
   '填充数据
    Private Sub cmdFill_Click(ByVal sender As System.Object, ByVal e As 站.长站
System。EventArgs) Handles cmdFill.Click
        clsDoc.InsertValue()
        clsDoc.InsertCollection()
    End Sub
'用户选择所插入域的域名,并在光标处插入单值域。
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object,
    ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        clsDoc.InsertField(sender.Text)
    End Sub
'用户选择所插入域的域名,并在光标处插入多值域。
域所对应多值时,域只能插入表格中。且要与单值域区分,标记为多值插入。
    Private Sub ComboBox2_SelectedValueChanged(ByVal sender As Object,
    ByVal e As System.EventArgs) Handles ComboBox2.SelectedValueChanged
        Dim KeyWord As String
        KeyWord = sender.Text + "F" '标记是多值 [中国站长站]
        clsDoc.InsertField(KeyWord)
    End Sub
'保存Word文件。
    Private Sub cmdSave_Click(ByVal sender As System.Object,
    ByVal e As System.EventArgs) Handles cmdSave.Click
        clsDoc.SaveWordDocument()
End Sub
'打开Word的命令菜单及工具箱。
Private Sub frmUserWord_Closed(ByVal sender As Object,
ByVal e As System.EventArgs) Handles MyBase.Closed
        clsDoc.OpenCommandBar()
    End Sub
End Class

Chinaz@com

 

5、应用与测试

Chinaz~com

 

一般,此种应用是作为一个软件的一部分,我们可以把它生成组件来用,方法把项目的输出类型改为类库后,把它生成DLL文件就可。这里为了方便测试就直接把它生成应用程序。 Chinaz~com

下面对它运行时的结果如下: 中国站长_站,为中文网站提供动力

中.国站长站


打开一Word文件运行后的界面如下: 站.长.站

中国站长.站

 

结论

Chinaz_com

 

上面方法介绍了Word域的利用,利用VBA编写Word域的方法。Word域所对应的数据库的字段的单值和多值的关系,极有普遍性,很有实用价值。

站.长.站

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!