2016-05-17 56 views
0

我的实际代码如下:如何在VBA显示的行和列值选择查询

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中的行和列与尽可能多的行为表格和随后的列数

+0

可否请您正确缩进的代码,这是很难遵循有 – litelite

+0

可以有可能选择什么去了“多个SELECT STAMENTS“在上面的VB中。那么结果将存储在与相应表名相同的excel中? –

回答

0

您需要遍历记录集并显示数据。那么,你有这样的:

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 

关于注释:要添加字段标题,创建初始循环,根本就没有移动到下一个记录。查看上面修改的代码。

+0

感谢蒂姆...它工作 –

+0

,但我需要一个更多的帮助..如何显示第一行(第一行的名称) –

+0

像列标题?那就是记录集字段的'.Name'属性。 EG:'rs.Fields(c).Name' – Tim

0

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

Sheet1.Cells(2, 1).CopyFromRecordset rs 
相关问题