Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird veri kaybı
#11
Sağolasın Hocam, cevap çok işime yaradı. Allah ne muradın varsa versin...  Angel
Cevapla
#12
(25-08-2017, Saat: 14:24)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
SELECT
   A.FieldA,
   A.FieldB,
   B.FieldC,
   B.FieldD
FROM TableA A
   INNER JOIN TableB B ON A.ID = B.AID

Yukarıdaki gibi bir kullanım, TDataSet türevi bir component içine aktarıldığında ve bu component memory üzerinde işlem yapmadığında, bu bileşen üzerinde yapılan silme işlemleri genellikle TableA ve TableB üzerinden silme işlemi gerçekleştirir. (Kullanılan veri erişim katmanına ve RDBMS'e göre değişiklik arz edebilir)

Bu tip bir durumda sadece A tablosu etkileniyor diye dusunuyordum. Tum kodlari elden gecirmek gerekiyor ozaman. Bu arada dataset in delete sql bolumundeki kod "delete from A where id=:id" seklinde olsa yine de B tablosu etkileniyor mudur? (fibplus kullaniyorum dataset in SelectSQL,DeleteSQL,UpdateSql ozellikleri mevcut)
Cevapla
#13
(25-08-2017, Saat: 15:26)klavye Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(25-08-2017, Saat: 14:24)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
SELECT
   A.FieldA,
   A.FieldB,
   B.FieldC,
   B.FieldD
FROM TableA A
   INNER JOIN TableB B ON A.ID = B.AID

Yukarıdaki gibi bir kullanım, TDataSet türevi bir component içine aktarıldığında ve bu component memory üzerinde işlem yapmadığında, bu bileşen üzerinde yapılan silme işlemleri genellikle TableA ve TableB üzerinden silme işlemi gerçekleştirir. (Kullanılan veri erişim katmanına ve RDBMS'e göre değişiklik arz edebilir)

Bu tip bir durumda sadece A tablosu etkileniyor diye dusunuyordum. Tum kodlari elden gecirmek gerekiyor ozaman. Bu arada dataset in delete sql bolumundeki kod "delete from A where id=:id" seklinde olsa yine de B tablosu etkileniyor mudur? (fibplus kullaniyorum dataset in SelectSQL,DeleteSQL,UpdateSql ozellikleri mevcut)

İlgili bileşeni ve çalışma mantığını bilmiyorum ama eğer Delete Sql bölümü var ise ve oraya da belirttiğiniz gibi bir delete sql cümleciği yazdıysanız bahse konu durum oluşmamalı mantıken. Benim verdiğim örnek genellikle bu tarz sorgular için ADO component'leri ile çekilen datalar'ı yine aynı component üzerinden (TDataSet.Delete) silmeniz durumunda geçerli olur.

 Mantıken veri tedarikçi katmanı, silme emrini hangi tablodan yapacağını bilemediğinden her iki tablodan da birbirine bağlı olan kayıtları silme yolunu tercih ediyor olabilir. Tabii bu bir tahmin. Netice de elimizde ADO katmanının kaynak kodları bulunmuyor Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#14
anladım teşekkürler Tugrul bey.
Cevapla
#15
(25-08-2017, Saat: 15:38)klavye Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olanladım teşekkürler Tugrul bey.

Rica ederim.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#16
(25-08-2017, Saat: 14:24)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
SELECT
   A.FieldA,
   A.FieldB,
   B.FieldC,
   B.FieldD
FROM TableA A
   INNER JOIN TableB B ON A.ID = B.AID

Yukarıdaki gibi bir kullanım, TDataSet türevi bir component içine aktarıldığında ve bu component memory üzerinde işlem yapmadığında, bu bileşen üzerinde yapılan silme işlemleri genellikle TableA ve TableB üzerinden silme işlemi gerçekleştirir. (Kullanılan veri erişim katmanına ve RDBMS'e göre değişiklik arz edebilir)

JOIN kullandığım tüm sorgularda DataSeti ReadOnly yaptığımdan bu durum hakkında bir fikrim yoktu. Bu nedenle INNER JOIN UniDac ile ne yapar dedim, mySql ile test ettim. Unidac Delete sorgusu için TStrings tipinde SqlDelete özelliğini kullanıyor. Eğer SQL static kullanılırsa Generate SQL Insert, Update, Delete vs. sorgularınıda oluşturup bu özelliğe atabiliyor. Bu durumda :
Kod:
SELECT
  y.id yid,
  k.id kid,
  y.yetki_kodu,
  y.yetki,
  k.adi,
  k.soyadi
FROM yetkiler y
  INNER JOIN kullanicilar k ON k.id = y.user_id
Kod:
INSERT INTO yetkiler
 (id, yetki, yetki_kodu)
VALUES
 (:id, :yetki, :yetki_kodu)
Kod:
UPDATE yetkiler
SET
 id = :id, yetki = :yetki, yetki_kodu = :yetki_kodu
WHERE
 id = :Old_id

Kod:
DELETE FROM yetkiler
WHERE
 id = :Old_id

SELECT sorgusu hariç kalan sorguyu otomatik oluşturuyor. Statik Delete Sql ifadesinden dolayı silme işlemi sadece yetkiler tablosunda oldu dedim!. SELECT sorgusu hariç update, insert ve delete sql ifadelerini silerek denedim. Sonuç aynı, Unidac sadece yetkiler tablosunda silme yapıyor. Yanımda Firebird veri tabanı olmadığından IBDataSet'i test edemiyorum. UniQuery   TCustomDADataSet = class (TMemDataSet) -> TMemDataSet = class(TDataSet) sınıfından,
TIBDataSet = class(TIBCustomDataSet) -> TIBCustomDataSet = class(TDataSet) sınıfından türetilmiş.

TDataSet ortak Selef, ama halefleri farklı. Biri TMemDataSet diğeri TIBCustomDataset. Bu nedenle Tuğrul hocamın dediği gibi muamele ediyor olabilir.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird de Enter karakter sorunu çözümü mcuyan 2 108 01-07-2018, Saat: 14:31
Son Yorum: klavye
  Firebird'de bellek Kullanımı rmzgenius 1 93 25-06-2018, Saat: 15:34
Son Yorum: klavye
  firebird 3 hakkında sorular masteryoda 9 870 06-06-2018, Saat: 18:51
Son Yorum: canbir
  Firebird Trigger'a parametre gönderme esistem 0 193 23-05-2018, Saat: 10:55
Son Yorum: esistem
  Firebird 3 embedded versiyon autoinc alan problemi canbir 4 224 16-05-2018, Saat: 23:24
Son Yorum: canbir



Konuyu Okuyanlar: 1 Ziyaretçi