2016-07-28 53 views
1

我今天編寫了一些代碼用於工作,並且遇到了一個問題,我通過VBA提供SQL服務器的命令沒有請求相同數量的信息,就像我要執行相同的確切命令在服務器上。如果我在VBA中執行下面的代碼,我會得到大約25行的68列。如果我在服務器本身上執行相同的命令,我會得到超過1500行的68列。我正在做的是在表單中選擇一個訂單號或日期,並將數據的高峯剝離到我的客戶希望找到的地方。我確定這不是通過電子表格分發數據的最佳方式。我正在尋找建議和錯誤更正!分發單元格數據

由於提前,

亞當

Set conn = New ADODB.Connection 
Set cmd = New ADODB.Command 
constr = "Provider=REMOVEDFORPRIVACY" 
If (ComboBox1.Value <> "" And ComboBox2.Value <> "") Or (ComboBox1.Value = "" And ComboBox2.Value = "") Then 
    MsgBox "Please select one search method.", vbOKOnly 
    ComboBox2.Value = "" 
    ComboBox1.Value = "" 
ElseIf (ComboBox1.Value <> "" And ComboBox2.Value = "") Then 
    cmd.CommandText = "SELECT * FROM [Run_Data].[dbo].[RunLog_Data] WHERE SnapShot_Date = '" & ComboBox1.Value & "'" 
    conn.Open constr 
    cmd.ActiveConnection = conn 
    Set rst = cmd.Execute() 
    Do While Not rst.EOF 
     o = o + 1 
     If o > 67 Then 
      o = 1     'Column Position 
      n = n + 1    'Row Position 
     End If 
     Range(Cells(n, o), Cells(n, o)).Value = rst(o) 
     rst.MoveNext 
    Loop 
    rst.Close 
    conn.Close 
ElseIf (ComboBox1.Value = "" And ComboBox2.Value <> "") Then 
    cmd.CommandText = "SELECT * FROM [Run_Data].[dbo].[RunLog_Data] WHERE OrderNumber = '" & ComboBox2.Value & "'" 
    conn.Open constr 
    cmd.ActiveConnection = conn 
    Set rst = cmd.Execute() 
    Do While Not rst.EOF 
     'Duplicate above and consolidate code 
    rst.MoveNext 
    Loop 
    rst.Close 
    conn.Close 
End If 
+0

而不是'rst而不是rst.EOF' ...'Loop',你可能只是說'Cells(n,o).CopyFromRecordSet rst'。 (我認爲)(例如'Cells(2,1).CopyFromRecordSet rst'應該[希望]複製從單元格A2開始的記錄集) – YowE3K

+0

Dang,謝謝。不知道我是如何錯過的。也清理它。 – Flibertyjibbet

回答

2

您遇到的問題是,你執行你的rst.MoveNext您填寫每個細胞後。因此,在第一行輸出中,您將拾取第一條記錄的第一列,第二條記錄的第二列......第68條記錄的第68列。然後你填充與第69記錄的第一列輸出的第二行,等

我相信你可以用

Cells(1,1).CopyFromRecordset rst 

(更換電池(1,1)取代你的整個循環無論你的細胞想成爲你的結果的頂部左側拐角)

但或者你可以你如果語句中移動你的rst.MoveNext命令,即

If o > 67 Then 
     o = 1     'Column Position 
     n = n + 1    'Row Position 
     rst.MoveNext 
    End If 
0
Private Sub acceptButton_Click() 
    Set conn = New ADODB.Connection 
    Set cmd = New ADODB.Command 
    constr = "REMOVEDFORPRIVACY" 
    Dim sel_str, sel_type As String 
    If (ComboBox1.Value <> "" And ComboBox2.Value <> "") Or (ComboBox1.Value = "" And ComboBox2.Value = "") Then 
     MsgBox "Please select one search method.", vbOKOnly 
     ComboBox2.Value = "" 
     ComboBox1.Value = "" 
    ElseIf (ComboBox1.Value <> "" And ComboBox2.Value = "") Then 
     sel_type = "SnapShot_Date" 
     sel_str = ComboBox1.Value 
    ElseIf (ComboBox1.Value = "" And ComboBox2.Value <> "") Then 
     sel_type = "OrderNumber" 
     sel_str = ComboBox2.Value 
    End If 
    cmd.CommandText = "SELECT * FROM [Run_Data].[dbo].[RunLog_Data] WHERE " & sel_type & " = '" & sel_str & "'" 
    conn.Open constr 
    cmd.ActiveConnection = conn 
    Set rst = cmd.Execute() 
     Cells(2, 1).CopyFromRecordset rst 
    rst.Close 
    conn.Close 
    Me.Hide 
End Sub 
相關問題