如何在 VBA 中显示选择查询的行和列值

Posted

技术标签:

【中文标题】如何在 VBA 中显示选择查询的行和列值【英文标题】:how to display the rows and columns values in VBA for select query 【发布时间】:2016-09-14 00:27:24 【问题描述】:

我的实际代码如下:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
                Call extract
            End Sub
            Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            End SubSub extract()
            Dim cn As Object
                    Dim uid1, pass1, srvrnm --pass parm
            Set cn = CreateObject("ADODB.Connection")
            Dim rs As Object
            Set rs = CreateObject("ADODB.Recordset")
            Dim cmdSQLData As Object
            Set cmdSQLData = CreateObject("ADODB.Command")
            uid1 = "SSSS"   --user-id
            pass1 = "JJJJ"  --pass words
            srvrnm = "JJJJSDS" --server name
            On Error GoTo err1
            cn.Open "Driver=Teradata; DBCName="& srvrnm& ";uid="& uid1& ";AUTHENTICATION=ldap;pwd="& pass1& "; Trusted_Connection=True"
            Set cmdSQLData.ActiveConnection = cn
            On Error Resume Next
            query1 = "select tablename,databasename as xx from DBC.TABLES sample 2;"
            cmdSQLData.CommandText = query1
            cmdSQLData.CommandTimeout = 0
             Set rs = cmdSQLData.Execute()
            Sheet1.Cells(2, 1) = rs.Fields(0).Value
            Set rs = Nothing
            err1:
            End Sub

我的问题是如何在 excel 行和列中获取数据库表结果,其中行数与表中的行数以及相应的列数

【问题讨论】:

您能否正确缩进代码,很难理解那里发生的事情 可以在上面的VB中选择“多个SELECT STAMENTS”吗?并且结果将与相应的表名存储在同一个 excel 中? 【参考方案1】:

您需要遍历您的记录集并显示数据。所以你有这个:

    Set rs = cmdSQLData.Execute()
    Sheet1.Cells(2, 1) = rs.Fields(0).Value
    Set rs = Nothing

你需要这样的东西:

Dim r as Integer 'Row
Dim c as Integer 'Column

For c = 0 To rs.Fields.Count - 1
    'This will start on Row 1, Column A (due to + 1) and place all the field headers
    Sheet1.Cells(1, c + 1).Value = rs.Fields(c).Name
Next c

r = 3 'We'll start on Row 3
Do While Not rs.EOF
    For c = 0 to rs.Fields.Count - 1
        'c + 1 means we're starting on Column 1 (A)
        'If we wanted to start in Column d, we would use c + 4
        Sheet1.Cells(r, c + 1).Value = rs.Fields(c) 
    Next 
    r = r +1
    rs.MoveNext
Loop

关于 cmets:要添加字段标题,您需要创建一个初始循环,并且不要移动到下一条记录。见上面修改后的代码。

【讨论】:

但我需要更多帮助..如何显示第一行(第一行名称) 喜欢列标题?这是记录集字段的.Name 属性。例如:rs.Fields(c).Name 是的,我需要列标题...我需要调用 rs.Fields(c).Name 顺便说一句,如果您添加一个引用(在 IDE 中单击工具 -> 引用)到 Microsoft ActiveX Data Objects x.x Library(您选择哪一个),您可以使用早期绑定(例如:Dim rs as ADODB.RecordsetDim rs As Object) 以利用 Intellisense 并获取大量不同属性和功能的编码技巧和提示。 可以在上面的VB中选择“多个SELECT STAMENTS”吗?并且结果将与相应的表名存储在同一个excel中?【参考方案2】:

将整个记录集复制到 Excel 工作表的最快方法应该是:

Sheet1.Cells(2, 1).CopyFromRecordset rs

【讨论】:

以上是关于如何在 VBA 中显示选择查询的行和列值的主要内容,如果未能解决你的问题,请参考以下文章

如何访问选择查询的行和列[关闭]

如何将特定的行和列值乘以常数来创建新列?

delphi下的cxgrid的列值转换问题

我们如何在 ext js 4.2 中突出显示网格面板的行和列?

TableLayoutPanel隐藏指定的行和列 求指导

请教哈·····在excel中如何设置当选中某单元格时将该单元格所在的行和列高亮显示,不用编程能实现吗~?