vineri, 25 noiembrie 2011

Exemple de utilizare a interogărilor SQL


Pentru a demonstra rezultatele limbajului SQL, exemplele următoare propun două proceduri echivalente, una folosind limbajul SQL, cealaltă nu.
Pentru a realiza aceste exemple, se crează un tabel Clienţi având câmpurile Cli_Societate, Cli_Ţară şi Cli_Oraş şi se tastează câteva înregistrări în acest tabel.

ACTUALIZAREA ÎNREGISTRĂRILOR
Codul din exemplul următor permite modificarea conţinutului unui câmp dintr-un tabel pentru înregistrările ce corespund criteriilor.
Codul VBA ce utilizează o interogare SQL de tip UPDATE
Private Sub Maj_Plati()
Dim cncDeviz As ADODB.Connection
Dim strSQL As Sring
`Actualizarea codului ţării din tabelul Clienţi
Set CncDeviz = CurrentProject.Connection
strSQL = „UPDATE Clients SET Clients.Cli_Plati = `RO` _
         & „WHERE Clienti.Cli_Oras = „Timisoara”
cncDeviz.Execute strSQL
END SUB


Codul VBA echivalent fără interogarea SQL
Private Sub Maj_Plati()
Dim cncDeviz As ADODB.Connection
Dim rstClient As ADODB.RecordSet
` Deschidere pentru înregistrare
Set CncDeviz = CurrentProject.Connection
Set rstClient = New ADODB.RecordSet
rstClient.Open „Clienti”, cncDeviz, adOpenForwardOnly,_
           adLockOptimistic
`Parcurgerea secvenţială a tabelului Clienţi
Do While Not rstClient.EOF
    If rstClienti(„Cli_Oras”)= „Timisoara” Then
       rstClient(„Cli_Plata”)= „RO”
       rstClient.Update
    EndIf
    rstClient.MoveNext
Loop
End Sub

ÎNCĂRCAREA UNEI LISTE DERULANTE
Codul exemplului de mai jos permite afişarea într-o listă derulantă (controlul zonă de listă) a numelui clienţilor a căror nume de Societate începe cu o listă dată (litera este scrisă într-o zonă de text).
Pentru a testa acest exemplu:
-          se crează un formular numit Clienţi
-          se adaugă controalele următoare în acest formular:
 - o zonă de text (txtNameSoc),
 - o zonă de listă (IstSoc),
 - un buton de comandă (cmdLista1).

Codul VBA ce utilizează interogarea SQL de tipul SELECT. Conţinutul listei este rezultatul interogării SQL.
Private Sub cmdListe1_Click()
Dim strSQL As Sring
`Controlul numelui scris
If txt numeSoc = „ „ Then
   MSGBOX(„Trebuie să tastaţi cel puţin o literă”, _
   txtNumeSoc.SetFocus
   Exit Sub
End If
`Proprietăţi ale listei derulante
`Lista conţine o interogare
Me.lstSoc.RowSourceType = „Table/Interogare”
strSQL = „SELECT Clienti.Cli_Societate Like `”& _    Me.txtNumeSoc & „*`
Me.lstSoc.RowSource = strSQL
`Reactualizarea datelor listei
Me.lstSoc.Interogare
End Sub

Codul VBA echivalent fără interogarea SQL.
Private Sub cmdListe1_Click()
Dim cncDeviz As ADODB.Connection
Dim rstClient As ADODB.RecordSet
Dim strNumeSoc as String
`Controlarea numelui scris
If txtNumeSoc = „ „ Or IsNull(txtNumeSoc) Then
MSGBOX(„Numele acesta a mai fost introdus”, vbExclamation)
txtNumeSoc.SetFocus
Exit Sub
End If
`Iniţializarea listei derulante
`Lista conţine o suită de valori
Me.lstSoc.RowSourceType = „Lista de valori”
Me.lstSoc.RowSource = „ „
Me.lstSoc.Requery
`Deschiderea unui set de înregistrări
Set cncDeviz = CurrentProject.Connection
Set rstClient = New ADODB.Recordset
rstClient.Open „Clienti”, cncDeviz, adOpenForwardOnly, _
    adLockOptimistic
` Parcurgere secvenţială a tabelului şi adăugarea elementelor în listă
Do While Not rstClienti.EOF
   If Left(rst(Client(„Cli_Societate”),1) = _
               Left(MetxtNumeSoc, Len(Me.txtNumeSoc)) Then
       strNumeSoc = rstClient(„Cli_Societate”)
       Me.LstSoc.AddItem strNumeSoc
   End If
   rstClient.close
End Sub

Observaţie:
  1. Exemplele precedente constată faptul că codul ce utilizează SQL este mai scurt şi execuţia sa este mai rapidă în special dacă tabelul client conţine un număr important de înregistrări.

Niciun comentariu:

Trimiteți un comentariu