Как выполнить хранимую процедуру SQL в Microsoft Excel?

Как я могу выполнить хранимую процедуру в Microsoft Excel и получить все данные, которые он возвращает?

1
задан Excellll
16.11.2022 11:26 Количество просмотров материала 2450
Распечатать страницу

3 ответа

это задание для подключения ADODB в VBA. Вот ссылка с примером кода для простого запроса SELECT, но это также будет обрабатывать хранимые процедуры.

http://www.ozgrid.com/forum/showthread.php?t=83016&page=1

ключевые пункты должны объявить ADODB.Connection,ADODB.Recordset и строка подключения, соответствующая вашей базе данных. После открытия соединения вы выполняете инструкцию SQL, используя следующий синтаксис (взятый из ссылка):

With cnt 
    .CursorLocation = adUseClient 
    .Open stADO    // stADO is the connection string.
    .CommandTimeout = 0 
    Set rst = .Execute(stSQL) 
End With

затем переместите данные из набора записей (rst выше) в диапазоне, используя Range.CopyFromRecordSet.

5
отвечен Excellll 2022-11-17 19:14

Я не уверен, о последнем воплощении Excel, но в 2000 и 2003 все, что вы могли сделать, это получить доступ к представлению и иметь его данные отображаются на листе excel.

основным преимуществом хранимой процедуры будет возможность параметризации результата, но для этого вам понадобится какой-то пользовательский интерфейс, и вам понадобится Способ программного изменения определения запроса после его первого определения в excel. Мы не нашли способ сделать это, но с помощью представлений достаточно функциональность для того, что нужно делать.

1
отвечен takrl 2022-11-17 21:31

ВБС очень похож на @Ответить Excellll, и я использовал его в своей работе.

используйте эту маленькую функцию утилиты:

Public Function IsEmptyRecordset(rs As Recordset) As Boolean
     IsEmptyRecordset = ((rs.BOF = True) And (rs.EOF = True))
End Function

и вот большая функция (я приношу извинения за вшивое выравнивание абзаца):

Option Explicit

Public Sub OpenConnection()
Dim conn As ADODB.Connection
Dim str As String
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim myPath
Dim fld
Dim i As Integer

On Error GoTo errlbl


'Open database connection
Set conn = New ADODB.Connection

'First, construct the connection string.

'NOTE:  YOU CAN DO THIS WITH A STRING SPELLING OUT THE ENTIRE CONNECTION...
'conn.ConnectionString = _
'    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
'    "Data Source=" & _
'    myPath & "\ConnectionTest.mdb"

'...OR WITH AN ODBC CONNECTION YOU'VE ALREADY SET UP:
conn.ConnectionString = "DSN=myDSN"

conn.Open       'Here's where the connection is opened.

Debug.Print conn.ConnectionString  'This can be very handy to help debug!

Set rs = New ADODB.Recordset
'Construct string.  This can "Select" statement constructed on-the-fly,
'str = "Select * from vwMyView order by Col1, Col2, Col3"  
'or an "Execute" statement:
str = "exec uspMyStoredProc"

rs.Open str, conn, adOpenStatic, adLockReadOnly  ‘recordset is opened here

If Not IsEmptyRecordset(rs) Then     
    rs.MoveFirst

    'Populate the first row of the sheet with recordset’s field names
    i = 0
    For Each fld In rs.Fields
        Sheet1.Cells(1, i + 1).Value = rs.Fields.Item(i).Name
        i = i + 1
    Next fld
    'Populate the sheet with the data from the recordset
    Sheet1.Range("A2").CopyFromRecordset rs     


Else
    MsgBox "Unable to open recordset, or unable to connect to database.", _
       vbCritical, "Can't get requested records"

End If

'Cleanup
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

exitlbl:
  Debug.Print "Error: " & Err.Number
  If Err.Number = 0 Then
    MsgBox "All data has been pulled and placed on Sheet1", vbOKOnly, "All Done."
  End If
  Exit Sub
errlbl:
   MsgBox "Error #: " & Err.Number & ", Description:  " & Err.Description, _     vbCritical, "Error in OpenConnection()"
Exit Sub
'Resume exitlbl
End Sub

надеюсь, что это помогает.

1
отвечен F106dart 2022-11-17 23:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх