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ı:
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ı:
(25-08-2017, Saat: 14:24)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
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ı: anladı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ı:
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 :
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
INSERT INTO yetkiler
 (id, yetki, yetki_kodu)
VALUES
 (:id, :yetki, :yetki_kodu)
UPDATE yetkiler
SET
 id = :id, yetki = :yetki, yetki_kodu = :yetki_kodu
WHERE
 id = :Old_id

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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  pardusda dbeaver ıle fırebırd kullanımı hakkında sadikacar60 8 642 29-02-2024, Saat: 17:50
Son Yorum: Hayati
  Firebird Sound_ex Kodu. COMMANDX 1 310 28-01-2024, Saat: 01:56
Son Yorum: maydin60
  Firebird ile FIFO Hesaplama Nasıl yapılır? klavye 0 367 17-08-2023, Saat: 12:33
Son Yorum: klavye
  IBExpert ile Firebird Veri Kurtarma DelphiCanR 6 7.533 19-07-2023, Saat: 14:42
Son Yorum: baloglurecep
  Firebird Bozuk Dosya Hk. dark12side 1 399 07-06-2023, Saat: 21:53
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi