Prije početka rada sa ADO konekcijom potrebno je u Project\referencesuključiti Microsoft activeX data objects 2.5 library. Data grid kontrola, za prikaz podataka kao u tabeli, se uključi u Components\controls i uključiti Microsoft Data Grid Control
Deklaracija konekcije
U proceduri General declarations deklarisati sljedeće:
Dim db As New ADODB.Connection
Dim WithEvents rs As ADODB.Recordset
Otvaranje konekcija
U Form load proceduri upisati sljedeći kôd:
'Otvaranje konekcije
Set rs = New ADODB.Recordset
db.CursorLocation = adUseClient
db.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurDir & "\baza.mdb"
rs.Open "SELECT uplate.rbu, uplate.broju, uplate.guplate, uplate.datumu, uplate.uplaceno, uplate.svrhau, uplate.iznosu FROM uplate;", db, adOpenStatic, adLockOptimistic
Otvaranje konekcije na bazu sa password-om
Ako je access baza zaštićena password-om onda joj se pristupa na sljedeći način:
'Otvaranje konekcije za učitavanje prevoda ako baza ima password
Set rsJezik = New ADODB.Recordset
dbJezik.CursorLocation = adUseClient
dbJezik.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurDir & "\dbOrders.mdb;Jet OLEDB:Database Password=Amica"
rsJezik.Open "SELECT * FROM tbSetup;", dbJezik, adOpenStatic, adLockOptimistic
Linkovanje tabele
Ako je potrebno vršiti linkovanje tabela kroz kôd onda koristiti sljedeći primjer:
Dim j As Long
Dim dbMaster As DAO.Database
'Linkovanje tabela
Set dbMaster = DAO.OpenDatabase(App.path & "\komercijala.mdb")
For j = 0 To dbMaster.TableDefs.Count - 1
If j > dbMaster.TableDefs.Count - 1 Then Exit For
If UCase(Left(dbMaster.TableDefs(j).Connect, 9)) = ";DATABASE" Then
dbMaster.TableDefs.Delete (dbMaster.TableDefs(j).Name)
j = j - 1
End If
Next j
Set dbMaster = Nothing
If Err.Number <> 0 Then Err.clear
ProvjeraBaza "GLAVNA", frmMain.path2
rs.Properties("Unique Table").Value = "ImeTabele"
Primjer query-a sa WHERE uslovom
Ako je uslov fiksan string onda se query kreira sa znakom jednakosti i to pod jednostrukim apostrofima:
SELECT ZDKpolaznici.ime_i_prezime AS Expr1 FROM ZDKpolaznici WHERE (((ZDKpolaznici.funkcija)='direktor'));
U slučaju da je uslov varijabla string tipa onda je sintaksa kao što slijedi:
rsdd.Open "SELECT diplome.tip, diplome.ime, diplome.prezime FROM diplome WHERE (((diplome.tip)='" & tip & "')) AND ((diplome.ime)='" & frmpolaznici.imep & "') AND ((diplome.prezime)='" & frmpolaznici.prezimep & "') ;", dbdiplome, adOpenStatic, adLockOptimistic
Iza znaka jednakosti za postavljanje uslova, prvo dolazi apostrof a zatim navodnici. Isto tako, na kraju uslova, iza navodnika ide apostrof.
Ako je uslov datum koristi se znak # kao u primjeru:
'Učitavanje samo za određenu šifru i samo između dva datuma
oddatuma = Format(Month(frmprint.oddatuma), "00") & "/" &
Format (Day(frmprint.oddatuma), "00") & "/" & Year(frmprint.oddatuma)
dodatuma = Format(Month(frmprint.dodatuma), "00") & "/" &
Format(Day(frmprint.dodatuma), "00") & "/" & Year(frmprint.dodatuma)
query = "SELECT tabela.stavka1, tabela.stavka2, tabela.stavka3, tabela.datum, " & _
"tabela.stavka3 " & _
"FROM tabela2 INNER JOIN tabela ON tabela2.stavka1 = tabela.stavka1 WHERE izlaz.sifraa='" & sifraartikla & "' AND tabela.datum>= #" & oddatuma & "# AND tabela.datum <= #" & dodatuma & "#" rs.Open query, db, adOpenStatic, adLockOptimistic
Varijable oddatuma i dodatuma moraju biti deklarisane kao string. Ovaj tip query-a (sa datumima) radi samo ako su datumi predstavljeni u US formatu (mm/dd/yyyy). Zbog toga prije kreiranja query-a ide Format.
Ako je potrebno učitati maksimalni element iz neke kolone, ali pod uslovom da se traži samo u vrstama koje zadovoljavaju određeni uslov onda se koristi sintaksa kao u primjeru:
rsbroj.Open "SELECT Max(diplome.rbroj) AS MaxOfrbroj FROM diplome WHERE (((diplome.godina)=" & godina & ") AND ((diplome.tip)='" & tip & "'));", dbdiplome, adOpenStatic, adLockOptimistic
'Učitavanje samo svih stavki jedne kolone ali bez ponavljanja iste vrijednosti
rsstampa.Open "SELECTDISTINCT komercijala.skladiste FROM komercijala;",dbstampa, adOpenStatic, adLockOptimistic
Čitanje podataka iz baze
If rs.RecordCount = 0 Then Exit Sub
txtskladiste.text = rs.Fields("skladiste").Value
Ako je polje koje se čita iz baze prazno, prilikom upisa u neku kontrolu nastaje greška. VB pokazuje da je vrijednost za to polje rekordseta = Null. Da se spriječi nastajanje greške vršiti sljedeću provjeru:
Na ovom primjeru je učitavanje putanje do slike i postavljanje te slike u picture kontrolu.
If rspodaci.Fields("slika").Value <> Empty Then
'Učitavanje putanje do slike
picslika.Picture = LoadPicture(rspodaci.Fields("slika").Value)
Else
'Učitavanje slike koja označava da u bazi podataka nije zabilježena putanja do prave slike
picslika.Picture = LoadPicture(CurDir & "\Slike\Slika.jpg")
End If
Ako prilikom primjene prethodne IF naredbe i dalje nastaje greška, onda koristiti sljedeći kod:
If IsNull (rspodaci.Fields("slika").Value) = False Then
'Učitavanje putanje do slike
picslika.Picture = LoadPicture(rspodaci.Fields("slika").Value)
Else
'Učitavanje slike koja označava da u bazi podataka nije zabilježena putanja do prave slike
picslika.Picture = LoadPicture(CurDir & "\Slike\Slika.jpg")
End If
Dodavanje novog zapisa u bazu
Da bi u bazu bi dodan novi zapis potrebno je pokrenuti AddNew proceduru. Na primjeru je i upotreba With strukture za skraćeno pisanje komandi:
With rs
.AddNew
.Fields("sifra").Value = txtSifra.text
.Update
End With
Izmjena zapisa u bazi
Izmjena zapisa se vrši dodjelom vrijednosti stavki rekordseta i pozivom procedure update:
rs.fields("sifra").value= varijabla
rs.update
Brisanje zapisa iz baze
Primjer pokazuje brisanje stavke iz baze uz poruku koja prethodi brisanju i koja zahtijeva potvrdu brisanja izborom YES ili NO.
dim yesno as byte 'YES=6; NO=7
yesno = MsgBox("Jeste li sigurni da želite da izbrišete podatke od " & Chr(10) & _
rspotrosnja.Fields("datum").Value & " datuma ?", vbYesNo + vbExclamation, "Poruka")
If yesno = 6 Then
rspotrosnja.Delete
rspotrosnja.Requery
End IF