A DoCmd.RunSQL "SQL parancs" és a CurrentDb.Execute "SQL parancs" a számos lehetőség közül két egyszerű módja SQL parancsok kiadásának VBA környezetben.
A DoCmd.RunSQL az MS Access felhasználói felületén keresztül működik, ennek minden előnyével és hátrányával. A CurrentDb.Execute a háttérben futó adatbázis motort használja, a DAO (Datat Access Object) objektum model részeként.
Mivel a DoCmd.RunSQL az MS Access felhasználói felületét használja, ezért ez tud az űrlapokról és mezőkről, így az SQL parancsban hivatkozhatunk ezekre (pl: [Forms]![frmMyForm]![txtMyControl]). Az űrlapokra ill. mezőkre történő hivatkozás hibát eredményez a CurrentDb.Execute használata esetén. Persze ha az SQL parancsot egy karakterlánc felépítésével állítjuk elő, akkor az űrlapokra és mezőkre történő hivatkozást kiértékelve, és karakterláncra alakítva, már futtatható az SQL parancs.
A DoCmd.RunSQL megerősítést fog kérni ("You are about to update/append/delete 37 records ..."), hacsak nem használjuk előtte a DoCmd.SetWarnings False parancsot, majd utána a DoCmd.SetWarnings True parancsról se felejtkezzük meg. A CurrentDb.Execute megkerüli az Access felhasználói felületét és kérdés nélkül végrehajtja az SQL parancsot.
Összetettebb lekérdezések esetén a CurrentDb.Execute érezhetően gyorsabb futást eredményez, mert nem végez annyi ellenőrzést, mint az MS Access felhasználói felülete.
Ha a CurrentDb.Execute olyan adatokat is változtat, amik egy megnyitott űrlapon vannak, akkor lehet hogy kapunk egy olyan hibaüzenetet, amikor el akarjuk menteni az űrlap változásait, hogy közben egy másik felhasználó megváltoztatta az adatokat, ezért nem menthetőek a módosítások. A "másik felhasználó" az adatbázis motor volt. Ezt a problémát el tudjuk kerülni, ha biztosítjuk az adatok mentését még mielőtt kiadjuk a CurrentDb.Execute parancsot.
MS SQL Server
A DoCmd.RunSQL "SQL parancs" és a CurrentDb.Execute "SQL parancs" a számos lehetőség közül két egyszerű módja SQL parancsok kiadásának VBA környezetben.
A DoCmd.RunSQL az MS Access felhasználói felületén keresztül működik, ennek minden előnyével és hátrányával. A CurrentDb.Execute a háttérben futó adatbázis motort használja, a DAO (Datat Access Object) objektum model részeként.
Mivel a DoCmd.RunSQL az MS Access felhasználói felületét használja, ezért ez tud az űrlapokról és mezőkről, így az SQL parancsban hivatkozhatunk ezekre (pl: [Forms]![frmMyForm]![txtMyControl]). Az űrlapokra ill. mezőkre történő hivatkozás hibát eredményez a CurrentDb.Execute használata esetén. Persze ha az SQL parancsot egy karakterlánc felépítésével állítjuk elő, akkor az űrlapokra és mezőkre történő hivatkozást kiértékelve, és karakterláncra alakítva, már futtatható az SQL parancs.
A DoCmd.RunSQL megerősítést fog kérni ("You are about to update/append/delete 37 records ..."), hacsak nem használjuk előtte a DoCmd.SetWarnings False parancsot, majd utána a DoCmd.SetWarnings True parancsról se felejtkezzük meg. A CurrentDb.Execute megkerüli az Access felhasználói felületét és kérdés nélkül végrehajtja az SQL parancsot.
Összetettebb lekérdezések esetén a CurrentDb.Execute érezhetően gyorsabb futást eredményez, mert nem végez annyi ellenőrzést, mint az MS Access felhasználói felülete.
Ha a CurrentDb.Execute olyan adatokat is változtat, amik egy megnyitott űrlapon vannak, akkor lehet hogy kapunk egy olyan hibaüzenetet, amikor el akarjuk menteni az űrlap változásait, hogy közben egy másik felhasználó megváltoztatta az adatokat, ezért nem menthetőek a módosítások. A "másik felhasználó" az adatbázis motor volt. Ezt a problémát el tudjuk kerülni, ha biztosítjuk az adatok mentését még mielőtt kiadjuk a CurrentDb.Execute parancsot.