Pozivanje sql upita iz vba pristupnog koda. Generiranje stringa SQL upita u VBA. Upiti bazi podataka INSERT, UPDATE, DELETE u VBA

Pristup sačuvao je upit razvijen korištenjem alata za pravljenje upita pod nazivom "myQuery". Baza podataka je povezana sa sistemom preko ODBC veze. Makroi su svi uključeni.

Excel ima ADODB vezu za povezivanje s bazom podataka putem

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nova ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otvorite "MyDatabase.accdb" Završite sa

Obično samo napišete svoj SQL, što je sasvim u redu, a onda samo uradite 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 pristupnu bazu podataka. Dakle, kako mogu pozvati sačuvani upit u bazi podataka koju sam upravo povezao.

Već sam probao

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

5 Replies


6

Mislim da o tome možete razmišljati kao o uskladištenoj proceduri.

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 uzmite svoj posao za snimanje nakon toga.


1

Skoro ste bili tamo:

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" Kraj sa con.Execute "MyQuery"

Samo ostavite Exec po strani.

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


0

To je neka vrsta hakovanja, ali možete to zatražiti. To jest, zamijenite sql liniju sljedećim:

SqlQuery = "SELECT * FROM QueryName;"

Prije pokretanja ovog programa, morate se uvjeriti da je baza podataka Pristup podacima je sačuvan 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

Ovo mi je davalo greške sve dok nisam zamijenio razmake u imenu upita podvlakama u Access bazi podataka i naredbi execute.


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 da bi se pokrenuo u VBA preko DAO ili ADOBD. Dao sam mu ime "provajder svojstava objekta", čak i sa akronimom OPP u mojim bilješkama, i prefiksom/sufiksom za ime objekta.

