Izvršavanje sql upita u vba. Pokrenite upit iz Accessa putem Excel upita u VBA. SELECT upit prema bazi podataka u VBA

28.03.2020 Savjet

Access je spremio upit koji je razvijen pomoću alata za izgradnju upita myQuery. Baza podataka je povezana sa sustavom putem ODBC veze. Sve su makronaredbe uključene.

Excel Has uspostavlja ADODB vezu preko koje se povezuje s bazom podataka

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "MyDatabase.accdb" End With

Obično samo napišete svoj SQL, koji radi odlično, a zatim napravite nešto poput

Dim sqlQuery As String sqlQuery = "SELECT * FROM myTable" Set rs = New ADODB.Recordset rs.Open sqlQuery, con, ...

Ali želim pristupiti upitu koji sam pohranio u pristupnoj bazi podataka. Dakle, kako da pozovem spremljeni upit u bazi podataka koju sam upravo povezao.

Već sam probao

  1. con.Execute("EXEC myQuery"), ali to mi je reklo da se myQuery ne može pronaći.
  2. rs.Otvorite "myQuery", ali je nevažeći i zahtijeva izjave SELECT/etc iz njega

5 odgovora

Mislim da ovo možete zamisliti kao pohranjenu proceduru.

Ako počnemo neposredno prije Dim sqlQuery As String

Dim cmd kao novi ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

Nakon toga preuzmite svoj rad sa setom zapisa.

Skoro ste stigli

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End With con.Execute "Moj upit"

Samo ostavi Exec.

Također možete dodati parametre, ovo je malo zastarjelo, ali bi trebalo pomoći: ažurirajte 2 polja u Access bazi podataka s Excel podacima i možda makronaredbom

Uspio sam pokrenuti upit za ažuriranje koji je već bio spremljen u Accessu koristeći:

Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

To mi je davalo pogreške sve dok razmake u nazivu upita nisam zamijenio podvlakama i u bazi podataka programa Access i u izjavi za izvršenje.

To je neka vrsta hakiranja, ali možete zatražiti zahtjev. To jest, zamijenite SQL redak sa sljedećim:

SqlQuery = "SELECT * FROM QueryName;"

Prije početka potrebno je provjeriti je li Access baza podataka spremljena, tj. pritisnite Ctrl + S (nije dovoljno da se upit izvrši u Accessu).

Prošlo je dosta vremena otkako je ova tema napravljena. Ako sam dobro razumio, možda bih mogao dodati nešto korisno. Dao sam ime onome što OP opisuje: to je proces koristeći SQL iz upita pohranjenog u ACCDB za pokretanje u VBA putem DAO ili ADOBD. Nazvao sam ga "Pružatelj svojstava objekta", čak i s akronimom OPP u svojim bilješkama i za prefiks/sufiks naziva objekta.

Ideja je da postojeći objekt u ACCDB-u (obično upit) izlaže svojstvo (obično SQL) koje treba koristiti u VBA. Sastavio sam funkciju samo da izvučem SQL iz upita za ovo; Pogledaj ispod. Upozorenje: Žao mi je, ali ovo je sve u DAO-u, ne koristim puno ADODB. Nadam se da će vam ideje i dalje biti korisne.

Čak sam otišao toliko daleko da sam razvio metodu za korištenje/umetanje zamjenjivih parametara u SQL koji dolazi iz ovih OPP upita. Zatim koristim VBA.Replace() da izvršim zamjenu prije upotrebe SQL-a u VBA.

Put DAO objekta do SQL upita u ACCDB-u je sljedeći:

MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

Zamjenjive parametre koristim procjenjujući što treba zamijeniti i biram neobično ime za parametar koji ne može postojati u stvarnoj bazi podataka. Uglavnom, jedine zamjene koje sam napravio su nazivi polja ili tablica ili izrazi klauzula WHERE i HAVING. Pa ih nazivam stvarima poput "(ReplaceMe00000001)", a zatim koristim funkciju Replace() da obavim posao...

SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter")

Zatim upotrijebite sqlText u VBA. Evo primjera rada:

