Vba I ado zadanie 1 (Łączenie się serwerem ms sql server) ado



Pobieranie 24.54 Kb.
Data01.05.2016
Rozmiar24.54 Kb.


VBA i ADO

Zadanie 1 (Łączenie się serwerem MS SQL Server)

ADO posiada kilka możliwości nawiązania połączenia z danymi SQL Servera. Najprościej jest skorzystać z dostawcy SQLOLEDB.

Poniższy kod należy utworzyć w VBA jako moduł MS Accessa. Nawiązuje on połączenie z bazą pubs serwera o nazwie C115-25 na lokalnym komputerze. Nazwę C115-25 należy zmienić.



Uwaga. Ze względu na sposób połączenia zdefiniowany w łańcuchu połączenia poniższego przykładu, serwer z którym się łączymy musi pracować w trybie autoryzacji „mixed”. Zmianę trybu autoryzacji można wykonać z poziomu Enteprise Managera: prawym przyciskiem myszy kliknąć na nazwie serwera, potem Properties | Security | Authentication | SQL Server and Windows.
Sub ConnectToMSSQL()

Dim conn As ADODB.Connection

Dim cmd As ADODB.Command

Dim rs As ADODB.Recordset


Set conn = New ADODB.Connection

Set cmd = New ADODB.Command


conn.Provider = "SQLOLEDB"

conn.ConnectionString = "Data Source=C115-25;” & _

”Database=pubs;uid=sa;password=;"

conn.Open

If conn.State = adStateOpen Then

MsgBox "Connection successful"

End If

conn.Close



Set conn = Nothing
End Sub

Zadanie 2

Utworzymy kwerendę do zdalnego źródła danych. MS SQL Serwerem. Aby połączyć się z ze zdalnym źródłem danych MS SQL Servera kwerenda ma być skierowana do bazy danych o nazwie pubs na serwerze o nazwie TestMSSQL (jeżeli Twój serwer ma inną nazwę, to trzeba jej użyć). Po wykonaniu poniższej procedury wynik można obejrzeć w okienku Immediate.


Sub TestSQLOLEDB()

Dim conn As ADODB.Connection

Dim cmd As ADODB.Command

Dim rs As ADODB.Recordset


‘utworzenie połączenia z bazą danych

Set conn = new ADODB.Connection

Conn.provider = ”sqloledb”

Conn.ConnectionString = ”data source=TestMSSQL;uid=sa;initial catalog=pubs”

Conn.open
‘budowanie zapytanie SQL

Set cmd = new ADODB.Command

cmd.ActiveConnection = conn

cmd.CommandText = ”SELECT authors.au_lname, authors.au_fname” & _

FROM authors”

cmd.CommandType = adCmdText


‘wykonanie zapytania

Set rs = cmd.adCmd.Execute

Debug.Print = rs.GetString

End sub
Zadanie 3

Utworzyć formularz w MS Accessie, w którym będą dwa pole tekstowe i przycisk. Do pól wpisywać będziemy nazwę instancji MS SQL Servera, nazwę bazy danych i nazwę tabeli w tej bazie. Po kliknięciu przycisku powinno ostatecznie pojawić się okienko komunikatu z informacją o tym ile jest rekordów w podanej tabeli.
Otwieranie bazy danych Microsoft Jet (czyli MS Access) w trybie do odczytu-zapisu
Zadanie 4

Połączyć się z bazą MS Accessa (przykładowa baza Northwind). Poniżej jest pokazany podstawowy szkielet procedury.


Sub ConnectToJet()

Dim conn As ADODB.Connection

Dim path As String

path = "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"

Set conn = New ADODB.Connection

conn.Provider = "Microsoft.Jet.OLEDB.4.0"

conn.ConnectionString = "Data source=" & path

conn.Open

‘tutaj przetwarzamy dane, a nastęonie można połączenie zamknąć

conn.Close

Set conn = Nothing

End Sub



Zadanie 5


Rozbudować przykład z Zadania 4 w następujący sposób. Utworzyć formularz w Accessie z polem tekstowym, w które można wpisać ścieżkę do pliku z bazą danych Jet (pliki MS Accessa *.mdb). Następnie po kliknięciu przycisku na formularzy, w okienku Immediate pokazać się powinna lista tabel bazy, z którą się łączymy.

Wsk.


