aktif transaction

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

aktif transaction

Mesaj gönderen serbek_tr »

Arkadaşlar table a kullandığım tool dan sabit olacağı için veri girişi yapmıştım bu kayıtlardan birini sileyim dedim kullandığım ems manager dan silemedim kayıtları siliyorum commit ediyorum kayıtlar geri geliyor
program satırlarından sileyim dedim yazdığı kod satırları şunlar herhalde yanlış değildir

Kod: Tümünü seç

If not datamodule1.IBTransaction1.InTransaction then
Begin
 DataModule1.IBTransaction1.StartTransaction;
 DataModule1.Tbl_Doviz.Delete;
 DataModule1.IBTransaction1.CommitRetaining;
end;
tabi bu durumda hiç bir işlem gerçekleşmiyor

Kod: Tümünü seç

DataModule1.IBTransaction1.StartTransaction;
 DataModule1.Tbl_Doviz.Delete;
 DataModule1.IBTransaction1.CommitRetaining;

direk yukarıdaki gibi yaptığımda da Transaction is active mesajını alıyorum bu aktif transaction nerdedir yahu ne yanlış yapıyorum .daha acemiyim biliyormusunuz.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ibtable yada ibdataset,ibquery nesneleri calıstıgında zaten bir transacion baslatırlar
ayrıca senin starttransaction demene gerek yok
delphide bu sekilde bir hata veriyo aktif oldugu icin
bu satırları kaldırırsan sorun cıkmaması lazım
ayrıca starttransaction ı ben sadece delete update gibi queryleri ibsql ile calıstıracagım zaman kullanıyoum...

Kod: Tümünü seç

      IBTransaction1.StartTransaction;
      IBSQL1.ExecQuery; 
      IBTransaction1.Commit;
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Bu arada birşey daha sorayım silme işlemi için updatesql e aşağıda kod yazılıyor

Kod: Tümünü seç

DELETE FROM
 TBL_DOVIZ
WHERE
  DOVIZ = :OLD_DOVIZ
peki iki index varsa mesela doviz ve id diye iki field index olarak tanımlandıysa bunların silme ve modify sql komutları nasıl olmalı
tabloda 3 tane field var resim doviz ve id - id ve doviz primary key olarak tanımlandı

Kod: Tümünü seç

UPDATE TBL_dovız
SET
  resim = :reism
WHERE
  id = :OLD_id, doviz=:old_doviz
ve

Kod: Tümünü seç

DELETE FROM
 TBL_DOVIZ
WHERE
  DOVIZ = :OLD_DOVIZ, id=:old_id
şeklindemi olacak
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

hocam ayrıca şu dediğin olayıda yaptım ama yinede silme olayında aynı hatayı veriyor
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Hoca teşekkür ederim silme olayını hallettim ama diğer yazdıklarım için görüşlerinizi ve yardımlarınızı hala bekliyorum.

silme olayını nasıl halletiğime gelince Transaction ı başlatmadım sadece Beforedelete olayına ibtransaction.commitretaining yazdım gerçekleşti
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Bildiğim kadarı ile tabloyu open ettiğin zaman transaction otomatik olarak başlıyor. kontrol işlemini şöyle yaparsan (ben öyle yapıyorum) daha sağlam olur gibi

Kod: Tümünü seç

  if not DataModule1.IBTransaction1.active then  DataModule1.IBTransaction1.StartTransaction;
 DataModule1.Tbl_Doviz.Delete;
if  DataModule1.IBTransaction1.active then  
DataModule1.IBTransaction1.CommitRetaining;
belki delete den sonra active kontrol etmeye gerekyoktur ama olayın anlaşılması için kullandım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

IBX de ibtable yada ibquery yi open ettiğin anda bağlı olan transaction açılır, sen bunu start etmene gerek yok.
delete içinse ibupdatesql in ibquery ye bağla daha sonra property editörden prkey ye ne verdiysen onları seç daha sonra query yi oluştur dediğinde butonun adını unuttum o sana tüm sql leri oluşturur. afterdelete ve afterpost ada

Kod: Tümünü seç

If ibquery1.Transaction.InTransaction then
Begin
 ibquery1.Transaction.CommitRetaining;
end; 
yazarsan problem yaşamazsın. ha bu arada intransaction ın parametrelerinide unutma. ezberimde yok forumda geçmişti bu konu arattırabilirsin
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

daha onceki mesajlarda da gecti mutlaka bir primarykey kullanmakta fayda var diye prkey olmazsa vt neye gore silme yapacak

eger bir dataset ile update,insert yada delete kodu calıstırdıgınızda hicbir degisiklik olmuyorsa sql kodları olusturulmamıs. Dataset editorden (yada updatesql editorden) prkey secilir sag taraftaki listeden de update edilecek alanlar secilir, sonra generatesql denir uc islem icinde sql kodları olusturulur.

bazen karmasık join ifadeler vs. varsa olusan sql ler bi gozden gecirilir, bazen tablo ismi gibi seyleri eklemede sorun olabiliyor..
gerci ben d5 icin olanı kullanıyorum belki digerlerinde yoktur boyle birsey...
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Aslangeri arkadaşım freeman35 dediği doğru ilk önc farkındaysan en üstte yazdığım kod senin yazdığın kod ile benzer ve o şekilde yaptığımda zaten aktif transaction var diye hata veriyor ve freeman35 in dediği gibi transaction otomatik start ediyor bu konuda görüşlerinizi paylaştığınız için ikinizede çok teşekkür ederim ayrıca istransaction parametrelerini aratıp bir bakacağım yalnız ister istemez aynı başlık altında iki farklı konu açmış oldum diğer konu içinde fikirleriniz varsa paylaşırsanız sevinirim. Burda amaç kısaca şu aktarayım

bazı tablelerde indexte iki tane fiel belirtmek zorundayım kendimce tabi doğrusu nedir sizden öğreneceğim bu field lardan biri genelde ID diğeri ise tablonun kafa fieldı oluyor mesela doviz tablosunda olduğu gibi doviz field ve ID field ları indexte sebep aynı dovız adından ikincisi tekrar etmesin diye Id ise başka tablolara bu dövizin adını değilde ilgili dövizin id sini alıyorumki doviz adında bir değişiklik olduğunda diğer tablolarda dğiştirmek zorunda kalmayayım diye umarım buraya kadar bir fikir sunmanıza yardımcı olacak kadar anlatabilmişimdir. şimdi yukarı soru-cevaplarda da belirttiğim gibi bu şekilde iki anahtarı olan bir tablenin sqlupdate teki delete, modify vs. işlemleri hangi anahtara göre olmalı
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bazı ozel tablolarda iki hatta uc tane prkey olabilir mesela id1 ve id2 alanı ortak prkey olan bir tabloda
1,1
1,2
2,1
2,2
gibi kayııtlar olabilmekte
bu durumda bu iki alan prkey olarak secilip sql olusturulur.

Kod: Tümünü seç

delete from mytable
where
  id1 = :old_id1 and
  id2 = :old_id2
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

hocam çok teşekkür ettim beynine sağlık Allah Razı olsun
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla