Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(25-08-2017, Saat: 14:24)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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
  FIREBIRD facebook GROUP daveti softdestek 8 448 17-10-2019, Saat: 10:43
Son Yorum: boreas
  Firebird Trigger'a parametre gönderme esistem 3 856 15-10-2019, Saat: 22:17
Son Yorum: Aktolgali
  Firebird ile aynı server içindeki iki ayrı database deki tablolar arasında select serkansirin001@gmail.com 6 458 03-09-2019, Saat: 01:05
Son Yorum: mcuyan
  Visual Studio Code kullanıcıları için Firebird Eklentisi rmzgenius 2 455 31-05-2019, Saat: 10:32
Son Yorum: edo
  Firebird Database Oluşturma SercanTEK 6 903 30-05-2019, Saat: 09:18
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi