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 hakkında serhat 24 518 2 saat önce
Son Yorum: boreas
  Yeni Başlayanlar İçin Firebird Kurulumu ve Delphi FireDAC Ayarları DelphiCanR 11 1.321 22-02-2018, Saat: 12:40
Son Yorum: Ugur
  Firebird Uzak veritabanı yedekleme masteryoda 9 1.139 26-01-2018, Saat: 17:47
Son Yorum: rmzgenius
  Firebird -arithmetic exception, numeric overflow masteryoda 11 1.269 26-01-2018, Saat: 17:39
Son Yorum: rmzgenius
  FireBird veri tabanını nereden indirebilirim? Coder 4 1.789 26-01-2018, Saat: 17:32
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi