Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Query - Table arasındaki farklar
#1
Merhaba çok kullanıcılı program örneklerini incelerken  Query ve Table kullanımlarının ikisininde benzer becerileri olduğunu ama genelde query kullanıldığını gördüm. Gördüğüm örneklere bakarak , acaba bizlermi yanlış kullanıyoruz diye düşünmeden edemedim. Query ile kayıt ekleme, silme sorgulama yapabiliyorsak..
1)  Table nezaman kullanacağız ? Veya tam tersi ? 
2) Üçüncü bir şık ise Acaba kayıt ekleme silmeleri table ile yapıp sadece sorgularda mı query kullanmalıyız doğru olan bu mu ?

Birde kayıt ekleme yöntemlerine ufak bir örnek verirmisiniz. Bazı örnekler insert ile yaptıktan sonra commit yapmış. bazısı yapmamış updatesql bileşeni kullanmış. Commit edecekmiyiz etmicekmiyiz Big Grin

Bildiklerinizi paylaştığınız için şimdiden teşekkürler..
Cevapla
#2
Benimde cevabını merakla beklediğim bir soru

kendi kullandığım  tabloya kayıt ekleme kodunu paylaşıyorum.

Tüm bilgileri delphican dan öğrendim.


 try // sevk dosyasına ana kayıtları için konuldu hata varsa uyar çık yoksa ana bilgileri işle
    data_form.sevk_data_yaz('INSERT INTO SEVK (SEVK_TRH, SEVK_SAAT, SEVK_KARGO, SEVK_KARGO_TEL, '+
                           'SEVK_KARGO_CEP, SEVK_PLAKA, SEVK_ACK_1, SEVK_ACK_2, SEVK_ACK_3, SEVK_BAYI, '+
                           'SEVK_GIDEN_SAG, SEVK_GIDEN_SOL, SEVK_FIS_NO, SEVK_BELGE_NO) ' +
                           'VALUES ('+
                           QuotedStr(datetostr(Date_tarih.Date)) + ', '+
                           QuotedStr(timetostr(date_saat.time)) + ', '+
                           QuotedStr(cmb_kargo.Text) + ', ' + QuotedStr(cmb_kargo_tel.Text) + ', '+
                           QuotedStr(cmb_kargo_cep.Text) + ', ' + QuotedStr(edit_plaka.Text) + ', '+
                           QuotedStr(edit_aciklama_1.Text) + ', ' + QuotedStr(edit_aciklama_2.Text) + ', '+
                           QuotedStr(edit_aciklama_3.Text) + ', ' + QuotedStr(cmb_bayi.Text) + ', '+
                           QuotedStr(sag_kapi.Text) + ', ' + QuotedStr(sol_kapi.Text) + ', '+
                           QuotedStr(edit_fis_no.Text) + ', ' + QuotedStr(edt_belge_no.Text)
                                  + ')');
 except
   on E: Exception do
   begin
     mesaj1 := 'Sevk işlemleri kaydedilemedi. Veritabanı bağlantısı başarısız: ' + E.Message;
     Application.MessageBox(PWideChar(mesaj1), 'Hata', MB_OK + MB_ICONERROR);
     exit; // hareketlere geçmeden çık
   end;
 end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#3
Merhaba,
Table genellikle sabit dataset'ler için kullanılıyor. Örneğin Üniversite, Fakülte, Bölüm vb. 
Table daha çok LookUp, Locate gibi kayıt üzerinde gezinme işlemlerinde veya sabit listelerde kullanılıyor.
Query, isminden de anlaşılacağı üzere dinamik sorgular oluşturmak için kullanılıyor. Dataset sabit değildir, uygulamada kullanıcı davranışına göre dataset üzerindeki veri de değişir. 
Aynı zamanda kayıt silme (delete), kayıt güncelleme (update), kayıt ekleme (insert) ve bir SQL scriptin hedef veri tabanı üzerinde çalıştırılması (Alter, Create vb.) gibi daha bir çok SQL işlemlerinde kullanılmaktadır. 

Query kullanımında dikkat etmeniz gereken en önemli husus; parametrik SQL oluşturarak işlem yapmaktır. 
Birçok SQL Injection işlemi parametrik olmayan SQL ifadelerine yerleşerek, ciddi zarar verebiliyorlar.

Dinamik bir veri trafiğinde, herhangi bir commit işlemine gerek kalmadan, Execute metodu ile geçerli işi commit etmiş olursunuz.
Eş zamansız çalışan sistemlerde ise  kullanılan bileşen özelliklerine bağlı olarak commit işlemi ihtiyaç doğrultusunda belli periyotlarla gerçekleştirilir.
Cevapla
#4
Teşekkürler üstadım nefis bir açıklama olmuş.
Cevapla
#5
Table ya da query olması önemli değil. Önemli olan veritabanından programa gereksiz veri trafiği oluşturuyor musunuz?
Table nesnesi daha az esnek olduğu için genelde tablonun tamamını programa çekme eğilimindedir ve bu pek istenmeyen bir durumdur. Query nesnesine de tüm kayıtları çekecek bir sql yazıp çalıştırdığınızda table nesnesinden bir farkı kalmaz.

