BeginTrans yöntemi, işlemin yuvalanma düzeyini döndüren bir işlev olarak kullanılabilir. Bunu saklamak için bir özellik oluşturursanız, 0'dan büyük bir değer olup olmadığını görmek için istediğinizi kontrol edebilirsiniz. İşlemi gerçekleştirdiğinizde veya geri aldığınızda mülkünüzü kendiniz azaltmanız gerekir.
Private m_TransLevel As Long
Public Property Get TransactionLevel() As Long
TransactionLevel = m_TransLevel
End Property
Public Property Let TransactionLevel(vLevel As Long)
m_TransLevel = vLevel
End Property
Public Sub SaveMyData()
TransactionLevel = adoConnection.BeginTrans()
...
End Sub
Ayrıca seviye> 1. Ben de bu beğenmediğiniz True/False döndüren bir işlev içinde çalışmaya dönüş değeri adapte olabilir, ancak hata işleme olmadan böyle bir şey (görünecektir)
Public Function IsConnectionInsideTransaction(ByVal vADOConnection as ADOBD.Connection) As Boolean
Dim intLevel As Integer
If vADOConnection.State = AdStateOpen Then
intLevel = vADOConnection.BeginTrans()
IsConnectionInsideTransaction = (intLevel > 1)
vADOConnection.RollbackTrans
End If
End Function
İlk yöntemin varyasyonlarını düşündüm, esasen ADODB.Connection'ı yeni Bu ve diğer işlevleri ekleyen MyConnection sınıfı. Mümkünse mevcut koddaki değişiklikleri en aza indirgemek istedi. İkinci yol benim soruma cevap veriyor, sanırım, ama benim için çok riskli görünüyor, aslında her kontrol ettiğimde veritabanıyla etkileşim kurmak istemiyorum ... Önerileriniz için teşekkürler! –
Kendi bağlantı sınıfınızla sarmanın başka bazı avantajları olabilir. VB.net'e yükseltmeniz gerekiyorsa, tüm ADO nesnelerini kendi nesnelerinize yerleştirdiyseniz daha kolay olabilir. ADO için benzer imzalara sahip olabilirsiniz (mevcut koddaki değişiklikleri en aza indirmek için), ancak yükseltme işlevinin kapsamını sınırlamak için yalnızca en az işlevsellik açığa çıkarırsınız. Onları bir DLL projesine koymanızı öneriyorum, böylece ana proje ADO'ya bile atıfta bulunmuyor. Tam açıklama: bunu tamamen kendi projelerimizde yapmadık, ama keşke sahip olsaydık. – MarkJ
Sadece raporlama motorumuz 'ADODB.Connection' etrafında bir sarıcı kullanıyorsa! Mevcut rapor çıkarma kodundaki değişiklikleri minimize etme fikriyle, kullanıcıların kablosuz bir bağlantı üzerinden raporları çalıştırabilmeleri için (ki bu durum bizim örneğimizde özel bir RPC sunucusundan geçiyor) fikrini belirledim. –