【问题标题】:Access: SQL SELECT Columns FROM Table访问:SQL 从表中选择列
【发布时间】:2016-06-26 19:19:59
【问题描述】:

我想在一个访问表单中创建两个 CombiField:

  • 第一个应该在下拉列表中显示数据库的所有表名(*​​)
  • 第二个应该显示在第一个 Combifield 中选择的表中的所有列名。

有什么想法吗?

(*) 我已经有了第一个代码:

SELECT MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Flags)=0) AND ((MSysObjects.Type)=1));

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    将组合框的 RowSource 属性设置为表的名称 (=ComboBoxTable)。

    然后将RowSourceType属性设置为:字段列表

    Private Sub ComboBoxTable_AfterUpdate()
    
        Me!ComboBoxFields.RowSource = Me!ComboBoxTable.Value
    
    End Sub
    

    【讨论】:

    • 谢谢,但实际上我不太明白。我应该在 RowSource 中写“=ComboBoxTable”吗?或者是否还有任何有效的 SQL 代码?
    • 不,使用表格组合框的 AfterUpdate 事件。见编辑。
    【解决方案2】:

    在第一个组合的 AfterUpdate 中尝试下面的代码

    Private Sub Combo0_AfterUpdate()
    Dim TableName As String
    TableName = Me.Combo0.Value
    Dim rs As New ADODB.Recordset
    Set rs = CurrentProject.Connection.OpenSchema(adSchemaColumns, Array(Empty, Empty, TableName))
    Dim fldname As String
    rs.MoveFirst
    Do Until rs.EOF
    fldname = fldname & rs!Column_Name & ";"
    rs.MoveNext
    Loop
    Me.Combo2.RowSource = fldname
    Me.Combo2.RowSourceType = "Value List"
    Me.Combo2.Requery
    End Sub
    

    【讨论】:

    • 不幸的是我仍然不能让它运行......总结一下:第一个 Combobox (Combo1) 显示了到目前为止的 TableNames。我将 nazark 的 AfterUpdate 代码添加到该代码中。我将来自 Gustav 的 AfterUpdate 代码添加到第二个 Combobox (Combo2)。现在我收到代码“Dim rs As New ADODB.Recordset”的编译错误提前谢谢! :)
    • 你不能像那样混合和折腾所有东西。你只需要我的一行代码(上图)。第二个组合框需要零代码。
    • 您需要在代码窗口的工具菜单中添加对microsoft activex Data Object library 2.6的引用
    • 上面的代码是获取第二个combo中的列名
    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多