开发者

Execute SQL SP in Excel VBA

开发者 https://www.devze.com 2022-12-19 22:17 出处:网络
I am having problem with getting all the columns back when i execute following code in excel vba. I only get 6 out of 23 columns back.

I am having problem with getting all the columns back when i execute following code in excel vba. I only get 6 out of 23 columns back.

Connection, command etc works fine (i can see exec command in the SQL Profiler), data headers are created for all 23 columns but i only get data for 6 column.

Side Note: it's not prod level code, have missed out error handling on purpose, sp works fine in SQL management studio, ASP.Net, C# win form app, it is for Excel 2003 connecting to SQL 2008.

Can someone help me troubleshoot it?

Dim connection As ADODB.connection
Dim recordset As ADODB.recordset
Dim command As ADODB.command
Dim strProcName As String 'Stored Procedure name
Dim strConn As String ' connection string.
Dim selectedVal As String

'Set ADODB requirements
Set connection = New ADODB.connection
Set recordset = New ADODB.recordset
Set command = New ADODB.command

If Workbooks("Book2.xls").MultiUserEditing = True Then
    MsgBox "You do not have Exclusive access to the workbook at this time." & _
    vbNewLine & "Please have all other users close the workbook and then try again.", vbOKOnly + vbExclamation
    Exit Sub
Else
    On Error Resume Next
    ActiveWorkbook.ExclusiveAccess
    'On Error GoTo No_Bugs
End I开发者_运维问答f

'set the active sheet
Set oSht = Workbooks("Book2.xls").Sheets(1)

'get the connection string, if empty just exit
strConn = ConnectionString()
If strConn = "" Then
    Exit Sub
End If

' selected value, if <NOTHING> just exit
selectedVal = selectedValue()
If selectedVal = "<NOTHING>" Then
    Exit Sub
End If

If Not oSht Is Nothing Then
    'Open database connection
    connection.ConnectionString = strConn
    connection.Open

    ' set command stuff.
    command.ActiveConnection = connection
    command.CommandText = "GetAlbumByName"
    command.CommandType = adCmdStoredProc
    command.Parameters.Refresh
    command.Parameters(1).Value = selectedVal

    'Execute stored procedure and return to a recordset
    Set recordset = command.Execute()

    If recordset.BOF = False And recordset.EOF = False Then
        Sheets("Sheet2").[A1].CopyFromRecordset recordset
        ' Create headers and copy data
        With Sheets("Sheet2")
           For Column = 0 To recordset.Fields.Count - 1
              .Cells(1, Column + 1).Value = recordset.Fields(Column).Name
           Next
           .Range(.Cells(1, 1), .Cells(1, recordset.Fields.Count)).Font.Bold = True
          .Cells(2, 1).CopyFromRecordset recordset
        End With
    Else
        MsgBox "b4 BOF or after EOF.", vbOKOnly + vbExclamation
    End If

     'Close database connection and clean up
    If CBool(recordset.State And adStateOpen) = True Then recordset.Close
    Set recordset = Nothing

    If CBool(connection.State And adStateOpen) = True Then connection.Close
    Set connection = Nothing
Else
  MsgBox "oSheet2 is Nothing.", vbOKOnly + vbExclamation
End If


This line:

Sheets("Sheet2").[A1].CopyFromRecordset recordset

is duplicating the basics of the With block after it. Either use it or the With block, but not both.

Also use variable names that don't match the typenames, it's just asking for hard to find problems.

Other than that I would suspect either the Stored Procedure, or maybe too much data is being pulled.

0

精彩评论

暂无评论...
验证码 换一张
取 消