Professional Documents
Culture Documents
1
Access.......................................................................................................................................1
Linkowanie tabel.............................................................................................................11
Import i Export................................................................................................................16
Migracja..............................................................................................................................17
Kwerendy przekazujące...............................................................................................18
EXCEL......................................................................................................................................19
Przygotowanie środowiska pracy.............................................................................19
Pobranie danych.............................................................................................................23
Table.................................................................................................................................25
PivotTable Report.............................................................................................................26
PivotChart And PivotTable Report...................................................................................27
Programowanie w VBA.................................................................................................27
MSSQL.....................................................................................................................................32
Import i Export danych kreatorem: Import and Export Data (32-bit)......................................37
Import i Export danych kreatorem: Import and Export Data (32-bit)
Wstęp
Office, jako pakiet biurowy jest obecny w praktyczni każdym biurze oferując takie programy
jak Word, Excel, Access i kilka innych nie mniej użytecznych narzędzi. Całość tak została
zaprojektowana, aby mogła pracować razem bez zbędnego wysiłku ze strony użytkownika.
Niewiele jednak osób zdaje sobie sprawę z możliwości łatwej integracji z serwerem MSSQL
2008. Wykorzystamy do tego celu standardowe mechanizmy zaszyte w poszczególne
programy z pakietu Office. Dla bardziej ambitnych czytelników postaram się przygotować
rozwiązanie niestandardowe znacznie rozszerzające standardowe mechanizmy.
Access
Pakiet Office dostarcza zintegrowane środowisko programistyczne przygotowane głównie do
przetwarzania danych. Jest to aplikacja MS Access. We wcześniejszych wersjach tego
programu operowała ona na plikach MDB lub skompilowanych MDE, w Wersji Aktualnej
rozszerzenia plików to .accdb i .accde. Różnice między poszczególnymi wersjami plików z
punktu widzenia użytkownika MSSQL 2008 są nieistotne.
Na początku pracy trzeba sobie przygotować niezbędne środowisko pracy, w skład, którego
będzie wchodzić połączenie plikowe DSN (ang. Data Source Name, nazwa źródła danych).
Opcjonalne jest też takie skonfigurowanie bazy oraz systemu by móc korzystać z danych w
bazie z maszyn zewnętrznych.
Plikowe DSN (File DSN) to specjalny plik zawierający informacje o tym, z jakim serwerem i
konkretnie, którą bazą się łączymy. Najprostszą metodą przygotowania takiego pliku jest
skorzystanie z kreatora dostępnego w Access-e:
Import->External Data -> More -> ODBC Database -> Link to the data source by creating a
linked table.
Rysunek 1
Wybieramy zakładkę: File Data Source, następnie klikamy New, z listy wybieramy SQL
Server Native Client 10, i klikamy w przycisk Next. Następnie wpisujemy nazwę pliku np.
Conn, klikamy Next i Finish. Poczym przechodzimy do kolejnego kreatora, w którym
definiujemy szczegóły połączenia.
Rysunek 2
Pierwszym krokiem jest określenie serwera, z którym będziemy pracować. W nazwie tej jest
zawarta nazwa maszyny oraz nazwa instancji. W przypadku MSSQL 2008 Express będzie to
SQLEXPRESS. Dla przykładu teraz załóżmy, że komputer nosi nazwę TEST. Pełna nazwa
wpisana w polu serwer to TEST\SQLEXPRESS. Szczególnym przypadkiem nazwy
komputera jest kropka lub (local). Są to synonimy odwołania się bezpośrednio do maszyny
lokalnej np. (local)\SQLEXPRESS.
Uwaga: takie definiowanie połączenia na pewno nie zadziała po
przeniesieniu pliku na inny komputer. Kolejnym problemem po przeniesieniu
pliku może okazać się rozpoznanie nazwy komputera. W sieciach bez
odpowiednio skonfigurowanej usługi DNS lub działającego WINS lepszym
rozwiązaniem może okazać się podawanie adresu IP maszyny z SQL Serwerem
np. 192.168.1.2\SQLEXPRESS
Standardowo zainstalowany SQL Serwer blokuje możliwość łączenia się z maszyn
zewnętrznych. Włączenie tej opcji wymaga wykonania kilku czynności tj.
Włączenia protokołu TCP\IP lub Named Pipes
Rysunek 3
Restartu usługi SQL Oraz konfiguracji firewall-a, o ile zachodzi taka konieczność.
Rysunek 4
Dla przykładu nazwa konta, na którym pracujemy to Jan, nazwa komputera, do którego
jesteśmy zalogowani to TEST, wynikiem, czego MSSQL 2008 otrzyma informację podczas
logowania, że użytkownik TEST\Jan próbuje uzyskać jakiś dostęp. Tą informację będzie też
zwracał sam serwer np. za pomocą funkcji CURRENT_USER. Zaletą takiej metody jest to, że
serwer sam wie, kto próbuje się połączyć oraz to, że nie przechowujemy jawnie haseł bazie
Accessowej. Wadą jest natomiast to, że jest to dosyć skomplikowane do ustawienia w
środowisku bez domeny, Active Directory. Druga metoda opiera się na jawnym przekazaniu
loginu i hasła. Domyślnie jest to wyłączone i żeby skorzystać z tej możliwości trzeba
najpierw włączyć MIXED MODE na serwerze SQL.
Rysunek 6
Kolejnym krokiem w kreatorze możemy zmienić domyślną bazę, dla Loginu, z którego
korzystamy.
Rysunek 8
Jeżeli nie stworzyliśmy do tej pory bazy, z którą będziemy pracować możemy posłużyć się
kreatorem dostępnym w Menagment Studio. Jest on dostępny pod prawym klawiszem myszy
w gałęzi Databases.
Rysunek 9
Z listy dostępnych obiektów wybieramy plikowe DSN, które przed chwilą stworzyliśmy
Rysunek 13
Po wybraniu tej opcji pojawi się okienko umożliwiające wybranie kilku obiektów. Dostępna
jest też opcja Zapisz hasło. Pozwala ona zapisać hasło do bazy danych w definicji tabeli
podlinkowanej. Nie jest to zalecane ze względów bezpieczeństwa.
Rysunek 14
Mogą też wystąpić problemy z aktualizacją rekordów. Problem ten można rozwiązać dodając
po stronie serwera SQL kolumnę o dowolnej dozwolonej nazwie i typie danych Timestamp.
Proces kończy zaś odświeżenie linku za pomocą kreatora lub kodu VBA. Tak dodaną
kolumnę dodajemy np. do formularza, jako pole ukryte.
(obrazki)
Lub też za pomocą T-SQL-a
ALTER TABLE [Users] ADD [TStamp] timestamp NULL
Odświeżenie linku: Database Tools -> Linked Table Menager
Rysunek 16
Rysunek 17
Migracja
Do eksportu całej bazy danych wraz z informacjami o indeksach i relacjach możemy
skorzystać z kreatora migracji: Database Tools -> Move Data -> SQL Serwer
Rysunek 18
Rysunek 19
Kwerendy przekazujące
Specjalnym obiektem dostępnym w środowisku Access są kwerendy przekazujące. Od
standardowej kwerendy różnią się tym, że są wykonywane bezpośrednio na serwerze, dzięki
czemu możemy wykonać operacje standardowo niedostępne dla użytkownika Accessa np.
wykorzystać zaawansowane mechanizmy T-SQL.
Aby stworzyć taką kwerendę korzystamy z Create -> Other -> Query Design
W Query type wybieramy Pass-Throught. Okno projektowania w tym momencie zmienia tryb
pracy do tekstowego. W tym momencie możemy pisać polecenia w T-SQL-u lub też je
skopiować z SQL Serwer Menagment Studio.
Końcową operacją jest przypisanie połączenia ODBC skojarzonego z kwerendą przekazującą.
Opcja ta jest dostępną po kliknięciu w Show/Hide -> Property Sheet -> ODBC Connect Str
ikonka trzech kropek włączy kreator wyboru połączenia (np. wcześniej zdefiniowane plikowe
DSN).
Istotny jest parametr Return Records, jeżeli jest ustawiony na No kwerenda nie będzie
zwracać żadnych wyników.
Rysunek 20
EXCEL
Aplikacja Excel jest swego rodzaju scyzorykiem wśród innych aplikacji w pakiecie Office.
Potrafi gromadzić dane, analizować, prezentować, liczyć, można pisać zaawansowane makra
za pomocą VBA. W zasadzie zastosowanie tej aplikacji jest uzależnione tylko od wiedzy
użytkownika Końcowego. Firma Microsoft włożyła wiele wysiłku, aby praca z najnowszymi
wersjami pakietu była efektywna i efektowana zarazem. Dostarczono lub poprawiono szereg
mechanizmów pozwalających analizować dane i prezentować je w zasadzie za pomocą kilku
kliknięć myszy. Tylko jak to sie ma do pracy z MSSQL 2008? Postaram się to pokazać w
zwięzłej formie na kilku następnych stronach.
Przygotowanie środowiska pracy
Podobnie jak w MS Access pierwszym krokiem będzie przygotowanie niezbędnych
elementów pozwalających wygodnie pracować z danymi z bazy danych. Pierwszym krokiem
może być przygotowanie pliku z połączeniem do zewnętrznego źródła danych, którym będzie
wcześniej wspomniany MSSQL 2008 Express Edition. Po uruchomieniu Excel-a
przechodzimy do: Data -> Get External Data -> From Other Sources -> From SQL Serwer –
W tym przypadku Excel sam określa sterownik, z jakiego będziemy korzystać.
Rysunek 21
W tym kroku kreatora wpisujemy nazwę serwera oraz opcjonalnie instancję, do której
będziemy się łączyć oraz wybieramy metodę autoryzacji. Do wyboru mamy Logowanie
zintegrowane lub login i hasło.
UWAGA: wpisanie, jako nazwy serwera (local) lub spowoduje, że połączenie
takie nie będzie działać lub będzie działać niepoprawnie na innej
maszynie np. po przesłaniu pocztą
Data -> Get External Data -> From Other Sources -> From Data connection Wizard. Ta
opcja sprawia, że jesteśmy wstanie wybrać preferowany sterownik do konkretnego zadania.
Rysunek 22
Z listy sterowników wybieramy np: Other/Advanced -> SQL Server Native Client 10.0. Na
następnej stronie kreatora wybieramy serwer, z którym się będziemy łączyć (można wybrać z
listy rozwijanej, jeżeli Serwera na niej nie ma to można nazwę wpisać samodzielnie),
wybieramy metodę autoryzacji zintegrowaną lub opartą na loginie i haśle a następnie
wybieramy bazę danych, z którą będziemy się łączyć. Jeżeli bazy nie ma na Liście to znaczy,
że użytkownik w kontekście teraz pracujemy (metoda zintegrowana) lub login i hasło nie
mają dostępu do wybranej bazy danych. Na końcu możemy przetestować połączenie. W
zakładce Advanced możemy określić TimeOut - jest to o tyle istotne, że czasem operacje które
chcemy wykonać są stosunkowo długie. Modyfikacja tego ustawienia sprawi, że serwer sam
nas nie rozłączy przed upływem określonego czasu. W zakładce All możemy wybrać
szczególny parametr i ustawić go ręcznie. Jest to przydatne w niektórych sytuacjach.
Kolejny krok jest wspólny i polega na wybraniu obiektu, do którego będziemy się łączyć
Rysunek 23
Widzimy tu listę wszystkich obiektów, do których mamy dostęp. Jest informacja o tym w
którym schemacie obiekt się znajduje, data stworzenia obiektu oraz typ VIEW - widoki oraz
TABLE - tabele.
UWAGA: Widok (VIEW) jest to obiekt po stronie SQL Serwera będący swego
rodzaju aparatem przetwarzającym dane z postaci A do postaci B, Tabela
(TABLE) jest fizycznym obiektem przechowującym dane.
Następnie możemy wybrać obiekt z listy lub też odznaczyć: Connect to a specyfic table,
dzięki czemu połączenie nie będzie łączyć się automatycznie z określonym obiektem w bazie
danych. W pewnych okolicznościach jest to wygodne gdyż umożliwia nam wybranie obiektu
z listy wszystkich dostępnych obiektów.
Ostatni krok kreatora to stworzenie pliku o podanej nazwie. Możemy ponadto dodać opis dla
danego połączenia oraz słowa kluczowe
Rysunek 24
Kreator ten ponadto umożliwia wskazanie komórki, od której zaczniemy wstawianie danych
lub też pozwoli na stworzenie nowego skoroszytu w bieżącym pliku.
Przycisk Properities umożliwia zaawansowaną edycję danego obiektu.
UWAGA: Z bardziej przydatnych możliwości wpisania zapytania SQL zamiast
pobierania danych z tabeli lub widoku. Trzeba wybrać zakładkę Definition,
Command type zmienić na SQL, a w polu Command text wpisać polecenie SQL
np.
EXEC usp_test @par='200901'
Dzięki temu uzyskujemy prostą możliwość uruchamiania procedur po stronie SQL-a
zawierających zaawansowaną logikę biznesową.
Rysunek 26
Table
Po wybraniu tej opcji dane zostaną umieszczone bezpośrednio w arkuszu. Jeżeli zaznaczymy
jakąś komórkę wewnątrz obszaru gdzie znajdują się pobrane dane pojawi się dynamiczna
wstążka Table Tools -> Design.
Rysunek 27
Umożliwia ona formatowanie wyników zapytań z bazy danych do postaci przejrzystej tabelki,
przekonwertowania do zwykłego arkusza, trwałego odłączenia od źródła danych, usunięcia
duplikatów oraz stworzenia tabeli przestawnej z otrzymanych wyników.
UWAGA: Tak wygenerowana tabela przestawna odwołuje się do zakresu danych
w Excel
u i po modyfikacji danych w bazie i odświeżeniu danych w tabeli
przestawnej dane nie ulegną modyfikacji. Żeby dane były poprawne trzeba
zaktualizować dane które posłużyły do wygenerowania tabeli przestawnej a
dopiero po tym odświeżamy tabelę przestawną.
Dane pobrane wprost do arkusza są swego rodzaju dynamiczną tabelą posiadającą szereg
funkcjonalności. do ciekawszych należą między innymi możliwość wypełniania formuł
przylegających do obszaru pobranych danych lub zachowanie formatowania i kopiowanie do
nowych komórek zajętych przez dane.
PivotTable Report
Po wybraniu tej opcji zostanie utworzony nowy obiekt tabeli przestawnej
Rysunek 28
Jeżeli wybierzemy jakąś komórkę wewnątrz utworzonego obszaru pojawią się dynamiczne
wstążki z grupy PivotTable Tools. Umożliwiają one pełną konfigurację oraz dostosowanie
szaty graficznej nowo utworzonej tabeli przestawnej. Z przydatnych funkcji mogę wymienić:
Options -> Data -> Change Data Source – umożliwiające dynamiczną zmianę źródła danych.
PivotChart And PivotTable Report
Ta opcja różni się od poprzedniej tylko tym, że jest tworzony wykres bazujący na nowo
utworzonej tabeli przestawnej.
Idea wykresu przestawnego jest taka, że wykres jest bezpośrednim odwzorowaniem tabeli
przestawnej w postaci graficznej. Jakakolwiek zmiana w ustawieniu tabeli (grupowanie,
funkcje agregujące, filtry) wpływa bezpośrednio na wykres.
Programowanie w VBA
Rozszerzenie funkcjonalności aplikacji z pakietu Office jest możliwe na kilka sposobów.
Jednym z nich jest pisanie makr w języku VBA (Visual Basic For Application). Jest to
zubożona wersja języka programowania VB 6.0. W dzisiejszych czasach język ten jest wręcz
archaiczny. Celem tego podrozdziału jest przedstawienie możliwości wykorzystania VBA
wraz z MSSQL 2008 Express, a nie nauka od podstaw. Zakładam, więc że czytelnik posiada
podstawową wiedzę na temat pisania makr.
Na początku trzeba przedstawić kilka pojęć, które przewiną się w tym tekście:
ODBC – Open DataBase Connectivity – Jest to interface programistyczny do łączenia z
bazami danych.
OLEDB – Object Linking and Embedding, Database – Podobnie jak ODBC, jest to interface
programistyczny do łączenia z bazami danycch. W odróżnieniu od ODBC potrafi się łączyć
nie tylko z bazami SQL ale również z plikami.
ADO – ActiveX Data Object – Interface pozwalający wykorzystać dane pobrane z
zewnętrznego źródła w aplikacji.
Connection String – ciąg tekstowy posiadający elementy umożliwiające połączenie z bazą
danych
Obiekt Connection – Obiekt ADO odpowiedzialny za połączenie z bazą danych
Obiekt Command – Obiekt ADO będący pośrednikiem między programem a procedurą.
Umożliw stworzenie sparametryzowanego zapytania.
Obiekt Recordset – Obiekt ADO zawierający wynik zapytania w postaci recordsetu.
Naszą pracę z VBA powinniśmy rozpocząć od schematu blokowego postępowania z bazami
danych.
• Uruchomienie edytora VBA: Alt + F11
• Dodanie referencji do projektu (tylko raz podczas tworzenia projektu): Tools ->
References
•
Rysunek 29
• Deklaracja zmiennych
• Otwarcie połączenia (obiekt Connection)
• Stworzenie obiektu Command
• Dodanie lub ustawienie parametrów
• Wykonanie zapytania (i ewentualne zwrócenie obiektu Recordset)
• Praca z obiektem Recordset
• Zamknięcie połączenia z bazą
• Wyczyszczenie obiektów
Dodanie referencji do projektu jest konieczne, gdy chcemy skorzystać z pełni
funkcjonalności edytora VBE oraz gdy jawnie deklarujemy typy zmiennych. W pewnych
sytuacjach dodanie referencji przeszkadza bardziej niż pomaga, np. gdy próbujemy
uruchomić makro na innej maszynie z niedoinstalowanymi komponentami. Taka sytuacja
spowoduje błąd i makro się nie uruchomi. Swego rodzaju zabezpieczeniem jest korzystanie
ze zmiennych obiektowych i tworzenie obiektu za pomocą instrukcji CreateObject. Poniżej
przykład jawnego deklarowania zmiennych i niejawnego z wykorzystaniem Zmiennych
obiektowych.
Sub test_1()
Dim aConn As ADODB.Connection
Set aConn = New ADODB.Connection
' dalszy kod aplikacji
Set aConn = Nothing
End Sub
Sub test_2()
Dim aConn As Object
Set aConn = CreateObject("ADODB.Connection")
' dalszy kod aplikacji
Set aConn = Nothing
End Sub
Sporym minusem drugiego sposobu jest brak InteliSense w edytorze, niewątpliwą zaletą brak
konieczności tworzenia referencji do biblioteki źródłowej.
Otwarcie połączenia jest pierwszym etapem pracy z samą bazą. Żeby tego dokonać trzeba
zbudować odpowiedni Connection String dostosowany do ustawień samej bazy danych.
Przykładowe ciągi znajdują się poniżej:
Dla połączenia z jawnie deklarowanym hasłem i nazwą użytkownika:
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;Uid=Użytkownik;Pwd=Ha
sło;”
Dla połączenia z wykorzystaniem zintegrowanej metody logowania:
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;Trusted_Connection=ye
s;”
W przypadku zaś, gdy chcemy zapytać o login I hasło lub wybrać metodę zintegrowaną
trzeba posłużyć się pewnym trikiem z ustawieniem jednego parametru połączenia
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
Przykładowy kod z wykorzystaniem ostatniej metody:
Sub test_3()
Dim aConn As ADODB.Connection
Set aConn = New ADODB.Connection
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
MsgBox aConn.State
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Komentarza wymaga tylko aConn.State – Właściwość ta mówi nam, że połączenie jest
otwarte (wartość 1), zamknięte (wartość 0) lub jest w trakcie nawiązywania połączenia
(wartość 2). Jest to również najszybsza i najpewniejsza metoda sprawdzenia czy rzeczywiście
nawiązaliśmy połączenia z bazą danych.
Konstrukcja ADO pozwala pomijać pewne kroki w określonych sytuacjach np. dozwolone
jest stworzenie Recordset-u wprost z połączenia gdyż obiekt Connection zawiera metodę
Execute. Wiąże się to jednak z wieloma ograniczeniami i jest przydatne tylko do bardzo
prostych zapytań.
Sub test_4()
Dim aConn As ADODB.Connection
Set aConn = New ADODB.Connection
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
aConn.Execute "DELETE FROM TABELA", False
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Dlatego też często korzysta się z obiektu Command pozwalającego na bardziej zaawansowaną
pracę z zapytaniami między innymi natywnie wspiera parametry oraz umożliwia
parametryzowanie procedur oraz prostych zapytań SQl-owych. Przykład kodu
parametryzującego kod SQL i wykonujący go dwukrotnie:
Sub test_5()
Dim aConn As ADODB.Connection
Dim aComm As ADODB.Command
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
aComm.Parameters(1).Value = 1
aComm.Execute False
aComm.Parameters(1).Value = 2
aComm.Execute False
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
aComm.Execute False,array(2)
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
W przypadku gdyby wystąpiły jakieś problemy z pobraniem tej kolekcji trzeba sprawdzić czy
użytkownik w kontekście, którego pracujemy ma uprawnienia Execute do wybranych
obiektów:
W przypadku gdyby się okazało, że nie posiadamy stosownych uprawnień możemy je nadać
za pomocą T-SQL-a
GRANT EXECUTE ON [dbo].[sp_ddopen] TO [guest]
GRANT EXECUTE ON [dbo].[sp_sproc_columns] TO [guest]
GO
W sytuacji podbramkowej możemy samodzielnie stworzyć kolekcję parametrów na podstawie
następującego zapytania SQL:
Sub test_7()
Dim aConn As ADODB.Connection
Dim aComm As ADODB.Command
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Przydatna może tu być tablica translacji miedzy typami danych VBA a SQL1
1 http://www.w3schools.com/ADO/ado_datatypes.asp
DataType Enum Value Access SQLServer
adBigInt 20 BigInt (SQL Server 2000 +)
adBinary 128 Binary
TimeStamp
adBoolean 11 YesNo Bit
adChar 129 Char
adCurrency 6 Currency Money
SmallMoney
adDate 7 Date DateTime
adDBTimeStamp 135 DateTime (Access 97 (ODBC)) DateTime
SmallDateTime
adDecimal 14
adDouble 5 Double Float
adGUID 72 ReplicationID (Access 97 (OLEDB)), UniqueIdentifier (SQL Server 7.0
(Access 2000 (OLEDB)) +)
adIDispatch 9
adInteger 3 AutoNumber Identity (SQL Server 6.5)
Integer Int
Long
adLongVarBinary 205 OLEObject Image
adVarWChar 202 Text (Access 2000 (OLEDB)) NVarChar (SQL Server 7.0 +)
adWChar 130 NChar (SQL Server 7.0 +)
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
With .PivotTables("PivotTable1").PivotCache
Set .Recordset = aRs
.Refresh
End With
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Dane tabeli przestawnej są trzymane w obiekcie PivotCache. Obiekt ten może zawierać dane
dla kilku różnych tabel przestawnych i wykresów przestawnych (kopii orginału), przez co
ładowanie danych może się odbyć tylko raz.
UWAGA: Obiekty przed wypełnieniem musi istnieć w arkuszu
Bezpośredniego wklejenia danych do arkusza.
Sub test_10()
Dim aConn As ADODB.Connection
Dim aComm As ADODB.Command
Dim aRs As ADODB.Recordset
Dim rTmp As Range
Dim x As Integer
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
For x = 0 To aRs.Fields.Count - 1
With rTmp.Offset(0, x)
.Value = aRs.Fields(x).Name
.Interior.ColorIndex = 15
.Interior.Pattern = xlSolid
End With
Next
'
rTmp.Offset(1).CopyFromRecordset aRs
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Metoda .CopyFromRecordset wkleja dane bez nagłówków. Dlatego też jest obecna pętla
tworząca prosty nagłówek na podstawie kolekcji z nazwami kolumn.
Pracy z poszczególnymi rekordami i np. wypełnienie listbox-a elementami.
Sub test_11()
Dim aConn As ADODB.Connection
Dim aComm As ADODB.Command
Dim aRs As ADODB.Recordset
Dim x As Integer
With Me.ListBox1
.Clear
.ColumnCount = 3
End With
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
aConn.Close
Set aComm = Nothing
Set aConn = Nothing
End Sub
Wyjaśnienia wymaga tylko Not aRs.EOF- jest to warunek zwracający logiczną prawdę w
momencie dotarcia do końca zbioru rekordów. Przesuwanie jest natomiast realizowane za
pomocą MoveNext.
W przypadku zaś, gdy pracujemy z Accessem możemy wykonywać następujące operacje:
Wykonać kod SQL bezpośrednio na serwerze bez konieczności przebudowy kwerendy
przekazującej. Kod programu jst zupełnie analogony jak przykład 4 i 5. Przykład 11 zaś
może służyć za wzór postępowania w przypadku pracy krokowej z Recordsetem.
Programowo wypełnić kontroli Recordset-em – nie trzeba do niczego się odwoływać
Sub test_12()
Dim aConn As ADODB.Connection
Dim aComm As ADODB.Command
Dim aRs As ADODB.Recordset
aConn.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
aConn.Properties("Prompt") = adPromptAlways
aConn.Open
Sub test_13()
With aConn
.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=Baza;"
.Properties("Prompt") = adPromptAlways
.CursorLocation = adUseClient
.Open
End With
With aRs
.Open "TABELA", aConn, adOpenKeyset, adLockPessimistic
End With
End Sub
With aConn
.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=rar;"
.Properties("Prompt") = adPromptAlways
.CursorLocation = adUseClient
.Open
Set Me.Combo0.Recordset = fGetRecordset(aConn, "SELECT * FROM
sys.TABLES")
.Close
End With
With aComm
Set .ActiveConnection = oConn
.CommandType = adCmdText
.CommandText = sSql
Set fGetRecordset = .Execute
End With
Sub test_15()
With aConn
.ConnectionString =
"Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=rar;"
.Properties("Prompt") = adPromptAlways
.CursorLocation = adUseClient
.Open
Set Me.Combo0.Recordset = fGetRecordset(aConn, "SELECT * FROM
sys.TABLES")
.Close
End With
With aComm
Set .ActiveConnection = oConn
.CommandType = adCmdText
.CommandText = sSql
Set fGetRecordset = .Execute
End With
Rysunek 32
SELECT *
FROM baza_access...tabela
Lub
SELECT *
FROM OPENQUERY (baza_access,'SELECT * FROM TABELA') as t
Z dostępnych dodatkowych opcji mamy tu możliwość utworzenia nowej bazy danych lub też
wybrania istniejącej
Rysunek 34
Kolejnym krokiem jest wybranie opcji kopiowania wskazanych skoroszytów lub też mamy
możliwość samodzielnego napisania zapytania SQL importującego dane
Rysunek 35
W kolejnym kroku mamy możliwość podglądu danych oraz modyfikacji mapowań nazw
kolumn oraz typów danych, jaka nastąpi w procesie przenoszenia danych między źródłem
a bazą docelową
Rysunek 36