Skip to content

������

���ĵ���ϸ���� 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 If

TransCommit ����

TransCommit �����ύ����

�﷨

vb
Function TransCommit() As Boolean

����

  • �ύ���������еIJ���
  • ����ύʧ�ܣ��Զ��ع�
  • ���������

����ֵ

  • True - �ύ�ɹ�
  • False - �ύʧ�ܣ����Զ��ع���

ʾ��

vb
' �ύ����
If db.TransCommit Then
    Debug.Print "�����ύ�ɹ�"
Else
    Debug.Print "�����ύʧ�ܣ����Զ��ع�: " & db.LastErr
End If

TransRollback ����

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

������

�Զ��ع�����

����ṩ���Զ��ع����ƣ�

  1. �ύʧ���Զ��ع� - TransCommit ʧ��ʱ�Զ����� TransRollback
  2. �Ͽ������Զ��ع� - 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 ֧��Ƕ�����񣬵���Ҫע�⣺

  1. Ƕ�׼��� - ADO ֧�ֶ༶Ƕ������
  2. �ύ˳�� - ���밴�෴˳���ύ���ڲ����ύ��
  3. �ع�Ӱ�� - �ع���Ӱ������Ƕ�׼���

Ƕ������ʾ��

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.TransCommit

3. ʹ�ô�����

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.Description

4. ��ʱ�ύ��ع�

vb
' ? �Ƽ���������ɺ������ύ��ع�
db.TransBegin
' ... ִ�в��� ...
db.TransCommit  ' �� db.TransRollback

' ? ���Ƽ�����ʱ�䱣�������
db.TransBegin
' ... ִ�в��� ...
' �ȴ��û����루���񱣳ִ�״̬��
' ...
db.TransCommit

5. ʹ����������������

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 If

Q3: �����Ӱ��������

�ش�: �ǵģ������������Դ��Ӱ�첢�����ܡ�

����:

  • ������������ʱ��
  • ֻ������Ҫ�IJ���
  • �����������н��г�ʱ�����

������: 2026-01-21

VB6及其LOGO版权为微软公司所有