Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请高手帮忙如何读access列名及其数据

绿涧  发表于:2010-05-08 09:17:01  
复制

我现在建了一个数据表窗口,我想实现用VBA代码通过另一窗口输入的列名称,取出此数据表当前数据行中此列名的数据,在网上搜不到,请高手帮忙

 

Top
煮江品茶 发表于:2010-05-08 13:14:50

function fldname(tbname as string) as string
'功能:获得数据表字段名字符串,可用于列表框或组合框数据源
'参数:tbname--数据表名称
'示例:me.字段名.RowSource=fldname("学生表")
Dim rs As New ADODB.Recordset
rs.Open tbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For j = 0 To rs.Fields.Count - 1
     fldname = fldanem & rs.Fields(j).Name & ";"
Next
end function

 

function fldval(tbname as string,fldname) as string
'功能:获得数据表字段值字符串,可用于列表框或组合框数据源
'参数:tbname--数据表名称
'示例:me.字段值.RowSource=fldname("学生表","姓名")
Dim rs As New ADODB.Recordset
Dim ssql As String
Dim i as long,j as long
ssql = "select " & fldname & " from " & tbname
rs.Open tbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For i = 1 To rs.RecordCount
    For j = 0 To rs.Fields.Count - 1
        fldval = fldval & rs.Fields(j).Value & ";"
    Next
    rs.MoveNext
Next
rs.Close
end function



绿涧 发表于:2010-05-08 18:07:19

谢谢版主,我是工作需要自学的access,所以有说错的地方别见怪

1、你第一段代码,是遍历列名,第二段代码遍历所有数据,对吗?第二段中ssql定义后我没看到怎么用的。

2、我现在已经在数据表窗口中选择了一条记录,我的目的是触发一个事件,然后有一个字符串变量,根据不同情况它被赋值为某一个列名,然后代码通过此字符串读取所选择的这条记录的对应列的数据。所以能不能不遍历查询,通过哪个函数直接读取?



煮江品茶 发表于:2010-05-08 19:20:22

没看明白你的意思。

先选将光标放在一条记录上,取这一行上的某列一个值的话,什么函数也不需要,直接【me.列名称.value】就可以了。



煮江品茶 发表于:2010-05-08 19:24:52
你是不是想点那什么位置取什么位置的值?如果是的话可以Me.Form.ActiveControl.Value。

绿涧 发表于:2010-05-08 20:31:21

谢谢版主,没想到晚上了还能回复!可能我表达的不是很清楚,我在很多论坛发了帖子我只是描述了功能,没具体说明我为何要这样做,不少回复看不懂!

我的这个表A有很多列是关联的其他表的ID,每条记录的类别不同,下一级数据会选择不同的关联表保存,我在类别表B中保存了表A的关联表C名称和关联列名D,我在数据表窗口固定列有双击事件,然后代码在类别表B中读取关联表C名称和关联列名D,然后由此读取关联表C中ID=关联列名D数据的记录



绿涧 发表于:2010-05-08 22:00:05

我用遍历列名的方法实现了我想要的功能,下面是代码,不知道有没有更简便的函数能直接定位某一列的数据!

Private Sub aaa_DblClick(Cancel As Integer)
    Select Case Me.查看窗口参数ID
        Case 1
           
        Case Else
            Dim rs As Recordset
            Set rs = Me.RecordsetClone
           
            Dim rs1 As New ADODB.Recordset
           
            If Not Me.链接表参数ID1 = 1 Then
                rs1.Open Me.链接表名称, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
                For i = 0 To rs.Fields.Count - 1
                    If Me.链接项 = rs.Fields(i).Name Then
                        rs1.Find "[" & Me.链接项 & "]=" & str(rs.Fields(i).Value)
                        If Not rs1.EOF Then
                            For j = 0 To rs1.Fields.Count - 1
                                If Me.数据ID项 = rs1.Fields(j).Name Then
                                    DoCmd.OpenForm Me.窗口名称, , , , , , rs1.Fields(j).Value
                                    Exit For
                                End If
                            Next
                        End If
                        Exit For
                    End If
                Next
            Else
                For i = 0 To rs.Fields.Count - 1
                    If Me.数据ID项 = rs.Fields(i).Name Then
                        rs.Bookmark = Me.Bookmark
                        DoCmd.OpenForm Me.窗口名称, , , , , , rs.Fields(i).Value
                        Exit For
                    End If
                Next
            End If
           
    End Select
End Sub



总记录:6篇  页次:1/1 9 1 :