Javna funkcija MySqlThing() Dim sqlText as String Dim myParamater as String Dim myExpression as String "Postavi sve. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "SomeDateOrSomething12/31/2017" „Izvršite zamjenu . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Zatim upotrijebite SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.Application Dim db As DAO.Database Dim qdef s As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Postavi app = Access.Application Postavi db = app.CurrentDb Postavi qdefs = db.QueryDefs Postavi qdef = qdefs(oppName) oppGetSqlText = qdef.SQL End Function

Pristup omogućuje programsko kreiranje nizova SQL upita, kao i nizova koji služe kao vrijednosti za svojstva obrazaca, izvješća itd., parametara funkcija itd., a koji također moraju biti usklađeni sa SQL sintaksom. Istodobno, moramo imati na umu da konstante uključene u takav red također moraju biti oblikovane prema SQL pravilima, naime:

  • u brojevima decimalni razdjelnik mora biti točka,
  • nizovi moraju biti u navodnicima ili apostrofima (a navodnici odnosno apostrofi se udvostručuju unutar niza),
  • Datumi moraju biti okruženi hash oznakama i napisani u američkom formatu (mm/dd/gggg) s kosom crtom kao razdjelnikom.

    Ako se to prekrši, mogući su sljedeći učinci:

  • broj poput 10,5 sa zarezom umjesto točke bit će percipiran kao popis dvaju brojeva 10 i 5, što će dovesti do neke vrste odstupanja u broju polja,
  • string poput Vasya bez navodnika i apostrofa bit će percipiran kao naziv polja, ako takvo polje postoji, ili kao naziv parametra koji će se odmah tražiti,
  • datum poput 1/2/2010 ili 1-2-2010 bez hash oznaka će se tretirati kao aritmetički izraz (s dijeljenjem i oduzimanjem),
  • datum poput 1.2.2010. protumačit će se kao razlomački broj s dvije decimalne točke i rezultirat će pogreškom,
  • datum s hash oznakama, ali ne u američkom formatu, bit će percipiran kao datum, ali drugačiji (dan i mjesec će se promijeniti).

    Dolje u svakom odjeljku nalazi se primjer SQL niza koji bi se proizveo kada ga programski generirate, nakon čega slijedi VBA kod koji ga stvara. Ispod je vrlo korisna preporuka.

    1. Korištenje brojeva

    SELECT * FROM Table WHERE (((Tablica .Količina)= 12 .197 ));
    VBA v1

    Dim q Kao jednostruko q = 12 .197 strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & q & "));"
    VBA v2

    Dim q As String q = "12,197" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & Str (q) & "));"
    Bilješka:

  • VBA v1- za cijele brojeve. Za razlomačke brojeve ovo je poseban slučaj samo kada je razdjelnik sustava točka.
  • VBA v2- ispravnija opcija, jer u klasičnom programiranju samo nizovi mogu biti spojeni s nizovima, dok VBA v1 koristi implicitnu konverziju tipa, iako nije bilo pritužbi na ovu metodu za cijele brojeve. (Primjer je naveden kada je sistemski razdjelnik zarez.)
  • Ponekad se funkcija CStr() također koristi za konverziju, ali nije uvijek primjenjiva, jer vraća broj kao niz, gdje je zapisan kroz sistemski razdjelnik, dok SQL prihvaća samo točku kao razdjelnik.
  • NB! Kada koristite netipične sistemske razdjelnike, gornji primjeri možda neće raditi; u tim slučajevima trebate programski zamijeniti sistemski razdjelnik točkom. Ispod je funkcija koja vraća sistemski graničnik.
    Funkcija GetDecimalSeparator() Kao String GetDecimalSeparator = Format ( 0 #, "." ) End Function Također imajte na umu da neke standardne radnje programa Access možda neće raditi u ovom slučaju.

    2. Korištenje žica

    SELECT * FROM Table WHERE (((Table .Name)="All" ));
    VBA v1

    Dim q As String q = "All" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
    VBA v2

    Dim q Kao niz q = "Sve" strSQL = "SELECT * " _ & "FROM Table" _ & "WHERE (((Table.Quanty)="" & DoubleApostrophe(q) & "" ));"
    Bilješka:

  • VBA v1: DoubleQuote() - funkcija koja se udvostručuje citati.

    Primjer:
    uvjet uzorkovanja:
    a"a"s SQL:
    WHERE polje=" a""a"s"VBA:
    strWhere = " WHERE polje=""" & "a""""a"s" & """ "

  • VBA v2:: DoubleApostrophe() - funkcija koja se udvostručuje apostrofi.

    Primjer:
    uvjet uzorkovanja:
    a"a"s SQL:
    WHERE polje=" a"a""s"VBA:
    strWhere = " WHERE polje="" & "a""a""s" & "" "

  • Gore spomenute funkcije DoubleQuote i DoubleApostrophe NISU ugrađene u Access funkcije, već korisnički definirane funkcije, čija je implementacija prepuštena nahođenju programera. Konkretno, u Access verzijama 2000 i novijim možete koristiti ugrađenu funkciju Zamijeni u tu svrhu, au 97 i nižim možete koristiti ovu funkciju:

    Javna funkcija Replace97(StrMain As String, StrFind As String, StrZam As String) As String On Error GoTo err Dim pos As Long If StrFind = "" Then GoTo err If StrMain = "" Then Replace97 = StrZam: Izlaz iz funkcije Do InStr( 1 , StrMain, StrFind) = 0 pos = InStr( 1 , StrMain, StrFind) StrMain = sredina (StrMain, 1 ,pos- 1 ) & StrZam & mid (StrMain, pos + Len(StrFind), Len(StrMain)) Petlja Replace97 = StrMain Exit Function err: Replace97 = StrMain End Function
    3. Upotreba hurmi

    SELECT * FROM Table WHERE (((Table .TimeOpen)=# 3 /31 /2003 11 :17 :19 #));
    VBA

    Dim q Kao Datum q = Sada strSQL = "SELECT * " _ & "FROM Table" _ & "WHERE (((Table.TimeOpen)=#" & Format (q, "mm\/dd\/yy hh\:mm \:ss") & "#));"
    Bilješka:

  • Microsoft JET SQL operira s datumima u američkom formatu, tj. točno u gornjem obliku Mjesec/Dan/Godina.
  • Nemojte izostaviti znakove # (obuhvata cijelu konstantu datuma i vremena) i \ (sprječava / i : da se zamijene postavkama lokalne postavke, što je ono što funkcija Format obično čini i što sprječava pravilan rad SQL naredbe).
  • Preporuča se pročitati ovdje: o načinima pohranjivanja datuma/vremena.
  • NB! Ne biste trebali koristiti konverziju datuma u Integer (ili Long), jer u Accessu i SQL Serveru, različiti brojevi odgovaraju istom datumu i kada se usporede, možete dobiti neočekivani rezultat.

    Ako sastavite takav niz koji sadrži SQL naredbu i pošaljete ga na izvršenje, možete primiti pogrešku. U tom slučaju ispišite ovaj niz u prozor za otklanjanje pogrešaka i pogledajte ga svojim očima. Možda će vam greška odmah upasti u oči. Ako ne radi, stvorite novi upit u dizajneru upita, prebacite se na SQL način rada, tamo umetnite tekst upita i pokrenite ga. Ako postoji greška, bit će jasnije prikazana.

  • Pristup spremio upit razvijen pomoću alata za izradu upita pod nazivom "myQuery". Baza podataka je povezana sa sustavom putem ODBC veze. Sve makronaredbe su uključene.

    Excel ima ADODB vezu preko koje se povezuje s bazom podataka

    Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "MyDatabase.accdb" End With

    Obično samo napišete svoj SQL, što je sasvim u redu, a zatim napravite nešto slično

    Dim sqlQuery As String sqlQuery = "SELECT * FROM myTable" Set rs = New ADODB.Recordset rs.Open sqlQuery, con, ...

    Ali želim pristupiti upitu koji sam pohranio u pristupnoj bazi podataka. Dakle, kako mogu pozvati spremljeni upit u bazi podataka koju sam upravo povezao.

    Već sam probao

    1. con.Execute("EXEC myQuery") ali taj mi je rekao da ne može pronaći myQuery.
    2. rs.Otvorite "myQuery", con ali ovaj je nevažeći i želi SELECT /etc izjave iz njega
    vba excel-vba ms-access-2007 adodb excel

    5 odgovora


    6

    Mislim da to možete zamisliti kao pohranjenu proceduru.

    Ako počnemo neposredno prije Dim sqlQuery As String

    Dim cmd kao novi ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

    Zatim prihvatite svoj posao s rekordima nakon toga.


    1

    Skoro ste stigli:

    Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Open "z:\docs\MyDatabase.accdb" End With con.Execute "Moj upit"

    Samo ostavi Exec po strani.

    Također možete dodati parametre, ovo je malo zastarjelo, ali bi trebalo pomoći:


    0

    To je neka vrsta hakiranja, ali možete ga zatražiti. Odnosno, zamijenite sql redak sa sljedećim:

    SqlQuery = "SELECT * FROM QueryName;"

    Prije pokretanja ovog programa, morate osigurati da je Access baza podataka spremljena, tj. pritisnite Ctrl+S (nije dovoljno da se upit pokrene u Accessu).


    0

    Uspio sam pokrenuti upit za ažuriranje koji je već bio spremljen u Accessu koristeći:

    Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

    To mi je davalo pogreške sve dok razmake u nazivu upita nisam zamijenio podvlakama i u bazi podataka programa Access i u izjavi za izvršenje.


    0

    Prošlo je dosta vremena otkako je ova tema stvorena. Ako sam sve dobro shvatio, mogu dodati nešto korisno. Dao sam ime onome što OP opisuje, a to je proces korištenja SQL-a iz upita pohranjenog u ACCDB-u za pokretanje u VBA putem DAO-a ili ADOBD-a. Dao sam mu naziv "pružatelj svojstava objekta", čak i s akronimom OPP u svojim bilješkama i prefiksom/sufiksom za naziv objekta.

    Ideja je da postojeći objekt u ACCDB-u (obično upit) izlaže svojstvo (obično SQL) koje treba koristiti u VBA. Sastavio sam funkciju samo da isisam SQL iz upita za ovo; Pogledaj ispod. Upozorenje: Žao mi je, ali ovo je sve u DAO-u, ne koristim puno ADODB. Nadam se da će vam ove ideje i dalje biti od koristi.

    Čak sam otišao toliko daleko da sam razvio metodu za korištenje/umetanje zamjenjivih parametara u SQL koji dolazi iz ovih OPP upita. Zatim koristim VBA.Replace() da izvršim zamjenu prije upotrebe SQL-a u VBA.

    Put DAO objekta do SQL upita u ACCDB-u je sljedeći:

    MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

    Koristim zamjenjive parametre tako što procjenjujem što treba zamijeniti i biram neobičan naziv za parametar koji možda ne postoji u stvarnoj bazi podataka. Uglavnom, jedine zamjene koje sam napravio su nazivi polja ili tablica ili izrazi klauzula WHERE i HAVING. Pa ih nazivam stvarima poput "(ReplaceMe00000001)", a zatim koristim funkciju Replace() da obavim posao...

    SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter") ...

    a zatim upotrijebite sqlText u VBA. Evo primjera rada:

    Javna funkcija MySqlThing() Dim sqlText as String Dim myParamater as String Dim myExpression as String "Postavi sve. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "SomeDateOrSomething12/31/2017" „Izvršite zamjenu . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Zatim upotrijebite SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.Application Dim db As DAO.Database Dim qdef s As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Postavi app = Access.Application Postavi db = app.CurrentDb Postavi qdefs = db.QueryDefs Postavi qdef = qdefs(oppName) oppGetSqlText = qdef.SQL End Function


    Pokrenite upit u programu Access MakeTable iz programa Excel

    imam Excel datoteka koju trebam automatizirati. Kada korisnik otvori Excel izvješće, od njega će se tražiti da osvježi podatke. Ako kažu da, onda moram pokrenuti upit...


    Izvršite VBA funkciju putem upita za prikaz u MS Accessu 2013 iz JS ActiveX ADO

    Kako izvršiti VBA makronaredbu putem upita za prikaz u MS Accessu 2013 iz JS ActiveX ADO? VBA funkcija namjeravao primiti trenutni korisnik, prijavljen sa: Public Declare...


    Izvršite spremljeni upit koji sadrži "funkciju" u bazi podataka pristupa iz excela

    Pokušavam pokrenuti upit pohranjen u pristupnoj bazi podataka iz excel vba. Upit radi dobro ako ga otvorim i pokrenem u pristupnoj bazi podataka, ali daje pogrešku kada ga pokrenem iz modula...


    MS Access - Izvršite spremljeni upit prema imenu u VBA

    Kako izvršiti spremljeni upit u MS Access 2007 u VBA? Ne želim kopirati i zalijepiti SQL u VBA. Radije bih samo izvršio naziv zahtjeva. Ovo neće raditi... VBA ne može pronaći upit....


    Kako izvesti zahtjev u ms-accessu u VBA kodu?

    Kako mogu pokrenuti upit za vraćanje zapisa u bazi podataka ms-access pomoću VBA koda?


    Pokrenite zahtjev za pristup iz excela i proslijedite mu parametre

    Kako pokrenuti upit u MS Access db iz koda Excel VBA ili makro. Zahtjev za MS-Access prihvaća neke parametre koje je potrebno proslijediti iz Excela. Hvala vam


    Upravljanje Excel radnom knjigom iz programa Access 2010 VBA

    Imam situaciju vrlo sličnu sljedećoj objavi: Zahtjev za pristup excelu 2010 za izradu grafikona putem vba. U mom slučaju, izvozim tablicu, ali želim učiniti puno više s datotekom...


    Izvršite SQL Server Pass-Through Query iz Access VBA

    Imam UPDATE prolazni upit spremljen u Accessu 2007. Kad dvaput kliknem na prolazni upit, on se uspješno izvršava. Kako mogu postići da se ovaj upit izvrši iz VBA? Ja bih...


    Uvoz ogromnog skupa podataka u Access iz Excela putem VBA

    Imam ogroman skup podataka koje trebam uvesti iz Excela u Access (~800 tisuća redaka). Međutim, mogu zanemariti retke s određenom vrijednošću stupca koji su poput 90%...


    Neki MDX upit unutar Excel vba?

    postoji li način za izvođenje MDX upita unutar Excel VBA? Mislio sam da se to može učiniti putem ADO-a, baš kao sa SQL-om (da, znam da se SQL razlikuje od MDX-a - problem koji mnogo puta...

    Ova lekcija je posvećena SQL upiti u bazu podataka na VBA pristup. Pogledat ćemo kako se postavljaju upiti INSERT, UPDATE, DELETE prema bazi podataka u VBA, a također ćemo naučiti kako dobiti određenu vrijednost iz SELECT upita.

    Oni koji programiraju u VBA pristup i tijekom rada s bazom SQL podaci poslužitelji se vrlo često suočavaju s tako jednostavnim i potrebnim zadatkom kao što je slanje SQL upita bazi podataka, bilo da se radi o INSERT, UPDATE ili jednostavnom SQL SELECT upitu. A budući da smo programeri početnici, trebali bismo i ovo moći, pa ćemo danas učiniti upravo to.

    Već smo se dotakli teme dobivanja podataka iz SQL poslužitelj, gdje su napisali kod u VBA za dobivanje tih podataka, na primjer, u članku o Prijenos podataka u tekstualnu datoteku iz MSSql 2008 ili su se toga malo dotakli u materijalu Prijenos podataka iz Accessa u Word i Excel predložak, ali na ovaj ili onaj način gledali smo na to površno, a danas predlažem da o tome razgovaramo malo detaljnije.

    Bilješka! Svi primjeri u nastavku razmatraju se korištenjem projekta Access 2003 ADP i baze podataka MSSql 2008. Ako ne znate što je ADP projekt, pogledali smo to u materijalu Kako stvoriti i konfigurirati Access ADP projekt

    Izvorni podaci za primjere

    Recimo da imamo tablicu test_table koja će sadržavati brojeve i nazive mjeseci u godini (upiti koji se izvode pomoću Management Studio)

    STVARAJ TABLICU .( NOT NULL, (50) NULL) U KRENU

    Kao što sam već rekao, koristit ćemo ADP projekt konfiguriran za rad s MS SQL 2008, u kojem sam napravio testni obrazac i dodao gumb za pokretanje s potpisom "Trčanje", koji će nam trebati za testiranje našeg koda, tj. Napisat ćemo sav kod u rukovatelju događajima " Pritisak gumba».

    Upiti prema bazi INSERT, UPDATE, DELETE u VBA

    Kako ne bismo dugo odgađali, počnimo odmah, recimo da trebamo dodati red u našu testnu tablicu ( kod komentirao)/

    Private Sub start_Click() "Deklarirajte varijablu za pohranjivanje niza upita Dim sql_query As String "U nju upišite upit koji nam je potreban sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Izvrši it DoCmd.RunSQL sql_query End Sub

    U ovom slučaju, upit se izvršava pomoću trenutnih parametara veze s bazom podataka. Možemo provjeriti jesu li podaci dodani ili ne.

    Kao što vidite, podaci su ubačeni.

    Da bismo izbrisali jednu liniju, napišemo sljedeći kod.

    Private Sub start_Click() "Deklarirajte varijablu za pohranjivanje niza upita Dim sql_query As String "Upišite upit za brisanje u nju sql_query = "DELETE test_table WHERE id = 6" "Pokrenite DoCmd.RunSQL sql_query End Sub

    Ako provjerimo, vidjet ćemo da je željena linija izbrisana.

    Da biste ažurirali podatke, napišite zahtjev za ažuriranje u varijablu sql_query, nadam se da je značenje jasno.

    SELECT upit prema bazi podataka u VBA

    Ovdje su stvari malo zanimljivije nego s drugim SQL konstrukcijama.

    Prvo, recimo, trebamo dobiti sve podatke iz tablice, i npr. mi ćemo ih obraditi i prikazati u poruci, a vi ih naravno možete koristiti u druge svrhe, za to pišemo sljedeće kodirati

    Private Sub start_Click() "Declare variables" Za skup zapisa iz baze podataka Dim RS As ADODB.Recordset "Query string Dim sql_query As String "String za prikaz sažetih podataka u poruci Dim str As String "Create novi objekt za zapise set RS = New ADODB.Recordset "Redak upita sql_query = "SELECT id, name_mon FROM test_table" "Pokreni upit korištenjem trenutnih postavki projektne veze RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Prolazi kroz zapise dok Not ( RS.EOF) "Ispunite varijablu za prikaz poruke str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "pomaknite se na sljedeći zapis RS.MoveNext Wend "Izlaz poruke msgbox str End Sub

    Ovdje već koristimo VBA Access petlje za ponavljanje kroz sve vrijednosti u našem skupu zapisa.

    Ali vrlo često je potrebno dobiti ne sve vrijednosti iz skupa zapisa, već samo jednu, na primjer, naziv mjeseca prema njegovom kodu. A da bismo to učinili, skupo je koristiti petlju, tako da možemo jednostavno napisati upit koji će vratiti samo jednu vrijednost i pristupiti joj, na primjer, dobit ćemo ime mjeseca pomoću koda 5

    Private Sub start_Click() "Deklaraj varijable" Za skup zapisa iz baze podataka Dim RS As ADODB.Recordset "String upita Dim sql_query As String "String za prikaz konačne vrijednosti Dim str As String "Kreiraj novi objekt za skup zapisa RS = Novi ADODB.Recordset "Redak upita sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Pokreni upit koristeći trenutne postavke veze projekta RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Dohvati našu vrijednost str = RS. Polja(0) msgbox str End Sub

    Radi univerzalnosti, ovdje smo se već pozabavili ne imenom ćelije, već njenim indeksom, tj. 0, a ovo je prva vrijednost u Skup zapisa, na kraju smo dobili vrijednost "Svibanj".

    Kao što vidite, sve je vrlo jednostavno. Ako često trebate dobiti određenu vrijednost iz baze podataka ( kao u posljednjem primjeru), tada preporučujem ispisivanje cijelog koda u zasebnu funkciju (Kako napisati funkciju u VBA Access 2003) s jednim ulaznim parametrom, na primjer, šifrom mjeseca ( ako uzmemo u obzir naš primjer) i jednostavno tamo gdje je potrebno prikazati tu vrijednost pozovemo funkciju koja nam treba sa traženim parametrom i to je to, time ćemo značajno smanjiti VBA kod i poboljšati percepciju našeg programa.

    To je sve za danas. Sretno!