Deschiderea și închiderea bazelor de date

Următoarele secțiuni vă arată cum să deschideți și să închideți bazele de date într-o macrocomandă. Utilizați metoda CurrentDb pentru a returna baza de date curentă, a deschide o bază de date și a o trata ca bază de date curentă, sau puteți chiar deschide mai multe baze de date la un moment dat. De asemenea, aveți posibilitatea să creați și să eliminați spații de lucru.

Utilizarea metodei CurrentDb pentru returnarea bazei de date curente

Pentru a lucra cu o bază de date care este deschisă în prezent în Access, utilizați metoda CurrentDb pe obiectul Application sau o variabilă obiect care reprezintă obiectul Application. Metoda CurrentDb returnează o variabilă de tip obiect Database care reprezintă baza de date deschisă în prezent, care are focalizarea (poate interacționa cu utilizatorul – prin tastare sau cu clic). Următorul exemplu declară o variabilă obiect de tip Database numită myDatabase și apoi utilizează metoda CurrentDb pentru a atribui baza de date activă la aceasta:

Dim myDatabase As Database
Set myDatabase = Application.CurrentDb

Închiderea bazei de date curente și deschiderea unei baze de date diferite

În Access, puteți alege dintre mai multe moduri de deschidere și închidere a unei baze de date. Această secțiune discută despre cea mai simplă metodă de deschidere și închidere a unei baze de date, tratând-o ca bază de date curentă. Această metodă este similară cu deschiderea și închiderea unei baze de date atunci când se lucrează interactiv în Access. Consultați secțiunea următoare pentru o altă metodă de deschidere și închidere a bazelor de date care vă permite să aveți două sau mai multe baze de date deschise în același timp.

Pentru a deschide o bază de date ca bază de date curentă, utilizați metoda OpenCurrentDatabase a obiectului Application. Sintaxa este următoarea:

expression.OpenCurrentDatabase(Filepath, Exclusive, bstrPassword)

Iată componentele sintaxei:

  • expression este o expresie necesară care returnează un obiect Application.
  • Filepath este un argument obligatoriu de tip String care specifică calea și numele fișierului de deschis. Ar trebui să specificați extensia numelui de fișier; dacă îl omiteți, Access presupune că extinderea este .accdb.
  • Exclusive este un argument opțional de tip Boolean pe care îl puteți seta la True pentru a deschide baza de date în modul Exclusive, în loc de modul partajat - Shared (valoarea implicită sau rezultatul setării explicite False).
  • bstrPassword este un argument opțional de tip String care specifică parola necesară pentru a deschide baza de date.

Pentru a închide baza de date curentă, folosiți metoda CloseCurrentDatabase cu obiectul Application. Această metodă nu are argumente.

Puteți rula metoda CloseCurrentDatabase din baza de date curentă, dar nu mai puteți face nimic după aceea, deoarece codul se oprește să se execute imediat ce VBA execută metoda CloseCurrentDatabase. Baza de date care conține codul se închide imediat, astfel încât nu poate fi executat niciun cod ulterior din acea macrocomandă.

Pentru a închide baza de date curentă și a deschide o alta utilizând metoda OpenCurrentDatabase, trebuie să executați codul din afara bazelor de date implicate - de exemplu, utilizând automatizarea dintr-o altă aplicație. Ulterior, în secțiunea Accesarea unei aplicații dintr-o altă aplicație, este descrisă această tehnică. (Puteți vedea și exemplul din secțiunea de mai jos,"Comunicarea între aplicațiile Office".)

Pregătiți baza de date Northwind pentru a o utiliza cu exemplele de cod

Pentru a testa și experimenta unele dintre exemplele de cod din Access, trebuie să faceți câteva pregătiri preliminare. Pe scurt, trebuie să experimentăm cu aceeași bază de date, ca să obținem aceleași rezultate.

În mod tradițional, atunci când autorii au scris despre Access, au utilizat o bază de date șablon numită Northwind pe care Microsoft a inclus-o în Access. Northwind utilizează o varietate de caracteristici Access și, prin urmare, este un exemplu util de bază de date. Acesta poate fi deosebit de valoros atunci când doriți să experimentați cu Access, dar nu doriți să utilizați propria bază de date (atât pentru a o menține în siguranță, cât și pentru că este posibil ca baza de date să nu exercite unele dintre capacitățile Access).