Table'ın da avantajı insert, update , delete işlemlerinde kolaylık sağlaması. Query nesnesinde bu biraz zor olmaktadır.

Bazı bağlantı kütüphaneleri table ve query nesnelerinin bu iyi özelliklerini birleştirip dataset adında bir nesneye sahiptirler. Bu nesneler table gibi davranırlar ama arka planda query gibi hareket ederler. Gerekli olan SELECT , INSERT , UPDATE ve DELETE sql cümlelerini siz yazarsınız. Bu yazdıklarınıza göre işlemleri yaparlar. Ben genelde bu tür nesneler kullanıyorum.
WWW
Cevapla
#6
Firebird için firedac kullandığımızda bahsetmiş olduğunuz dataset bileşeninden sanırım mahrum kalıyoruz. Bağlantı bileşenleri ve seçenekleri biraz fazla olunca ve ben gibi bu bileşenlere acemiyseniz, ortaya tam bir anlam karmaşası çıkıyor haliyle konuyu anlamak zorlaşıyor. Mesela örneklere bakarak bir deneme yapmak öğrenmek istedim( Firedac için yazı , video bulmak çok zor olasa da.. ). Formuma FDConnection, FDTransaction, FDQuery ve datasurce ekleyip bir kayıt eklemek istedim. Nasıl yapılır diye baktığımda, biri butona ekle komutu yazarken bir diğeri farklı bileşene , bir başkası ilgili veritabanına yazıp komut ile tetiklemiş. Tabiri caiz ise , ışık görmüş tavşan gibi kaldım ortada Big Grin Nereye ne yazmak doğru nasıl kullanılır diye bakayım derken saatler geçmiş. Şimdi ise Firedac kullanmaktan vazgeçip interbase bileşenlerine bakıyorum. En azından örnek gösterimler bulabiliyorum. Bu bileşen karşası içinde doğru başlangıç yapıp doğruyu öğrenmek sanırım epey zor olacak.. Hadi hayırlısı Smile)
Cevapla
#7
(28-09-2018, Saat: 22:48)Lord_Ares Adlı Kullanıcıdan Alıntı: Firebird için firedac kullandığımızda bahsetmiş olduğunuz dataset bileşeninden sanırım mahrum kalıyoruz. Bağlantı bileşenleri ve seçenekleri biraz fazla olunca ve ben gibi bu bileşenlere acemiyseniz, ortaya tam bir anlam karmaşası çıkıyor haliyle konuyu anlamak zorlaşıyor.  Mesela örneklere bakarak bir deneme yapmak öğrenmek istedim( Firedac için yazı , video  bulmak çok zor olasa da..  ).  Formuma FDConnection, FDTransaction, FDQuery ve datasurce ekleyip bir kayıt eklemek istedim. Nasıl yapılır diye baktığımda, biri butona ekle komutu yazarken bir diğeri farklı bileşene , bir başkası ilgili veritabanına yazıp komut ile tetiklemiş. Tabiri caiz ise , ışık görmüş tavşan gibi kaldım ortada Big Grin Nereye ne yazmak doğru nasıl kullanılır diye bakayım derken saatler geçmiş. Şimdi ise Firedac kullanmaktan vazgeçip interbase bileşenlerine bakıyorum. En azından örnek gösterimler bulabiliyorum. Bu bileşen karşası içinde doğru başlangıç yapıp doğruyu öğrenmek sanırım epey zor olacak.. Hadi hayırlısı Smile)

Firedac veya unidacla devam etmenizi öneririm daha sonra farklı bir rdbms'e geçmek istediğinizde veya aynı anda farklı bir rdbms kullanmak istediğinizde daha az emek harcarsınız.

“Do. Or do not. There is no try.”
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  İBExpert Backup ile Exract metadata arası farklar baloglurecep 6 3.576 24-06-2020, Saat: 11:53
Son Yorum: rmzgenius
  Alter Table Add Primary key(ID) çalıştıramadım 41linea41 5 4.458 25-06-2019, Saat: 20:57
Son Yorum: 41linea41
  Firebird External Table Storage anemos 4 4.193 05-10-2018, Saat: 22:04
Son Yorum: anemos
  table scan yuzdesini almak klavye 0 1.577 12-09-2018, Saat: 12:52
Son Yorum: klavye
Question Query Plan Index Sorunu ozcanm 4 3.258 04-06-2018, Saat: 09:12
Son Yorum: ozcanm



Konuyu Okuyanlar: 1 Ziyaretçi