������
���ĵ���ϸ���� cDataBase ������������ܣ���������Ŀ�ʼ���ύ���ع��ȡ�
? Ŀ¼
�������
ʲô������
������һ�����ݿ������Ҫôȫ���ɹ���Ҫôȫ��ʧ�ܡ���������������ԣ�ACID����
- ԭ���� (Atomicity) - �����е����в���Ҫôȫ��ִ�У�Ҫôȫ����ִ��
- һ���� (Consistency) - ����ִ��ǰ�����ݿⱣ��һ��״̬
- ������ (Isolation) - ��������֮�������
- �־��� (Durability) - �����ύ���������ñ���
����״̬
��ʼ����
��
ִ�в��� 1
��
ִ�в��� 2
��
ִ�в��� 3
��
�ύ���� ������ �ɹ������в�����Ч
��
�������� ʧ�ܣ��Զ��ع������в�����������
TransBegin ����
TransBegin ������ʼһ��������
�
vb
Function TransBegin() As Boolean����ֵ
True- ����ʼ�ɹ�False- ����ʼʧ�ܣ���ͨ��LastErr�鿴������Ϣ��
ʾ��
vb
' ��ʼ����
If db.TransBegin Then
Debug.Print "�����ѿ�ʼ"
Else
Debug.Print "����ʼʧ��: " & db.LastErr
End IfTransCommit ����
TransCommit �����ύ����
�
vb
Function TransCommit() As Boolean����
- �ύ���������еIJ���
- ����ύʧ�ܣ��Զ��ع�
- ���������
����ֵ
True- �ύ�ɹ�False- �ύʧ�ܣ����Զ��ع���
ʾ��
vb
' �ύ����
If db.TransCommit Then
Debug.Print "�����ύ�ɹ�"
Else
Debug.Print "�����ύʧ�ܣ����Զ��ع�: " & db.LastErr
End IfTransRollback ����
TransRollback �����ع�����
�
vb
Function TransRollback() As Boolean����
- �������������еIJ���
- ���������
����ֵ
True- �ع��ɹ�False- �ع�ʧ�ܣ���ͨ��LastErr�鿴������Ϣ��
ʾ��
vb
' �ع�����
If db.TransRollback Then
Debug.Print "�����ѻع�"
Else
Debug.Print "�ع�ʧ��: " & db.LastErr
End If����ʹ��
ʾ�� 1��������
vb
' ��ʼ����
If db.TransBegin Then
' ִ�в��� 1
If db.Sql("INSERT INTO users (name) VALUES ('����')").Exec Then
' ִ�в��� 2
If db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����')").Exec Then
' �ύ����
If db.TransCommit Then
Debug.Print "�����ύ�ɹ�"
Else
Debug.Print "�ύʧ�ܣ����Զ��ع�"
End If
Else
' ���� 2 ʧ�ܣ��ع�
db.TransRollback
End If
Else
' ���� 1 ʧ�ܣ��ع�
db.TransRollback
End If
End Ifʾ�� 2��ʹ�ô�����
vb
On Error GoTo ErrHandler
' ��ʼ����
If Not db.TransBegin Then
Debug.Print "����ʼʧ��: " & db.LastErr
Exit Sub
End If
' ִ�ж������
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
db.Sql("UPDATE users SET status = 'active' WHERE name = '����'").Exec
' �ύ����
If db.TransCommit Then
Debug.Print "���в����ɹ�"
Else
Debug.Print "�ύʧ��: " & db.LastErr
End If
Exit Sub
ErrHandler:
' �������ع�����
db.TransRollback
Debug.Print "�������������ѻع�: " & Err.Descriptionʾ�� 3��ת�˲���
vb
' ת�˲��������˻� A ת 100 Ԫ���˻� B
Function TransferMoney(lFromAccount As Long, lToAccount As Long, dAmount As Double) As Boolean
On Error GoTo ErrHandler
' ��ʼ����
If Not db.TransBegin Then
TransferMoney = False
Exit Function
End If
' ���˻� A �۳����
Dim sSql As String
sSql = "UPDATE accounts SET balance = balance - " & dAmount & _
" WHERE id = " & lFromAccount & " AND balance >= " & dAmount
If Not db.Sql(sSql).Exec Then
db.TransRollback
TransferMoney = False
Exit Function
End If
' ����Ƿ��м�¼������
Dim lAffected As Long
If db.Sql("SELECT @@ROWCOUNT").Query Then
If db.Rs.EOF Or db.Rs(0) = 0 Then
db.TransRollback
TransferMoney = False
Exit Function
End If
End If
' ���˻� B ���ӽ��
sSql = "UPDATE accounts SET balance = balance + " & dAmount & _
" WHERE id = " & lToAccount
If Not db.Sql(sSql).Exec Then
db.TransRollback
TransferMoney = False
Exit Function
End If
' ��¼ת����־
sSql = "INSERT INTO transfers (from_account, to_account, amount) VALUES (" & _
lFromAccount & ", " & lToAccount & ", " & dAmount & ")"
If Not db.Sql(sSql).Exec Then
db.TransRollback
TransferMoney = False
Exit Function
End If
' �ύ����
If db.TransCommit Then
TransferMoney = True
Else
TransferMoney = False
End If
Exit Function
ErrHandler:
db.TransRollback
TransferMoney = False
End Function������
�Զ��ع�����
����ṩ���Զ��ع����ƣ�
- �ύʧ���Զ��ع� -
TransCommitʧ��ʱ�Զ�����TransRollback - �Ͽ������Զ��ع� -
Disconnectʱ�Զ��ع�δ��ɵ�����
vb
' �ύʧ��ʱ�Զ��ع�
If db.TransBegin Then
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
' ����ύʧ�ܣ����Զ��ع�
If Not db.TransCommit Then
Debug.Print "�ύʧ�ܣ����Զ��ع�: " & db.LastErr
End If
End If������ʾ��
vb
Function ExecuteTransaction() As Boolean
On Error GoTo ErrHandler
' ��ʼ����
If Not db.TransBegin Then
Debug.Print "����ʼʧ��: " & db.LastErr
ExecuteTransaction = False
Exit Function
End If
' ִ�в���
If Not db.Sql("INSERT INTO users (name) VALUES ('����')").Exec Then
db.TransRollback
Debug.Print "����ʧ��: " & db.LastErr
ExecuteTransaction = False
Exit Function
End If
' �ύ����
If db.TransCommit Then
ExecuteTransaction = True
Else
Debug.Print "�ύʧ��: " & db.LastErr
ExecuteTransaction = False
End If
Exit Function
ErrHandler:
' �����쳣���ع�����
db.TransRollback
Debug.Print "�쳣�������ѻع�: " & Err.Description
ExecuteTransaction = False
End FunctionǶ������
ע������
ADO ֧��Ƕ��������Ҫע�⣺
- Ƕ���� - ADO ֧�ֶ༶Ƕ������
- �ύ˳�� - ���밴�෴˳���ύ���ڲ����ύ��
- �ع�Ӱ�� - �ع���Ӱ������Ƕ����
Ƕ������ʾ��
vb
' �������
If db.TransBegin Then
db.Sql("INSERT INTO users (name) VALUES ('�û�1')").Exec
' �ڲ�����Ƕ�ף�
If db.TransBegin Then
db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����1')").Exec
' �ύ�ڲ�����
If db.TransCommit Then
Debug.Print "�ڲ������ύ�ɹ�"
End If
End If
' �ύ�������
If db.TransCommit Then
Debug.Print "��������ύ�ɹ�"
End If
End If���ʵ��
1. ʼ��ʹ�������������ز���
vb
' ? �Ƽ���ʹ������֤һ����
db.TransBegin
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����')").Exec
db.TransCommit
' ? ���Ƽ�����ʹ������
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����')").Exec
' ����ڶ�������ʧ�ܣ���һ�������Ѿ��ύ�����ݲ�һ��2. ���ÿ�������ķ���ֵ
vb
' ? �Ƽ������ÿ������
db.TransBegin
If Not db.Sql("INSERT INTO users (name) VALUES ('����')").Exec Then
db.TransRollback
Exit Sub
End If
If Not db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����')").Exec Then
db.TransRollback
Exit Sub
End If
db.TransCommit3. ʹ�ô�����
vb
' ? �Ƽ���ʹ�ô�����
On Error GoTo ErrHandler
db.TransBegin
db.Sql("INSERT INTO users (name) VALUES ('����')").Exec
db.Sql("INSERT INTO posts (user_id, title) VALUES (1, '����')").Exec
db.TransCommit
Exit Sub
ErrHandler:
db.TransRollback
Debug.Print "����: " & Err.Description4. ��ʱ�ύ��ع�
vb
' ? �Ƽ���������ɺ������ύ��ع�
db.TransBegin
' ... ִ�в��� ...
db.TransCommit ' �� db.TransRollback
' ? ���Ƽ�����ʱ�䱣�������
db.TransBegin
' ... ִ�в��� ...
' �ȴ��û����루���ִ�״̬��
' ...
db.TransCommit5. ʹ����������������
vb
' ? �Ƽ�����������ʹ������
db.TransBegin
Dim i As Long
For i = 1 To 1000
If Not db.Sql("INSERT INTO users (name) VALUES ('�û�" & i & "')").Exec Then
db.TransRollback
Exit For
End If
Next
If i > 1000 Then
db.TransCommit
End If��������
Q1: �����ύ������û�б��棿
ԭ��: ���������ݿⲻ֧�������������ַ����������⡣
���:
- ������ݿ������Ƿ�֧������
- ��֤�����ַ�������
Q2: ��μ������״̬��
vb
' ע�⣺����ڲ�ʹ�� IsTrans ��ǣ��������Ⱪ¶
' ����ͨ�������ύ�����
If db.TransCommit Then
Debug.Print "���������ύ�ɹ�"
Else
Debug.Print "û��������ύʧ��"
End IfQ3: �����Ӱ��������
�ش�: �ǵģ������������Դ��Ӱ�첢�����ܡ�
����:
- ������������ʱ��
- ֻ������Ҫ�IJ���
- �����������н��г�ʱ�����
������: 2026-01-21