În unele dintre exemplele următoare se va folosi baza de date Northwind, astfel încât să se lucreze cu aceleași date și aceleași structuri. De aceea, înainte de a testa unele dintre exemplele de cod viitoare, puneți o copie a fișierului Northwind.accdb în directorul C:\Temp, astfel încât codul exemplu scris mai jos să îl poată găsi. Dacă nu aveți un director C:\Temp, creați unul.

S-ar putea să aveți deja Northwind pe hard disk. Pentru a vedea dacă există, apăsați butonul Start pentru a afișa pagina de pornire din Windows 8 sau 10 și tastați Northwind.accdt. Dacă apare în căutare, faceți clic cu butonul din dreapta pe numele său, alegeți Deschidere locație fișier (Open File Location), copiați baza de date și lipiți-o în directorul C:\Temp.

Cu toate acestea, dacă nu aveți o copie a Northwind.accdb, urmați acești pași pentru a o obține:

  1. Deschideți MicrosoftAccess 2016.
  2. Ar trebui să vedeți o selecție de pictograme șablon în dreapta. Dacă nu vedeți acest lucru, alegeți File > New pentru a afișa șabloanele.
  3. Localizați câmpul Search For Online Templates din partea de sus a ecranului.
  4. Tastați Northwind în acest câmp și apăsați Enter.
  5. Faceți un singur clic pe pictograma Desktop Northwind 2007 Sample Database afișată în rezultatele căutării.
  6. Tastați Northwind.accdb în câmpul File Name.
  7. Uitați-vă la calea fișierului care se află sub câmpul File Name. Aceasta este calea în care Access stochează fișierele bază de date pe hard-disk. Notați această locație, astfel încât să puteți găsi Northwind.accdb la pasul 12.
  8. Clic pe butonul Create. Access va descărca baza de date Northwind și va crea copia, stocând-o în locația implicită pentru bazele de date pe care ați notat-o la pasul 7.
  9. Baza de date Northwind se va deschide automat în Access după ce este creată.
  10. Clic pe butonul Login pentru a deschide baza de date dacă există o casetă de dialog Login
  11. Închideți Access, pentru a putea copia fișierul Northwind.accdb în directorul C:\Temp.
  12. Localizați fișierul Northwind.accdb în directorul în care Access păstrează bazele de date (vedeți pasul 7).
  13. Copiați fișierul Northwind.accdb și lipiți-l în directorul C:\Temp.

Acum, exemplele de cod din această carte pot face referire la această cale de fișier pentru a deschide Northwind, astfel:

   filepath:="C:\Temp\Northwind.accdb"

Apoi, veți dori să eliminați caseta de dialog Login implicită, astfel încât să puteți lucra mai ușor cu baza de date prin cod. Deschideți Northwind.accdb cu dublu clic pe nume în Windows Explorer.

În mod implicit, apare o casetă de dialog Login care vă solicită să selectați unul dintre angajații acestei companii imaginare. Deci, trebuie să faceți clic pe Login pentru a închide caseta de dialog înainte de a vedea Northwind în Access. Nu vrem să avem de-a face cu acest lucru în exemplele noastre de cod. Deci, să-l scoatem.

Porniți Access și folosind File Explorer navigați până la directorul C:\Temp și faceți dublu clic pe Northwind.accdb. Conectați-vă făcând clic pe butonul Login. Dacă nu este deja deschis, clic pe simbolul >> din panoul din stânga al Access pentru a deschide panoul Navigation. Localizați elementul Supporting Objects din panoul Navigation și faceți clic pentru a-l extinde. Derulați în jos până când localizați macrocomanda denumită AutoExec. (Este aproape de partea de jos a listei, lângă simbolul macro, un pergament de aur.) Faceţi clic dreapta pe AutoExec, alegeți Cut din meniul contextual, apoi închideți Access. (Dacă sunteți avertizat că informația din Clipboard va fi golită, mergeți mai departe și permiteți acest lucru.)

Acum caseta de dialog Login nu vă va mai întrerupe atunci când deschideți baza de date Northwind.

