Autor: Samir Gutić
Pročitano: 4047 puta

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

­­­­­­