2014-08-27 2 views
0

Я немного застрял в небольшом проекте , чтобы генерировать результаты из нескольких sql-запросов в нескольких листах Excel, я пытаюсь использовать SQL Server 2008, и это первый раз, когда я код VBA Я попробовал этот код (для SQL одного запроса), но я до сих пор есть проблемы компиляцииВыполнение SQL-запроса от excel

Sub New_Feuil1() 
    ThisWorkbook.Activate 

    'First clear the contents from the query 
    Worksheets("Feuil1").Select 
    Range("A2").Select 
    Do Until ActiveCell = "" 
     ActiveCell.Offset(1).Select 
    Loop 
    Range("A4", ActiveCell.Offset(-1, 3)).ClearContents 

    'Get reporting date 
    ReportingDate = ThisWorkbook.Sheets("Parameters").Range("D1") 

    'Format the value for use in the SQL query 
    ReportingDateFor = Format(ReportingDate, "yyyy-mm-dd") 

    Worksheets("Feuil1").Select 
    Range("A1").Select 

    Dim cnn As New ADODB.Connection 
    Dim rst As New ADODB.Recordset 
    Dim StrQuery1 As String 
    Dim ConnectionString As String 

    ConnectionString ="ODBC;" & _ 
    "Driver={SQL Server Native Client 10.0};" & _ 
    "Server=187.125.254.231;" & _ 
    "Database=database;" & _ 
    "UID=sa; PWD=pwd" 
    cnn.Open ConnectionString 
    cnn.CommandTimeout = 900 

    'Queries to be executed 
    StrQuery1 = StrQuery1 & "Select Id from Users" 

    rst.Open StrQuery1, cnn, adOpenForwardOnly, adLockReadOnly 
    rst.Close 

    Debug.Print "StrQuery1:"; StrQuery1 
    cnn.Close 

    ThisWorkbook.Sheets("Central Dashboard").Select 
    Sheets("Feuil1").Range("A2").CopyFromRecordset rst 

End Sub 

есть ли другое решение?

+1

Можете ли вы показать ** ** конкретный вопрос (ы) вы имеете нам. Прочитайте [как написать короткий, самосохраненный, правильный пример] (http://sscce.org/) и посмотрите здесь [справочный центр] (http://stackoverflow.com/help). Затем отредактируйте свой вопрос (http://stackoverflow.com/posts/25524210/edit) и укажите все необходимые данные. – RossC

+0

каждый раз, когда я запускаю макрос, он продолжает говорить мне, что у меня есть проблема с компрессией – user3708197

+1

ok ... и что такое проблема с компиляцией? Я не вижу компьютер. Пожалуйста, прочитайте приведенную мной ссылку и отредактируйте свой вопрос, чтобы объяснить нам, что происходит. «Это дает ошибку компилятора» ничего мне не говорит. – RossC

ответ

1

кажется, что вы новичок в программировании :) .. прежде чем использовать какие-либо переменные, пожалуйста, объявите их, это поможет вам быстро их понять.

нравится:

Dim ReportingDate as Date 
ReportingDate = ThisWorkbook.Sheets("Parameters").Range("D1") 

Dim ReportingDateFor As String 
ReportingDateFor = Format$(ReportingDate, "yyyy-mm-dd") 

также проверить строку подключения. попробуйте эту строку подключения.

ConnectionString = "Driver={SQL Server Native Client 10.0};Server=187.125.254.231;Database=database;UID=sa; PWD=pwd" 

Кроме того, глядя на ваш код, который вы подключаетесь к серверу, открытие записей, закрытие записей и, наконец, закрывая соединение, а затем пытается получить результаты. логически это никогда не будет работать :) :)

попробовать это:

Dim cnn As New ADODB.Connection 
Dim rst As New ADODB.Recordset 
Dim cmd As ADODB.Command 

Dim ConnectionString As String 
ConnectionString = "Driver={SQL Server Native Client 10.0};Server=187.125.254.231;Database=database;UID=sa; PWD=pwd" 

cnn.Open ConnectionString 

'Queries to be executed 
Dim StrQuery1 As String 
StrQuery1 = StrQuery1 & "Select Id from Users" 

'Prepare SQL execution 
cmd.Name = "SelectUsers" 
cmd.ActiveConnection = conn 
cmd.CommandText = StrQuery1 

Set rst = cmd.Execute 
If Not rst.EOF Then 
    With Sheets(1).Cells ' Enter your sheet name and range here 
     .ClearContents ' clears the entire sheet 
     .CopyFromRecordset rst ' copy the result 
    End With 
Else 
    MsgBox "no records found.." 
End If 

'After work done close connection 
On Error Resume Next 
rst.Close 
cnn.Close 
Set rst = Nothing 
Set cnn = Nothing 
Смежные вопросы