Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 7
  • 257

Nawiązując do mojego poprzedniego pytania:

https://quorum.akademiq.pl/discussion/4697/funkcja-excela-wykonujaca-polecenia-sql-via-ace-oledb-jak-zwrocic-array

chciałbym zapytać, czy i jak można przerobić makro, by wykorzystywało MS SQL engine zamiast ACE OLEDB?

Przypuśćmy, że odpytujemy nie zakres danych, a plik zewnętrzny z bazą danych MS SQL LocalDB.

Jak wyglądałoby takie makro. Connection string, recordset. Tak samo czy wymagałoby przebudowy?

Co powinien zainstalować użytkownik, by móc skorzystać z przesłanej przeze mnie aplikacji.

Czy mógłbym przesłać w podkatalogu Data wymagane z MS SQL dll?

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 06.03.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedź (1)

  • 14

Makro nie wymaga wielkich zmian. Przy połączeniu wykorzystującym klasyczne ADO, wystarczy zaktualizować łańcuch połączenia oraz zapytanie do bazy danych. Modyfikacja łańcucha połączenia musi uwzględniać konstrukcję specyficzną dla wybranego dostawcy OLEDB (ACE, SQL Server, itd.). Dla localDb kompletny przykład wygląda następująco:

Dim conn As ADODB.Connection, rs As ADODB.Recordset
Dim sqlStr As String
connStr = "Driver={SQL Server native Client 11.0};Server=(LocalDB)\v11.0;AttachDBFileName=D:\temp\tsetDB.mdf;Database=tsetDB;Trusted_Connection=Yes"

     sqlStr = "Select * from MyTable"

     Set conn = New ADODB.Connection
     conn.ConnectionString = connStr
     conn.Open

     Set rs = conn.Execute(sqlStr)
     
     rs.Close
     conn.Close

Odnośnie instalacji, to użytkownik powinien mieć zainstalowane SQL Server Express lub localDB (wymagana jest instalacja z MSI lub dowolnego instalatora SQL Server). Instalację localDB można przeprowadzić w trybie bezobsługowym, korzystając z parametrów linii poleceń:

/quiet /qn IACCEPTSQLLOCALDBLICENSETERMS=YES

 

  • Odpowiedział
  • @ | 10.03.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Panie Jacku, co jednak zrobić, gdy źródłem danych był sam Excel? Np. w jednej z moich aplikacji odwołuję się do danych w tabeli np w ten sposób:

'Deklaracja arkusza:
Myworkbook = Application.ThisWorkbook.FullName

'Łańcuch połączenia:
Myconnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Myworkbook & ";" & _
"Extended Properties='Excel 12.0 Xml;HDR=YES;MAXSCANROWS = 0;IMEX=2'"
'str SQL odnosi się do tabeli w arkuszu Table1
sqlStr= ""SELECT * FROM [Table1$]"

Pozdrawiam Pana serdecznie
Skomentował : @ Jacek_Kotowski ,20.05.2015
  • 60
  • 54
  • 94