Ideja je da postojeći objekt u ACCDB (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; vidi ispod. Upozorenje: Izvinite, ali ovo je sve u DAO-u, ne koristim mnogo ADODB. Nadam se da će vam ove ideje još uvijek 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 korištenja SQL-a u VBA.

Putanja DAO objekta do SQL upita u ACCDB je sljedeća:

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

Koristim zamjenjive parametre tako što procjenjujem šta treba zamijeniti i biram neobično ime za parametar koji možda ne postoji u stvarnoj bazi podataka. Uglavnom, jedine zamjene koje sam napravio su nazivi polja ili tablice ili izrazi klauzule WHERE i HAVING. Zato ih nazivam stvarima poput "(ReplaceMe00000001)" i onda koristim funkciju Replace() da obavim posao...

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

a zatim koristite sqlText u VBA. Evo radnog primjera:

Javna funkcija MySqlThing() Dim sqlText kao string Dim myParamater kao string Dim myExpression kao string "Sve podesi. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression/SomeDate20 "SomeDae102" zamjena ment . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Zatim koristite SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) Kao String Dimcation As Dimqba App D.A. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Postavi app = Access.Application Set db = app.CurrentDb Postavi qdefs = db.QueryDefs Postavi qdef = qdefs(oppName) oppSGetSqLde Function.


Pokrenite upit u programu Access MakeTable iz programa Excel

Imam Excel datoteku koju trebam automatizirati. Kada korisnik otvori Excel izvještaj, od njega će biti zatraženo da osvježi podatke. Ako kažu da onda moram da pokrenem upit...


Izvrši VBA funkciju putem upita za pregled u MS Access 2013 iz JS ActiveX ADO

Kako izvršiti VBA makro preko upita za pregled u MS Access 2013 iz JS ActiveX ADO? VBA funkcija namenjen da primi trenutni korisnik, prijavljen sa: Public Declare...


Izvršite spremljeni upit koji sadrži "funkciju" u pristupnoj db 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 grešku kada ga pokrenem iz modula...


MS Access - Izvrši sačuvani upit po imenu u VBA

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


Kako izvršiti zahtjev u ms-access u VBA kodu?

Kako mogu pokrenuti upit za vraćanje zapisa u bazi podataka ms-pristup podacima koristite VBA kod?


Pokrenite zahtjev za pristup iz excela i proslijedite mu parametre

Kako pokrenuti upit u MS access db iz Excel VBA koda ili makroa. MS-Access zahtjev prihvaća neke parametre koje treba proslijediti iz Excel-a. Hvala ti


Upravljanje Excel radnom sveskom iz Access 2010 VBA

Imam situaciju vrlo sličnu sljedećem postu: Zahtjev za pristup excelu 2010 za kreiranje grafa putem vba U mom slučaju izvozim tabelu, ali želim da uradim mnogo više u datoteci...


Izvršite SQL Server prolazni upit iz Access VBA

Imam upit za prolaz kroz UPDATE sačuvan u Accessu 2007. Kada dvaput kliknem na upit za prolaz, 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 koji trebam da uvezem iz Excela u Access (~800.000 redova). Međutim, mogu zanemariti redove sa određenom vrijednošću stupca koja je otprilike 90%...


Ima li MDX upita unutar Excel vba?

postoji li način da se izvrši MDX upit unutar Excel VBA? Mislio sam da se to može uraditi putem ADO-a, baš kao i sa SQL-om (da, znam da se SQL razlikuje od MDX-a - problem koji mnogo puta...

Access je sačuvao upit koji je razvijen pomoću alata za izgradnju upita myQuery. Baza podataka je povezana sa sistemom preko ODBC veze. Svi makroi su uključeni.

Excel je uspostavio ADODB vezu za povezivanje s bazom podataka putem

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nova ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otvorite "MyDatabase.accdb" Završite sa

Obično samo napišete svoj SQL, koji odlično radi, a onda samo uradite 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 pristupnu bazu podataka. Dakle, kako da pozovem sačuvani upit u bazi podataka koju sam upravo povezao.

Već sam probao

  1. con.Execute("EXEC myQuery"), ali to mi je govorilo da myQuery nije moguće pronaći.
  2. rs.Otvorite "myQuery" ali je nevažeći i zahtijeva SELECT/etc izjave 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()

Zatim pokupite svoj rad sa setom zapisa nakon toga.

Skoro si bio tamo

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" Kraj sa con.Execute "MyQuery"

Samo napusti 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 makroom

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

Ovo mi je davalo greške sve dok nisam zamijenio razmake u imenu upita podvlakama u Access bazi podataka i naredbi execute.

To je neka vrsta hakerskog posla, ali možete zatražiti zahtjev. To jest, zamijenite SQL liniju sljedećim:

SqlQuery = "SELECT * FROM QueryName;"

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

Prošlo je dosta vremena otkako je ova tema stvorena. Ako sam dobro razumio, možda bih mogao dodati nešto korisno. Dao sam ime onome što OP opisuje: ovo je proces korištenja SQL-a iz upita pohranjenog u ACCDB da bi se pokrenuo u VBA preko DAO ili ADOBD. Nazvao sam ga "Object Property Provider", čak i sa akronimom OPP u mojim bilješkama i za naziv objekta prefiks/sufiks.

Ideja je da postojeći objekt u ACCDB (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; Vidi ispod. Upozorenje: Izvinite, ali ovo je sve u DAO-u, ne koristim mnogo ADODB. Nadam se da su vam ideje i dalje 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 korištenja SQL-a u VBA.

Putanja DAO objekta do SQL upita u ACCDB je sljedeća:

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

Koristim zamjenjive parametre tako što procjenjujem šta treba zamijeniti i biram neobično ime za parametar koji možda ne postoji u stvarnoj bazi podataka. Uglavnom, jedine zamene koje sam napravio su imena polja ili tabela ili izrazi klauzule WHERE i HAVING. Zato ih nazivam stvarima poput "(ReplaceMe00000001)" i onda koristim funkciju Replace() da obavim posao...

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

I onda koristite sqlText u VBA. Evo radnog primjera:

Javna funkcija MySqlThing() Dim sqlText kao string Dim myParamater kao string Dim myExpression kao string "Sve podesi. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression/SomeDate20 "SomeDae102" zamjena ment . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Zatim koristite SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) Kao String Dimcation As Dimqba App D.A. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Postavi app = Access.Application Set db = app.CurrentDb Postavi qdefs = db.QueryDefs Postavi qdef = qdefs(oppName) oppSGetSqLde Function.

Ova lekcija je posvećena SQL upiti u bazu podataka na VBA pristup. Pogledaćemo kako se INSERT, UPDATE, DELETE upiti prave bazi podataka u VBA, a takođe ćemo naučiti kako da dobijemo određenu vrednost iz SELECT upita.

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

Već smo se dotakli teme dobijanja podataka iz SQL server, gdje su napisali kod u VBA za dobijanje ovih podataka, na primjer, u članku o Učitavanju podataka u tekstualnu datoteku iz MSSql 2008 ili su se toga malo dotakli u materijalu Prijenos podataka iz Accessa u Word i Excel šablon, ali na ovaj ili onaj način pogledali smo to površno, a danas predlažem da o tome razgovaramo malo detaljnije.

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

Izvorni podaci za primjere

Recimo da imamo tabelu test_table, koja će sadržavati brojeve i nazive mjeseci u godini (upiti se izvršavaju pomoću Management Studio)

KREIRAJ TABELU .( NOT NULL, (50) NULL) ON GO

Kao što sam već rekao, koristićemo ADP projekat konfigurisan za rad sa MS SQL 2008, u kojem sam napravio test formu i dodao dugme za početak sa potpisom "trčati", koji će nam trebati da testiramo naš kod, tj. Napisat ćemo sav kod u obrađivaču događaja " Pritisnite dugme».

Upiti bazi podataka INSERT, UPDATE, DELETE u VBA

Da ne bismo odlagali predugo, počnimo odmah, recimo da moramo dodati red u našu testnu tablicu ( kod je komentirao)/

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

U ovom slučaju, upit se izvršava korištenjem trenutnih parametara povezivanja baze podataka. Možemo provjeriti da li su podaci dodani ili ne.

Kao što vidite, podaci su ubačeni.

Da bismo izbrisali jedan red, pišemo sljedeći kod.

Private Sub start_Click() "Deklarirajte varijablu za pohranjivanje stringa upita Dim sql_query As String "Napišite upit za brisanje u njega sql_query = "IZBRIŠI test_table GDJE id = 6" "Pokreni je DoCmd.RunSQL sql_query End Sub

Ako provjerimo to ćemo vidjeti potrebna linija lijevo.

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

SELECT upit bazi podataka u VBA

Ovdje su stvari malo zanimljivije nego kod drugih SQL konstrukcija.

Prvo, recimo da treba da dobijemo sve podatke iz tabele, a mi ćemo ih, na primer, obraditi i prikazati u poruci, a vi, naravno, možete ih koristiti u druge svrhe, za to pišemo sledeće kod

Private Sub start_Click() "Deklariraj varijable "Za skup zapisa iz baze podataka Dim RS As ADODB.Recordset "String upita Dim sql_query As String "String za prikaz sažetih podataka u poruci Dim str As String "Kreiraj novi objekat za zapise set RS = Novi ADODB .Recordset "Linija upita sql_query = "SELECT id, name_mon FROM test_table" "Pokreni upit koristeći trenutne postavke veze projekta RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Provjeri zapise dok ne ( RS.EOF) "Popunite varijablu da prikažete poruku str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "idite na sljedeći zapis RS.MoveNext Wend " Izlaz poruke msgbox str End Sub

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

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

Private Sub start_Click() "Deklariraj 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 objekat za skup zapisa RS = Novi ADODB.Recordset "Linija 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 "Nabavite našu vrijednost str = RS. Polja(0) msgbox str Kraj pod

Radi univerzalnosti, ovdje smo se već obratili ne imenom ćelije, već njenim indeksom, tj. 0, a ovo je prva vrijednost u Recordset, na kraju smo dobili vrijednost "maj".

Kao što vidite, sve je prilično jednostavno. Ako često trebate dobiti određenu vrijednost iz baze podataka ( kao u zadnjem primjeru), onda preporučujem da ispišete sav kod u posebnu funkciju (Kako napisati funkciju u VBA Access 2003) sa jednim ulaznim parametrom, na primjer, kodom mjeseca ( ako uzmemo u obzir naš primjer) i jednostavno, tamo gdje je potrebno prikazati ovu vrijednost, pozvati funkciju koja nam je potrebna 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!

Access vam omogućava da programski kreirate nizove SQL upita, kao i nizove koji služe kao vrijednosti za svojstva obrazaca, izvještaja itd., parametara funkcija itd., koji također moraju odgovarati SQL sintaksa. Istovremeno, moramo zapamtiti da konstante uključene u takvu liniju također moraju biti formatirane prema SQL pravilima, naime:

  • u brojevima decimalni separator mora biti tačka,
  • stringovi moraju biti zatvoreni u navodnike ili apostrofe (a navodnici ili apostrofi, respektivno, se udvostručuju unutar niza),
  • Datumi moraju biti stavljeni u heš oznake i napisani u američkom formatu (mm/dd/gggg) sa kosom crtom kao graničnikom.

    Ako se ovo prekrši, mogući su sljedeći efekti:

  • broj poput 10.5 sa zarezom umjesto tačke će se percipirati kao lista dva broja 10 i 5, što će dovesti do neke vrste neslaganja u broju polja,
  • niz poput Vasya bez navodnika i apostrofa će se percipirati kao ime polja, ako takvo polje postoji, ili kao ime parametra koji će se odmah tražiti,
  • datum kao što je 1/2/2010 ili 1-2-2010 bez heš oznaka će se tretirati kao aritmetički izraz (sa deljenjem i oduzimanjem, respektivno),
  • datum kao što je 1.2.2010 će se tumačiti kao razlomak sa dvije decimalne točke i rezultirat će greškom,
  • datum sa heš oznakama, ali ne u američkom formatu, će se percipirati kao datum, ali drugačiji (dan i mjesec će biti preuređeni).

    Ispod svakog odjeljka je primjer SQL niza koji bi trebao biti proizveden kada kreiranje softvera, a zatim VBA kod koji ga kreira. Ispod je vrlo korisna preporuka.

    1. Upotreba brojeva

    SELECT * FROM Table WHERE (((Tablica .Quanty)= 12 .197 ));
    VBA v1

    Dim q As Single 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 razlomke to je poseban slučaj samo kada je sistemski separator tačka.
  • VBA v2- ispravnija opcija, jer u klasičnom programiranju, samo stringovi mogu biti povezani sa stringovima, dok VBA v1 koristi implicitnu konverziju tipa, iako nije bilo pritužbi na ovu metodu za cijele brojeve. (Primjer je dat kada je sistemski graničnik zarez.)
  • Ponekad se za konverziju koristi i funkcija CStr(), ali nije uvijek primjenjiva, jer vraća broj kao string, gdje je zapisan kroz sistemski graničnik, dok SQL prihvata samo tačku kao graničnik.
  • NB! Kada koristite netipične sistemske separatore, gornji primjeri možda neće raditi; u tim slučajevima morate programski zamijeniti sistemski separator tačkom. Ispod je funkcija koja vraća sistemski graničnik.
    Funkcija GetDecimalSeparator() Kao niz GetDecimalSeparator = Format ( 0 #, "." ) End Funkcija Također imajte na umu da neke standardne radnje pristupa možda neće raditi u ovom slučaju.

    2. Korištenje nizova

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

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

    Dim q As String q = "Sve" strSQL = "SELECT * " _ & "FROM Table " _ & "GDJE (((Table.Quanty)="" & DoubleApostrofe(q) & "" ));"
    Bilješka:

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

    primjer:
    uvjet uzorkovanja:
    a"a"s SQL:
    WHERE field=" a""a"s"VBA:
    strWhere = " WHERE field=""" & "a""""a"s" & """ "

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

    primjer:
    uvjet uzorkovanja:
    a"a"s SQL:
    WHERE field=" a"a""s"VBA:
    strWhere = " WHERE field="" & "a""a""s" & "" "

  • Gore navedene funkcije DoubleQuote i DoubleApostroph NISU ugrađene Access funkcije, već korisnički definirane funkcije, čija je implementacija ostavljena na diskreciju programera. Konkretno, u verzijama programa Access 2000 i novijim možete koristiti ugrađenu funkciju Replace za ovu svrhu, a u 97 i nižim verzijama možete koristiti ovu funkciju:

    Javna funkcija Replace97(StrMain kao string , StrFind kao string , StrZam kao string ) Kao string na grešci GoTo err Dim pos As Long Ako StrFind = "" Onda GoTo err Ako StrMain = "" Zatim Replace97 = StrZam: Izađite iz funkcije Do 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)) Loop Replace97 = StrMain Exit Function err: Replace97 = StrMain End Funkcija
    3. Upotreba datuma

    SELECT * FROM Table WHERE (((Tabela .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 radi sa datumima u američkom formatu, tj. tačno u gore navedenom obliku Mjesec/Dan/Godina.
  • Nemojte izostavljati znakove # (obuhvata cijelu datumsko-vremensku konstantu) i \ (sprečava da / i : budu zamijenjeni postavkama lokalizacije, što je ono čemu funkcija Format ima tendenciju da radi i što sprječava pravilan rad SQL naredbe).
  • Preporučuje se da pročitate 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 uporede, možete dobiti neočekivani rezultat.

    Nakon što ste sastavili takav niz koji sadrži SQL naredba, a njegovo slanje na izvršenje može dovesti do greške. U ovom slučaju, odštampajte ovaj niz u prozor za otklanjanje grešaka i pogledajte ga svojim očima. Možda će vam greška odmah upasti u oči. Ako ne radi, kreirajte novi upit u dizajneru upita, prebacite se na SQL način rada, umetnite tekst upita tamo i pokrenite ga. Ako postoji greška, biće jasnije prikazana.