Należy skorzystać z obiektu ADOX.Catalog oraz ADOX.Table:
Dim cat as new ADOX.Catalog

Dim tbl as ADOX.Table


...

cat.ActiveConnection = conn

...

for each tbl In cat.Tables



Debug.Print tbl.Name & ”---” & tbl.Type

Next tbl

Zadanie 6


Skopiuj bazę danych kadry.mdb.

Wykorzystując ADO napisz procedurę w VBA wypisującą osoby, które mają prawo jazdy. Następnie po wciśnięciu OK w oknie dialogowym procedura ta ma wykonać podwyżkę o 10% dla wszystkich takich osób. Przy wciśnięciu „Cancel” podwyżka nie będzie wykonana.

Wsk.

Należy wykorzystać funkcję MsgBox, która zwraca kod przyciśniętego przycisku (patrz pomoc do VBA).



Można wykorzystać stałą vbCrLf, która oznacza przejście do nowej linii. Stała ta może być dołączana do ciągu znaków, jeśli chcemy by ciąg ten był wyświetlany w kilku liniach.


  1. Wykorzystaj obiekt ADO.Recordset, który pobierze dane z tabeli Pracownicy. Podwyżkę wykonuj na tym samym rekordsecie.

Sub podwyzka()

Dim cnCurrent As ADODB.Connection

Dim rsPrac As New ADODB.Recordset

Dim policz As Long

Dim intRes As Integer


Set cnCurrent = CurrentProject.Connection

rsPrac.Open "Pracownicy", cnCurrent, adOpenDynamic, adLockOptimistic, adCmdTable


policz = 0

rsPrac.MoveFirst

While Not rsPrac.EOF

If (rsPrac![prawo jazdy] = yes) Then

policz = policz + 1

End If


rsPrac.MoveNext

Wend


intRes = MsgBox("Liczba pracowników z prawem jazdy: " & policz & " & _

vbCrLf & "po naciśnięciu OK nastąpi podwyżka", vbOKCancel)

If intRes = vbOK Then

rsPrac.MoveFirst

While Not rsPrac.EOF

If (rsPrac![prawo jazdy] = yes) Then

RsPrac!Stawka = rsPrac!Stawka*1.1

End If


rsPrac.MoveNext

Wend


End If
End Sub



  1. Wykorzystaj obiekt ADODB.Command i odpowiednie zdanie w SQL. Podwyżkę wykonaj jako zdanie SQL w obiekcie ADODB.Connection. Rekordset otwarty przez obiekt ADODB.Command jako zdanie SQL nie może być aktualizowany ani nieustawia poprawnie własności RecordCount. Dlatego w zadaniu tym po otwarciu rekordsetu wykonaj od razu podwyżkę, a liczbę zaktualizowanych rekordów wyświetl wykorzystując parametr RecordsAffected metody (procedury) Execute obniektu Command.

Sub podwyzka2()

Dim cnCurrent As ADODB.Connection

Dim rsPrac As New ADODB.Recordset

Dim cmdPrac As New ADODB.Command

Dim RecordsAffected As Integer


Set cnCurrent = CurrentProject.Connection

With cmdPrac

Set .ActiveConnection = cnCurrent

.CommandType = adCmdText

.CommandText = "SELECT * From Pracownicy WHERE [data zatrudnienia]" _

& [Prawo jazdy]=yes"

End With
Set rsPrac = cmdPrac.Execute

With cmdPrac

Set .ActiveConnection = cnCurrent

.CommandType = adCmdText

.CommandText = “UPDATE Pracownicy SET stawka=stawka*1.1” & _

“WHERE [Prawo jazdy]=yes"

End With
cmdPrac.Execute RecordsAffected
MsgBox "Zaktualizowano " & RecordsAffected & " rekordów"

End Sub


Otwieranie arkusza MS Excel przy użyciu ADO

Zadanie 7


Przetestować poniższą procedurę, która demonstruje, w jaki sposób można otworzyć przy użyciu ADO arkusz kalkulacyjny.

Sub ConnectToExcel()

Dim conn As ADODB.Connection

Set conn = New ADODB.Connection

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data source=C:\bazy_danych\raport.xls;Extended Properties=Excel 8.0"



MsgBox "Arkusz zpstał otwarty."
End Sub







©absta.pl 2019
wyślij wiadomość

    Strona główna