Mor an (IdPracownika = 537847)
IdKlienta
ALFKI
BLAUS
DRACD
FRANK
KOENE
IFHMS
"fj
Id klienta [ Id pracownika | Data wpisu I Wpisa³
BERGS FOLKO
537847 537847
dbo
1999-11-13 \ 1999-04-02
Rysunek 2.31. Zastosowanie transakcji (Przyk³ad 1)
Kiedy dan¹ transakcjê trzeba odwo³aæ lub anulowaæ, to mówi siê ¿e dan¹ trans-j akcjê cofniêto (Rolled back). Przy dokonywaniu masowych zmian w tabelach bazy danych w chwili wyst¹pienia b³êdu wszystkie zmiany wprowadzone w tabelach musz¹ byæ cofniêtne, aby dana baza danych pozosta³a w stanie nienaruszonym. Obiekt workspace dysponuje trzema metodami umo¿liwiaj¹cymi programatyczn¹ obs³ugê trans-
akcji'. BeginTrans, CommitTrans, oraz RoiioacK. jmi,jO
okreœlenia miejsca rozpoczêcia transakcji. Skorzystaj z metody commitTran, aby zatwierdziæ wprowadzone zmiany. W razie wyst¹pienia b³êdu w transakcji, instrukcja Rollback umo¿liwi anulowanie zmian wprowadzonych w transakcji od momentu instrukcji BeginTrans. Rollback anuluje zmiany i przywraca stan sprzed rozpoczêcia transakcji. Poniewa¿ nie wszystkie obiekty Recordset mog¹ obs³ugiwaæ transakcje, nale¿y skorzystaæ z w³aœciwoœci Transactions obiektu Recordset, aby dowiedzieæ siê, czy dany obiekt posiada mo¿liwoœæ obs³ugi transakcji.
Procedura w przyk³adzie 2.31.A demonstruje, w jaki sposób mo¿na zastosowaæ transakcjê przy dodawaniu nowych rekordów do tabeli bazy danych na podstawie informacji przechowywanych winnej tabeli. Tabela o nazwie NiemieccyKlienci zawiera identyfikatory tych klientów, którzy musz¹ byæ powi¹zani z okreœlonym identyfikatorem pracownika (idPracownika). Procedura odczytuje ka¿dy rekord z tabeli KiemieccyKlienci i tworzy nowy rekord w tabeli o nazwie Powi¹zania. Operacja ta wymaga u¿ycia metody AddNew obiektu Recordset oraz wpisania danych w czterech polach. Zwróæ uwagê, ¿e procedura zastawia dwie pu³apki na b³êdy. Jedna z nich, G³ównaObs³ugaB³êdu, przejmie b³êdy zachodz¹ce poza transakcj¹. Przypuœæmy, ¿e wpisa³eœ nieprawid³ow¹ nazwê tabeli NiemieccyKlienci. W trakcie wykonywania tej procedury Visual Basic nie bêdzie móg³ przypisaæ zawartoœci zmiennej rstl, wobec czego przejdzie do instrukcji znajduj¹cych siê poni¿ej etykietki G³ównaObs³ugaB³êdu. Je¿eli natomiast b³¹d wyst¹pi w trakcie wykonywania transakcji, to Visual Basic przejdzie do procedury obs³ugi b³êdu err_Rollback i wykona instrukcjê Rollback, która anuluje ca³¹ transakcjê. Rezultat wykonania procedury cmdAssociatec-lients_click w przyk³adzie 2.31.A przedstawiony jest na rysunku 2.32.
Pit
yklad 2.31.A. Zastosowanie transakcji (Przyk³ad 1)
Prlvate Sub cmdPowi¹¿Klientów_Click() DlmmojaDb As DAO.Database Dim rstl As DAO.Recordset Dim rst2 As DAO.Recordset Dim IdPrac As String
On Error GoTo G³ównaObs³ugaB³êdu
qet mojaDb = CurrentDb
set rstl = InojaDb.OpenRecordsetrNiernieccyKlienci
set rst2 = mojaDb.OpenRecordset("Powi¹zania") IdPrac = -537847"
BeginTrans
342
Programowanie w Access 2
On Error GoTo err_Rollback With rstl
Do Until .EOF
Debug.Print rstl!IdKlienta With rst2
.AddNew
rst2!IdKlienta = rstl!IdKlienta rst2!IdPracownika = IdPrac rst2IDataWpisu = Now()
1 usuñ znak komentarza w nastêpnej instrukcji, aby spowodowaæ! ' cofniêcie transakcji
'rst2IWpisanoPrzez = "mójld" rst2IWpisanoPrzez = "mójld" .Update End With rstl.MoveNext Loop
End With CommitTrans
rstl.Close Set mojaDb = Nothing Me.lboxPowiazania.Requery
Me.ZmieñEtykietkê.Caption = "Usuñ powi¹zania" Me.cmdUsuñPowi¹zania.Enabled = True Me.cmdUsuñPowi¹zania.SetFocus Me.cmdPowi¹¿Klientow.Enabled = False Exit Sub G³ownaObs³ugaB³êdu:
MsgBox Err.Number & ": " & Err.Description Exit Sub err_Rollback: Rollback MsgBox "Transakcjê anulowano.", _
vbOKOnly + vbExclamation, "Nieoczekiwany b³¹d" rstl.Close Set myDb = Nothing End Sub
orzenie i mani
pulowanie bazami danych za pomoc¹ ADO
u¿ytkowników/grup Transakcje |
Bezpieczeñstwo danych / obs³uga transakcji
Obszaryjêtoczej U¿y
Usuñ powi¹zania
[dKlient¹_
ALFKI
BLAU5
IDRACD
FRANK
.KOENE
zl
Klienci podlegaj¹cy pracownikowi 3. Hor an (IdPracownika = S3784?)
| Id pracownika
537347 :537847
537847
537847
537847 :537R47
Id klienta
BERGS
FOLKO
ALFKI
BLAU5
DRACD
frank:
[Data wpis* i | Wpisa³ 1999-11-13 dbo 1999-04-02 dbo 2002-02-12 OOimójId 2002-02-12 00:: mójld 2002-02-12 00: mójld ?nn?-n?-i ? nn:: mñitH
Rysunek 2.32. Zastosowanie transakcji (Przyk³ad 2)
I
przyk³adzie.
Przyk³ad 2.31.B. Zastosowanie transakcji (Przyk³ad 2)
private Sub cmdUsuñPowi¹zania_Click () Dimm0jaDb As DAO.Database Dim rstl As DAO.Recordset Dim IdPrac As String Dim strSQL As String On Error GoTo err_UsuñPowi¹zania
IdPrac = "537847" BeginTrans
Do Until rstl.EOF
344
Programowanie w Access 2(fl
Debug.Print rstl!IdKlienta strSQL = "DELETE FROM Powi¹zania " _