设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1990|回复: 9
打印 上一主题 下一主题

[Access本身] [求助]编程获取字段的方法

[复制链接]
跳转到指定楼层
1#
发表于 2004-2-12 23:03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我设计了一个窗体,放有两个下拉列表框,第一个框要列出数据库中所有的表(或链接表)及查询的名称,第二个框根据第一个框中的名称,要得出该表(或查询)的所有字段名称。用VBA应如何实现?请各位指教。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2004-2-12 23:37:00 | 只看该作者
表名和查询名:SELECT MSysObjects.Name, MSysObjects.Type
FROM MSysObjects
WHERE (((MSysObjects.Name) Like "*" And (MSysObjects.Name) Not Like "~*") AND ((MSysObjects.Type)=1 Or (MSysObjects.Type)=5));

字段名:
Private Function GETZD(tbName As String)
    Dim cat As New ADOX.Catalog
    cat.ActiveConnection = CurrentProject.Connection
    For i = 0 To cat.Tables(tbName).Columns.Count - 1
        Debug.Print cat.Tables(tbName).Columns.Item(i).Name
    Next
End Function

'需引用ADOX
'用法:GETZD ("表名")



[此贴子已经被作者于2004-2-12 15:50:19编辑过]

3#
 楼主| 发表于 2004-2-12 23:49:00 | 只看该作者
谢了,字段名如何获取?

太感谢了!
[此贴子已经被作者于2004-2-12 16:09:47编辑过]

点击这里给我发消息

4#
发表于 2004-2-14 00:22:00 | 只看该作者
以下是引用阿丰在2004-2-12 15:03:24的发言:
我设计了一个窗体,放有两个下拉列表框,第一个框要列出数据库中所有的表(或链接表)及查询的名称,第二个框根据第一个框中的名称,要得出该表(或查询)的所有字段名称。用VBA应如何实现?请各位指教。


在窗体上放两个列表框控件, 分别为 lstTV  lstFld, 用来分别显示表/查询列表和字段列表

lstTV的属性设置:
行来源类型:表/查询
行来源:SELECT Name FROM MSysObjects WHERE (((MSysObjects.Name) Not Like "~*") AND ((MSysObjects.Name) Not Like "Msys*") AND ((MSysObjects.Type)=1 Or (MSysObjects.Type)=5));
列数:1

lstFld的属性设置:
行来源类型:字段列表
列数:1

在lstTV的更新后事件处理程序中写入如下代码:
Private Sub lstTV_AfterUpdate()
    lstFld.RowSource = lstTV
End Sub

运行效果如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
发表于 2004-2-14 00:58:00 | 只看该作者
字段名还可以使用ADO得到
DIM RST AS ADODB。RECORDSET
DIM STR AS STRING
。。。

FOR I = 0 TO RST。FIELDS。COUNT-1
STR = STR & RST.FIELDS(I).NAME
NEXT I

XXX.ROWSOURCE =STR '字符串还要修剪
6#
 楼主| 发表于 2004-2-14 03:35:00 | 只看该作者
我试过了,第4楼的方法太好了,多谢多谢!
7#
发表于 2004-2-14 19:30:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

点击这里给我发消息

8#
发表于 2004-2-14 21:55:00 | 只看该作者
以下是引用aydl1014在2004-2-14 11:30:16的发言:
请问如何在此基础上选择几个字段生成一个新表?


在第4贴的基础上, 在窗体上增加一个复选框和一个命令按钮, 分别命名为chkData和cmdGen, 并将原来的lstFld的多重选择属性设置为“简单”,然后,在该窗体中添加如下代码:

Public strSQL As String

Private Sub cmdGen_Click()
    Dim strTblName As String
   
    If strSQL = "" Then
        MsgBox "没有选择字段!", vbCritical, Me.Caption
    Else
        strTblName = InputBox("请输入新建的表的名称:", "新建表", "新表1")
        If strTblName = "" Then
    '        MsgBox "已取消操作!", vbCritical, Me.Caption
        Else
            If Not IsNull(DLookup("[Name]", "MSysObjects", "[Name]='" & strTblName & "' AND [Type]=1")) Then
                MsgBox "表:" & strTblName & vbCr & vbCr & "已经存在!", vbCritical, Me.Caption
            Else
                If chkData Then
                    ' 含有数据
                    DoCmd.RunSQL strSQL & " INTO [" & strTblName & "] FROM [" & lstTV & "];"
                Else
                    ' 不含数据
                    DoCmd.RunSQL strSQL & " INTO [" & strTblName & "] FROM [" & lstTV & "] WHERE 1=2;"
                End If
            End If
        End If
    End If
End Sub

Private Sub lstFld_AfterUpdate()
    Dim varFld As Variant
   
    strSQL = ""
    For Each varFld In lstFld.ItemsSelected
        strSQL = strSQL & ", " & "[" & lstFld.ItemData(varFld) & "]"
    Next
    strSQL = IIf(strSQL = "", "", "SELECT" & Mid(strSQL, 2))
   
    Debug.Print strSQL
End Sub

运行效果如下图,即可实现“在此基础上选择几个字段生成一个新表”。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
发表于 2004-2-14 22:25:00 | 只看该作者
太经典了,谢谢朱大师

点击这里给我发消息

10#
发表于 2004-2-14 23:43:00 | 只看该作者
修正新增数据表后, 对lstTV数据表和查询列表框的更新:

第8贴的cmdGen_Click()改为如下:

Private Sub cmdGen_Click()
    Dim strTblName As String
   
    If strSQL = "" Then
        MsgBox "没有选择字段!", vbCritical, Me.Caption
    Else
        strTblName = InputBox("请输入新建的表的名称:", "新建表", "新表1")
        If strTblName = "" Then
    '        MsgBox "已取消操作!", vbCritical, Me.Caption
        Else
            If Not IsNull(DLookup("[Name]", "MSysObjects", "[Name]='" & strTblName & "' AND [Type]=1")) Then
                MsgBox "表:" & strTblName & vbCr & vbCr & "已经存在!", vbCritical, Me.Caption
            Else
                If chkData Then
                    ' 含有数据
                    DoCmd.RunSQL strSQL & " INTO [" & strTblName & "] FROM [" & lstTV & "];"
                Else
                    ' 不含数据
                    DoCmd.RunSQL strSQL & " INTO [" & strTblName & "] FROM [" & lstTV & "] WHERE 1=2;"
                End If

                ' 修正新增数据表后, 对lstTV数据表和查询列表框的更新
                ' --------------------------------------------------
                lstTV.Requery
                ' --------------------------------------------------
            End If
        End If
    End If
End Sub
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-16 04:23 , Processed in 0.112975 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表