Comunicarea între aplicațiile Office

Există o cerință specială atunci când scrieți cod care comunică între aplicațiile Office. Nu puteți declara pur și simplu o variabilă obiect pentru a indica spre un obiect Application, astfel:

Dim myAccess As Access.Application

Acest cod se va executa numai dacă furnizați mai întâi o referință în aplicația gazdă. De exemplu, dacă încercați să manipulați Access prin cod VBA într-o macrocomandă Word, trebuie să setați o referință în Editorul VBA din Word.

Următorul exemplu ilustrează o modalitate de a contacta și manipula Access de la o altă gazdă VBA , de exemplu, din Excel sau din Word. Dar înainte de a executa acest cod din Word sau din altă aplicație, trebuie mai întâi să alegeți Tools > References în Editorul VBA al Word, apoi să defilați în jos, să găsiți și să faceți dublu clic pe Microsoft Access 16.0 Object Library din lista verticală. Faceți clic pe OK pentru a închide această casetă de dialog. (În cazul în care redeschideți caseta de dialog References în viitor, veți vedea această referință este listată în partea de sus, dar numele său va fi Microsoft Access 15.0 Object Library, nu 16.0 pe care ați ales-o. Dar nu vă faceți face griji, va merge bine.

Rețineți că pentru a testa următorul exemplu, trebuie să aveți, o bază de date încărcate în prezent și care se execută într-o instanță de Access. Deschideți o bază de date, alta decât Northwind. Veți vedea de ce în scurt timp.

Exemplul următor declară variabila obiect myAccess ca tip Access.Application și variabila obiect myDatabase ca tip obiect. Exemplul utilizează metoda GetObject pentru a atribui myAccess copia de Access care se execută, utilizează metoda CloseCurrentDatabase pentru a închide această bază acoperire de date, și apoi utilizează metoda OpenCurrentDatabase pentru a deschide o altă bază acoperire de date, și anume Northwind, în modul exclusiv. Instrucțiunea finală utilizează metoda CurrentDb pentru a atribui baza de date deschisă la variabila obiect myDatabase. Copiați și lipiți acest cod în Editorul VBA din Word:

Sub ContactAccess()
  Dim myAccess As Access.Application
  Dim myDatabase As Object
  Set myAccess = GetObject(, "Access.Application") 
  myAccess.CloseCurrentDatabase 
  myAccess.OpenCurrentDatabase _
  filepath:="C:\Temp\Northwind.accdb", Exclusive:=True 
Set myDatabase = myAccess.CurrentDb 
End Sub

Când testați acest cod apăsând tasta F5 pentru a-l executa în Editorul VBA Word, veți ști că funcționează pentru că atunci când vă uitați în Access, orice bază de date a fost deschisă în Access va fi fost înlocuită de Northwind (dacă nu vedeți acest lucru, urmați pașii descriși mai sus, la "Pregătiți baza de date Northwind pentru a o utiliza cu exemplele de cod").

Când executați acest cod, este posibil să primiți un mesaj de eroare care spune " User-defined type not defined. ". Și Editorul va evidenția această linie de cod:

Dim myAccess As Access.Application

Aceasta înseamnă că Editorul nu poate localiza obiectul denumit Access. Din motive necunoscute, o bibliotecă nou adăugată este uneori deselectată în References. Pentru a remedia această problemă, repetați pașii descriși anterior: deschideți caseta de dialog Tools > References din editorul Word VBA > adăugați din nou o referință la Microsoft Access 15.0 Object Library. De data asta ar trebui să rămână adăugată.

Deschiderea mai multor baze de date simultan

În loc să utilizați metoda OpenCurrentDatabase pentru a deschide o bază de date ca bază de date curentă, utilizați metoda OpenDatabase a obiectului Workspace pentru a deschide o altă bază de date și returnați o referință la obiectul Database care îl reprezintă. Sintaxa pentru metoda OpenDatabase este următoarea:

Set database = workspace.OpenDatabase (Name, Options, ReadOnly, Connect)

Crearea de baze de date, formulare și rapoarte noi în Access

Discuțiile despre celelalte aplicații Office din această parte a cărții (partea 6) au subliniat crearea și salvarea de fișiere noi, de exemplu crearea de documente noi în Word sau registre de lucru noi în Excel și salvarea lor sub nume adecvate și în formatele corespunzătoare.

Access are, de asemenea, propriile comenzi VBA pentru crearea prin program a bazelor de date, formularelor, rapoartelor, tabelelor și a altor obiecte:

  • Pentru a crea o bază de date nouă, utilizați metoda NewCurrentDatabase a obiectului Application.
  • Pentru a crea un formular nou, utilizați metoda CreateForm. Pentru a plasa controale în formular, utilizați metoda CreateControl.
  • Pentru a crea un raport nou, utilizați metoda CreateReport. Pentru a plasa controale în raport, utilizați metoda CreateReportControl.

Chiar dacă se poate creea o bază de date nouă prin program (cod), procedeul este complex și nu se recomandă. În majoritatea cazurilor, scopul programării VBA din Access este manipularea bazelor de date și a obiectelor existente pe care le-ați construit manual.

Iată componentele sintaxei:

  • database este o variabilă obiect care va reprezenta baza de date pe care o deschideți.
  • workspace este o variabilă obiect opțională care specifică spațiul de lucru în care doriți să deschideți baza de date. Dacă omiteți workspace, Access deschide baza de date în spațiul de lucru implicit. Deși aveți posibilitatea să deschideți baza de date în spațiul de lucru implicit fără probleme, este posibil să vi se pară mai convenabil să creați un alt spațiu de lucru și să îl utilizați pentru a menține baza de date separată. Vedeți și "Crearea și eliminarea spațiilor de lucru - Workspaces" de mai jos, pentru detalii.
  • Name este un argument obligatoriu de tip String care specifică numele bazei de date de deschis. Este returnată o eroare dacă baza de date nu există sau nu este disponibilă sau dacă un alt utilizator a deschis baza de date pentru acces exclusiv.
  • Options este un argument opțional de tip Variant care specifică toate opțiunile pe care doriți să le setați pentru baza de date. Pentru o bază de date Access, puteți specifica True pentru a deschide baza de date în modul Exclusive sau False (implicit) pentru a o deschide în modul Shared. Pentru spațiile de lucru ODBCDirect, puteți utiliza alte opțiuni; pentru detalii, vedeți fișierele Access Visual Basic Help.
  • ReadOnly este un argument opțional de tip Variant pe care îl puteți seta la True pentru a deschide baza de date în modul Doar în citire (Read Only). Valoarea implicită este False, care deschide baza de date în modul Citire/scriere (Read / write)
  • Connect este un argument opțional de tip Variant pe care îl puteți utiliza pentru a transmite orice informații de conectare necesare, cum ar fi o parolă pentru deschiderea bazei de date.

Următorul exemplu "deschide" baza de date Northwind într-un sens special al cuvântului deschide: Este deschis în spatele scenei pentru a permite codului nostru să o contacteze și să poată manipula datele, structura și alte caracteristici. Dar nu este deschis în Access unde utilizatorul îl poate vedea. În termeni tehnici: O instanță a bazei de date este complet expusă la codul nostru, dar instanța este invizibilă. Ea nu are nici o interfață cu utilizatorul. Nu există nici o afișare a bazei de date Northwind în Access. Din acest motiv, am inclus o casetă de mesaj în următorul exemplu de cod pentru a vă dovedi că exemplul de cod a deschis de fapt Northwind și a preluat unele date din ea.

De asemenea, atunci când utilizați această tehnică invizibilă a bazei de date, este o idee bună să terminați prin închiderea oricăror seturi de înregistrări sau a altor obiecte pe care le-ați deschis, precum și prin închiderea bazei de date. În acest fel, entitățile neatașate și inutile nu sunt lăsate să plutească ca fantomele în memoria computerului.

Acest exemplu nu va funcționa dacă aveți Northwind deschis în Access. Trebuie să testați acest cod doar când în Access este deschisă o altă bază de date. Deci, pregătiți Access, deschizând mai întâi o altă bază de date.

Acest exemplu declară o variabilă obiect Workspace denumită myWorkspace și o variabilă obiect Database denumită myDatabase. Apoi atribuie myWorkspace primul obiect Workspace din colecția Workspaces (spațiul de lucru implicit) și atribuie myDatabase la Northwind.accdb, pe care o deschide în modul exclusiv cu acces la citire/scriere.

Pentru a vă arăta că Northwind a fost deschisă, se preiau datele orașului de la prima înregistrare din tabelul Customers. Apoi, vom afișa numele orașului, după care vom elibera memoria prin închiderea setului de înregistrări și a instanței de baze de date.

Puteți încerca acest lucru introducând acest cod într-un modul în Access VBA Editor, dar nu uitați să faceți acest lucru în timp ce în Access este deschisă o altă bază de date, alta decât Northwind. Apăsați F5, și veți vedea datele preluate. Baza de date aflată în prezent în Access va rămâne nederanjată.

Sub test()
Dim myWorkspace As Workspace
Set myWorkspace = DBEngine.Workspaces(O)

Dim myDatabase As Database 
Dim RecSet As Recordset

Set myDatabase = myWorkspace.OpenDatabase _
   (Name:="C:\temp\northwind.accdb", _
   Options:=True, ReadOnly:=False)

Set RecSet = myDatabase.OpenRecordset("Customers", dbOpenDynaset)

MsgBox ("Am preluat datele dintr-o instanta invizibila a Northwind: " & RecSet!City)

RecSet.Close
myDatabase.Close

End Sub

Închiderea unei baze de date

Pentru a închide o bază de date pe care ați deschis-o utilizând metoda OpenDatabase, utilizați metoda Close a variabilei obiect la care ați asociat baza de date. De exemplu, următoarea instrucțiune închide baza de date atribuită variabilei obiect myDatabase:

myDatabase.Close

Crearea și eliminarea spațiilor de lucru

Pentru a păstra baze de date diferite în sesiuni separate, aveți posibilitatea să creați un spațiu de lucru nou, iar după ce ați terminat lucrul cu acesta, este necesar să îl eliminați.

Crearea unui spațiu de lucru nou

Pentru a crea un spațiu de lucru nou, utilizați metoda CreateWorkspace a obiectului DBEngine.

Sintaxa este următoarea:

Set workspace = CreateWorkspace(Name, UserName, Password, UseType)

Iată componentele sintaxei:

  • workspace este variabila obiect căreia doriți să îi asociați spațiul de lucru pe care îl creați.
  • Name este un argument obligatoriu de tip String care specifică numele pe care trebuie să-l atribuiți noului spațiu de lucru.
  • UserName este un argument necesar de tip String care specifică proprietarul noului spațiu de lucru.
  • Password este un argument necesar de tip String care specifică parola pentru noul spațiu de lucru. Parola poate avea o lungime de până la 14 caractere. Utilizați un șir gol dacă doriți să setați o parolă necompletată.
  • UseType este un argument opțional care indică tipul de spațiu de lucru de creat. Utilizați dbUseJet pentru a crea un spațiu de lucru Microsoft Jet. Utilizați dbUseODBC pentru a crea un spațiu de lucru ODBCDirect. Omiteți acest argument dacă doriți proprietatea DefaultType a obiectului DBEngine pentru a determina tipul de sursă de date conectat la spațiul de lucru.

Următorul exemplu declară o variabilă obiect denumită myWorkspace de tip Workspace și îi atribuie un nou spațiu de lucru Jet denumit Workspace2. Exemplul face ca proprietarul noului spațiu de lucru să fie contul de admin:

Dim myWorkspace As Workspace
Set myWorkspace = CreateWorkspace(Name:="Workspace2", _
   UserName:="admin", Password:="", UseType:=dbUseJet)

După crearea unui spațiu de lucru nou, aveți posibilitatea să îl utilizați pentru a deschide o bază de date nouă (așa cum este descris mai sus).

Eliminarea unui spațiu de lucru

Înainte de a elimina un spațiu de lucru din colecția Workspaces, trebuie să închideți toate conexiunile deschise și baze de date. Apoi utilizați metoda Close pentru a închide obiectul Workspace. De exemplu, următoarea instrucțiune închide obiectul Workspace identificat de variabila obiect myWorkspace:

myWorkspace.Close