Start > Kursy on-line > Excel - makra i VBA

Excel - makra i VBA


Operacje na danych i rekordach bazy, uruchamianie procedur składowanych

Poprzednia część dotyczyła głównie wybierania/czytania danych z bazy. W tym miejscu, który kończy nasze rozważania na temat obsługi baz danych przy pomocy ADODB w VBA, zatrzymamy się chwilę nad poleceniami, które umożliwiają realizowanie innych operacji na bazach danych. W tym celu przypomnijmy sobie, jak wygląda tabela służąca nam za środowisko testowe:



Poza SELECT, podstawowymi poleceniami SQL umożliwiającymi operacje na danych w bazie są:

    • INSERT - czyli wstaw - dodaje nowe rekordy do konkretnej tabeli bazy danych. Jego składnia wyglądałaby w przypadku powyższej tabeli następująco:

      INSERT INTO dane_import (nazwa_klienta) VALUES ("Klient 100")

      taka konstrukcja, doda nowy rekord do tabeli i wypełni w nim pole "nazwa_klienta" wartością "Klient 100"





  • UPDATE - czyli aktualizuj - polecenie, dzięki któremu można zmienić zawartość określonych pól i rekordów, także wg podanego warunku umieszczonego w klauzuli WHERE. Mogłoby wyglądać np. tak:

    UPDATE dane_import SET produkt='Produkt 100' WHERE nazwa_klienta='Klient 100'

    co zaowocuje wpisaniem do rekordu, w którym nazwa_klienta jest równa "Klient 100" w pole "produkt" wartości "Produkt 100":



  • DELETE - czyli usuń - usuwa rekordy z konkretnej tabeli wg podanych warunków (następujących po klauzuli WHERE). Czyli jeśli byśmy chcieli usunąć poprzednio dodany i modyfikowany rekord musielibyśmy użyć polecenia:

    DELETE FROM dane_import WHERE produkt='Produkt 100' AND nazwa_klienta='Klient 100'



W skrócie powiedzieliśmy sobie jak wyglądają najważniejsze polecenia języka SQL - pominęliśmy inne, bardziej skomplikowane zadania - gdyż nie są one przedmiotem tego kursu. Jeśli teraz będziemy chcieli polecenia te przekazać do bazy danych za pomocą języka VBA z poziomu programu Excel (lub tak naprawdę każdego innego w ramach pakietu Office), wystarczy użyć metody .Execute obiektu Connection. Innymi słowy, kod który usuwał by rekord z powyższego przykładu zastosowany dla naszej przykładowej bazy (czyli umieszczonej na serwerze o IP: 10.10.10.1, bazie danych: dane_import, użytkowniku: admin oraz haśle: haslo) wyglądałby następująco:


Sub modyfikacja_danych()

'definiujemy odpowiednie zmienne ADODB
Dim cn As ADODB.Connection

'tworzymy rerefencje do obiektów:
Set cn = New ADODB.Connection

'łączymy się ze źródełm danych:
cn.Open "Provider=SQLOLEDB;Data Source='10.10.10.1';Initial Catalog='moja_baza';User ID='admin';Password='haslo'"

'wykonujemy polecenie SQL typu SELECT:
cn.Execute "DELETE FROM dane_import WHERE produkt='Produkt 100' AND nazwa_klienta='Klient 100'"

'zamykamy połączenie z bazą:
cn.Close

End Sub
Widzimy, że aby wykonać tego typu polecenie, to o ile nie potrzebujemy od bazy danych żadnych rezultatów, możemy nie korzystać w ogóle z poprzednio poznanego obiektu typu Recordset. Niemal identycznie wygląda polecenie które ma za zadanie uruchomić procedurę składowaną na serwerze SQL:


Sub modyfikacja_danych()

'definiujemy odpowiednie zmienne ADODB
Dim cn As ADODB.Connection

'tworzymy rerefencje do obiektów:
Set cn = New ADODB.Connection

'łączymy się ze źródełm danych:
cn.Open "Provider=SQLOLEDB;Data Source='10.10.10.1';Initial Catalog='moja_baza';User ID='admin';Password='haslo'"

'wykonujemy polecenie SQL typu SELECT:
cn.Execute "EXECUTE testowa 100"

'zamykamy połączenie z bazą:
cn.Close

End Sub
Nasze powyższe polecenie różni się tylko tym, że po użyciu metody .Execute w łańcuchu polecenia używamy ponownie sformułowania EXECUTE zaraz po nim musimy podać nazwę procedury składowanej oraz ewentualne parametry (w naszym przykładzie nazwą jest "testowa", a parametr podany został jako liczba 100).

Pomijamy w tym miejscu szczegółowy opis tego, czym są procedury składowane (tzw. "Stored Procedures") MS SQL Server. Należy jednak wspomnieć przynajmniej, iż pełnią one funkcję małych programów, zapisanych jednak na serwerze SQL, które zawierają określone sekwencje poleceń. Pełnią niemal identyczną rolę na serwerze SQL jak procedury języka VBA w plikach Excel - służąc automatyzacji powtarzalnych poleceń, specyficznych jednak dla baz danych.