Office中国论坛/Access中国论坛

标题: 求助:如何遍历窗体所有列,并返回该列字段名? [打印本页]

作者: caibo_T    时间: 2010-2-25 20:43
标题: 求助:如何遍历窗体所有列,并返回该列字段名?
[attach]41567[/attach]
如图,要批量把表转换成WORD表格,如何得到各列的字段名(产品ID,产品名称,供应商ID...等),从而写入WORD表格的首行
作者: todaynew    时间: 2010-2-25 21:08
本帖最后由 todaynew 于 2010-2-25 21:11 编辑
41567
如图,要批量把表转换成WORD表格,如何得到各列的字段名(产品ID,产品名称,供应商ID...等),从而写入WORD表格的首行
caibo_T 发表于 2010-2-25 20:43

请参见《遍历--Access常用手段》一文。如果字段名是已知的,可参见《Word文件的导入导出》一文。
作者: caibo_T    时间: 2010-2-25 21:28
需要批量转换,所以字段名未知,看了《遍历--Access常用手段》,对我这个问题没有帮助啊
作者: todaynew    时间: 2010-2-25 21:40
本帖最后由 todaynew 于 2010-2-25 21:51 编辑
需要批量转换,所以字段名未知,看了《遍历--Access常用手段》,对我这个问题没有帮助啊
caibo_T 发表于 2010-2-25 21:28

我想至少有两个方法:
1、用一个组合框或列表框,设其数据行来源类型为“字段列表”,行来源为所需的表,然后用组合框或列表框的Column属性取值来获得字段名。
2、用ADO中的Field对象的name属性获得字段名。

其中方法二可写成如下函数:
Function Fieldname(tbname As String) As String
'参数:tbname为表或查询名称
Dim rs As New ADODB.Recordset
Dim i As Long
rs.Open tbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For i = 1 To rs.Fields.Count
    Fieldname = Fieldname & rs.Fields(i).Name & ";"
Next
End Function


得到字段名字符串后,可用Split函数分解为数组,以便在导出Word时使用。
作者: caibo_T    时间: 2010-2-25 23:04
谢谢楼上,运行通过,但要求遍历窗体中的列字段,而不是表,虽然窗体的数据源是表,但在窗体中隐藏了某些列,我只想得到窗体中显示的列字段名称(隐藏列不显示)
作者: asklove    时间: 2010-2-26 08:44
.........
你可以用ADO打开窗体(或子窗体)上的记录源啊
作者: todaynew    时间: 2010-2-26 11:18
谢谢楼上,运行通过,但要求遍历窗体中的列字段,而不是表,虽然窗体的数据源是表,但在窗体中隐藏了某些列,我只想得到窗体中显示的列字段名称(隐藏列不显示)
caibo_T 发表于 2010-2-25 23:04

可把参数tbname写为一个查询的字符串,如:
"select 字段1,字段2,字段5 from 表名 where 字段5 = ‘中国导弹制造股份公司'"
作者: 风啸啸    时间: 2010-2-26 12:42
学习。
作者: caibo_T    时间: 2010-2-27 11:12
问题解决了
Function ToWordFields() As String
    Dim ctl As Control
    Dim strSQL As String
    Dim strTemp(100) As String
    Dim i As Integer
   
   
    ToWordFields = ""
    '扫描子窗体上所有的控件,如果是文本框或者组合框,就判断是否被用户隐藏了
    For Each ctl In Me.自动生成word表格_人员信息_子窗体.Form.Controls
        '注意,这个判断还能继续添加,比如复选框也可以
        If ctl.ControlType = acTextBox Or _
            ctl.ControlType = acComboBox Then
            '如果用户隐藏了列,就说明用户不需要打印,在组织SQL语句的时候也不加进去了
            
            If ctl.ColumnHidden = False Then
                strTemp(ctl.ColumnOrder - 1) = "[" & ctl.ControlSource & "]"
            Else
                strTemp(ctl.ColumnOrder - 1) = ""
            End If
         End If
    Next
   
    For i = 0 To 99
      If (strTemp(i) <> "") Then
        If (ToWordFields = "") Then
          ToWordFields = strTemp(i)
        Else
          ToWordFields = ToWordFields & "," & strTemp(i)
        End If
      End If
    Next i
    'Debug.Print ToWordFields
End Function




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3