Execute SQL SP in Excel VBA

Posted by TheOCD on Stack Overflow See other posts from Stack Overflow or by TheOCD
Published on 2010-02-07T00:49:11Z Indexed on 2010/04/16 6:03 UTC
Read the original article Hit count: 341

Filed under:
|
|

HI

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 If

'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

© Stack Overflow or respective owner

Related posts about excel

Related posts about vba