Transaction sorunu

Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Merhabalar,

Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command

Set cnn = New ADODB.Connection
Set cnn = CurrentProject.Connection

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cnn

cnn.BeginTrans

şeklinde transaction başlatıyorum.
primary key alanı AutoNumber olan
Tablo1 tablosuna, alan1 field ı Me!alan1 olacak şekilde bir kayıt atıyorum

Hemen ardından
DLookup("id", "Tablo1", "alan1" = " & Me!alan1)
ile, Tablo1 e yeni atılan kaydın, özelliği AutoNumber olan id sini yakalamak
istiyorum ancak herhangi bir değer dönmüyor.

Aynı işlemi cnn.BeginTrans satırını iptal edince herhangi bir sorun olmuyor.

Bu bir bug mıdır, yoksa bu id ye başka bir şekilde mi ulaşılıyor acaba?

buradaki id alanı diğer birçok tabloya taşınacağı için önemli.

şimdilik, cnn.BeginTrans ı Tablo1 e kayıt yaptıktan hemen sonraya aldım.
eğer bir hata ile karşılaşılırsa cnn.RollbackTrans tan hemen sonra
Tablo1 deki kaydı da siliyorum tutarsızlık olmasın diye, ancak bu yöntem
pek hoşuma gitmedi.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın yeni54,

Bu şekilde örnek olmadan verilen cevaplar biraz afaki oluyor. Verdiğim cevaptan da pek emin değilim. Ama kullandığınız bu değişim fonksiyonu tablo değişim işlemlerini çabuklaştırmak için kullanılıyor.

Siz örneğinizde anladığım kadarıyla bir ADODB bağlantısı açıyorsunuz ve onu değiştirmeye çalışıyorsunuz. Sanırım bir de değiştireceğiniz tabloyu açıp ona da BeginTrans fonksiyonunu uygulamanız gerekiyor. Bir de öyle deneyin.

Bir yerden bir kod parçası buldum bir böyle deneyin:

Kod:
Public Sub TestSQLTrans(fCommit As Boolean)
Dim cnx As ADODB.Connection
Dim cmd As ADODB.Command

Set cnx = CurrentProject.Connection
Set cmd = New ADODB.Command

Set cmd.ActiveConnection = cnx
cmd.CommandType = adCmdText
cmd.CommandText = "BEGIN TRANSACTION"
cmd.Execute

cmd.CommandText = "DELETE FROM tblMenu WHERE MenuId > 5"
cmd.Execute

If fCommit Then
cmd.CommandText = "COMMIT"
Else
cmd.CommandText = "ROLLBACK"
End If
cmd.Execute

Set cmd = Nothing
End Sub
İyi çalışmalar:)
 
Son düzenleme:
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Teşekkürler sayın Modalı,

ancak aynı sorun devam ediyor.

Yani örnekteki Tablo2 tablosuna insert işleminden sonra Tablo2 deki
t2_id alanına DLookup ile ulaşamıyor.

örneği ekledim.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın yeni54,

Bir bakın bakalım istediğiniz olmuş mu?

Not: Sorguyu yardımcı olması için oluşturdum. Uygulamayı etkilemiyor.

İyi çalışmalar:)
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Değerli zamanınızı harcamışsınız teşekkürler,

bu şekilde oluyor.

Ancak benim istediğim, tek bir transaction alanı içerisinde bu olayların gerçeklemesi.

yani, blok içerisinde herhangi bir olaydan dolayı işlemleriden biri
gerçekleşmezse, Rollback olayı, Tablo2, Tablo3, ..., TabloN hareketlerini geri alsın.

Aslında olayın gerçek senaryosu şu:
Teklif modülü ile teklif_ana ve teklif_detay tablolarına kayıtlar giriliyor.
Kullanıcı herhangi bir teklifi çağırıyor, gerekli düzeltmelerini yaptıktan
sonra faturalaştırıyor.

İşte bu faturalaştırma işlemi sırasında, fatura_ana, fatura_detay,stok_hareket,cari_hareket... gibi tablolara kayıt atıyor ve en son kendi kaydı üzerine update yapıyor.

işte tüm bu olaylar tek bir transaction içerisinde olmalı ki veri bütünlüğü sağlansın.

Örnekteki Tablo2 burada fatura_ana ya karşılık geliyor.
yani t2_id (yani fatura_id) tüm bu tablolara taşınmak durumunda.

umarım anlatabilmişimdir.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın yeni54,

İç içe 5 adet transection kullanabilirsiniz. Bundan fazlasına izin yok. Biraz deneme yanılma yaptıktan sonra sonuca ulaşabilirsiniz sanırım.

İyi çalışmalar:)
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Teşekür ederim modalı.

İyi çalışmalar.
 
Üst