2015-09-15 2 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 правильно введен в ваш запрос? Поместите Msgbox strSQL до With ActiveWorkbook.Connections(1).ODBCConnection и убедитесь, что он отображается как ожидалось.

Кроме того, все это:

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 
Смежные вопросы