2015-09-15 52 views
0

我无法使此代码正常工作。第一次运行它时,它提示我输入密码并且每次都完成宏,但不会将结果拖入sheet1。我能在这里做什么?将结果从数据库中提取到Excel中

Sub Update() 

    ThisWorkbook.Sheets("sheet1").Activate 
    ThisWorkbook.Sheets("sheet1").Range("A1").Select 
    Dim strStDt As String 
    Dim strEnDt As String 
    Dim strSQL As String 

    strStDt = ThisWorkbook.Worksheets("lookup").Range("B6").Value 
    strEnDt = ThisWorkbook.Worksheets("lookup").Range("B5").Value 

    strSQL = "" 
    strSQL = strSQL & "SELECT tkt.cntry_istto" 
    strSQL = strSQL & ",tkt.pod" 

    strSQL = strSQL & " FROM INTGY.GRUIP tkt" 

    strSQL = strSQL & " Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 


    ThisWorkbook.Sheets("sheet1").Activate 
    ThisWorkbook.Sheets("sheet1").Range("A1").Select 

    With ActiveWorkbook.Connections(1).ODBCConnection 

     .BackgroundQuery = True 
     .Connection = "ODBC;DSN=#EDXX;UID=;;DATABASE=INTGY; AUTHENTICATION=;" 
     .CommandText = strSQL 
     .RefreshOnFileOpen = False 
     .SavePassword = False 
     .SourceConnectionFile = "" 
     .SourceDataFile = "" 
     .ServerCredentialsMethod = xlCredentialsMethodIntegrated 
     .AlwaysUseConnectionFile = False 
     .Refresh 

    End With 

End Sub 

回答

0

您是否验证过strSQL是否正确地输入到查询中?在With ActiveWorkbook.Connections(1).ODBCConnection之前放Msgbox strSQL并确保它按预期显示。

而且,这一切:

strSQL = "" 
strSQL = strSQL & "SELECT tkt.cntry_istto" 
strSQL = strSQL & ",tkt.pod" 

strSQL = strSQL & " FROM INTGY.GRUIP tkt" 

strSQL = strSQL & " Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 

可以改写为:

strSQL = "SELECT tkt.cntry_istto,tkt.pod FROM INTGY.GRUIP tkt Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 
+0

一个excel框与我的SQL调用。这是否意味着它正在工作?如果这是我怎么能把结果放在sheet1中。感谢您的帮助 – Matt

+0

这只是让您有机会检查SQL并确保它正在正确输入 - 没有错误。我不知道如何将SQL结果粘贴到Excel中,您必须自己研究一下,对不起! – puzzlepiece87

0

使用一个ADO connection检索记录,然后使用CopyFromRecordset复制到工作表的范围(仅指定上左细胞)。

此外,我不知道数据库,但要注意您的日期,必须包含单引号(对于大多数数据库)或如果使用MS Access与#而不是引号括起来。

Dim conn As Object 
Dim rst As Object 
Dim strSQL As String, strStDt As String, strEnDt As String 

Set conn = CreateObject("ADODB.Connection") 
Set rst = CreateObject("ADODB.Recordset") 

strStDt = ThisWorkbook.Worksheets("lookup").Range("B6") 
strEnDt = ThisWorkbook.Worksheets("lookup").Range("B5") 

strSQL = "SELECT tkt.cntry_istto, tkt.pod" 
strSQL = strSQL & " FROM INTGY.GRUIP tkt" 
strSQL = strSQL & " WHERE tkt.year_month_nbr" 
strSQL = strSQL & " BETWEEN '" & strStDt & "' and '" & strEnDt & "' 

conn.Open "DSN=#EDXX" 
rst.Open strSQL, conn 

ThisWorkbook.Sheets(1).Range("A1").CopyFromRecordest rst 
rst.Close 

Set rst = Nothing 
Set conn = Nothing