Database Sorusu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
quasi
Üye
Mesajlar: 34
Kayıt: 07 Tem 2003 06:32
Konum: Denizli
İletişim:

Database Sorusu

Mesaj gönderen quasi »

Herkese merhaba..
Delphi 3.0 kullanıyorum. Sorum şu: Databasede kaydı bulunan verinin bir daha kayıt edilmeye kalkılırsa nasıl uyarı verebilirim. Birde güzel bir printer componenti tavsiye edebilirmisiniz? Kayıtlarımı liste şeklinde yazdırabileceğim. ( iht.db ) :shock:
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Bunun icin benim uyguladigim minimum maliyetli yontem su. Oncelikle kullandiginiz tablolarda tekrar etmesini istemediginiz alanlar icin unique indexler tanimlarsiniz.

Sonra proje icinde her yerden uloasabileceginiz bir yerde asagidaki gibi bir fonksiyon yazarsiniz.

Kod: Tümünü seç

procedure POST_ERROR(VAR_MESSAGE : string);
begin
 if POS('is not unique', VAR_MESSAGE)>0 then
    MessageDlg('Bu kayit daha once kaydedilmis.',mtError, [mbOK],0)
  else if POS('invalid value for column', VAR_MESSAGE)>0 then
    MessageDlg(VAR_MESSAGE,mtError, [mbOK],0);
end;
Sonra da butun table componentlerinizin onposterror eventine

Kod: Tümünü seç

  POST_ERROR(E.message);
  Abort;
seklinde bir kod yazarsaniz. Bir tabloyyu post ederken olusabilecek her turlu hatayi ayiklayarak anlamli mesajlar haline getireceginiz birt yapi olur.

POST_ERROR fonksiyonunu yazarken gelen mesajdaki BDE veya Database tarafindan gelen ilave kelimeleri kirparsiniz. Ayrica bos gecilemeyecek bir alani bos gectiginiz icin veritabanindan gelen bir mesaji da burada else ile devam ederek anlamli mesajlara donusturebilirsiniz. Kendi kullandigimiz kodda bunlari yapiyoruz fakat karisik olmasin diye sade bir ornek yazdim. Ornekte ayni kaydi kaydetmeye calistignizda veritabani tarafindan 'is not unique' seklinde bir mesaj geldigini varsaydim. Siz gelen mesaji gorerek burtayi duzenlemelisiniz tabi ki.

Bu yapinin aynisini EDIT_ERROR, DELETE_ERROR seklinde 2 fonksiyonla birlikte tamamlayarak veritabani ile ilgili olusabilecek butun hatalari bu 3 fonksiyon uzerinden anlamli mesajlara donusturebilirsiniz.


Diger bir yol ise kullandiginiz formlari baska formalrdan inherit ederek kullaniyorsaniz ya da kullanmiyorsaniz bile. icine TAppEvents componenti koyacaginiz bir Formu Ornegin FRM_ANA_FORM seklinde kaydedip. Bu formu projenize ekledikten sonra. Butun formlarinizin en tepesinde uses'in altindaki

Kod: Tümünü seç


type
  TFRM_PERSONEL = class(TForm)



seklindeki bolumu

Kod: Tümünü seç


type
  TFRM_PERSONEL = class(TFRM_ANA_FORM)



sekline donustururseniz butun formlari FRM_ANA_FORM 'dan inherit etmis olursunuz. Sonra da FRM_ANA_FORM'daki TAppEvents'in OnException eventinde o formlarda olusan her turlu hata ayiklamayi yapabilirsiniz. O Event icinde E.Message seklinde gelen hata mesajina ulasip istediginiz gibi ayiklayip kendi mesajinizi verebilirsiniz.


Epey uzun oldu. Umarim kafa karistirmamisimdir.


Rapor aracina gelince. ReportBuilder iyi bir tavsiye olabilir.

Kolay gelsin...
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

Fahrettin Bey ve diğer arkadaşlar,
Bu yazılan hata denetimi mantığı hala geçerlimi, yoksa son 1 yıldır daha basit ve belki de daha kullanışlı bir yöntem geliştirebildinizmi?
Bir programda "hata kontrolü" olaylarını en küçük birimden, büyüğe doğru ana hatları ile nasıl kullanırsak kontrolü elimize almış oluruz? Uygulamalarda en çok kullanılan, standart kontroller nelerdir anlamında......
Miasl olarak,
1) Database' e bağlantı sırasındaki kontrol(try...finally bloğu veya başka kontroller...)
2) Form crete olaylarındaki hatalar ((try...finally bloğu veya başka...)
3) SQL ifadelerinden dönen hatalarda, hata kontrolünün kullanım şekli(try...finally bloğu veya başka...)
4) Type Uyuşmazlığı gibi durumlarda ki kontroller....
5)...
Yani kısaca bir kod yazarken veya nesne kullanırken , hata olabileceğinide göz önüne alarak nasıl bir kontrol içinde kullanmamız uygun olur?(try...finally bloğu veya başka...)

Hata yönetimi konusu gerçekten önemli ve bu konuda mümkünse makale tarzı geniş açıklamalı bir bilgi varmı acaba?
Belkide bazı database hatalarını o tarafamı taşırsak iyi veya kolay olur?

Umarım kalabalık olmadı, şimdiden tüm arkadaşlardan Allah Razı olsun ve çok teşekkür ederim...

Admin bey, lütfen hata çıktığında sor deme(şaka şaka).... :wink:
Delphi konusunda daha çok database ile ilgileniyorum...
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

Sn. Admin,
Bu yazılanlar sanırım yanlış kısımda, yeni fark ettim ama başlangıcı bura olunca ...Mümkünse aslında Programlama' y taşımakta fayda olabilir....
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

Mesaj gönderen safak »

Veri tabanları unique olarak bildirilmiş alanlarda kayıt tekraraına izin vermezler. Geri dönen hata kodunu izleyebilirsiniz.

İsterseniz kayıtı göndermeden önce bu kayıdın tabloda olup olmadığını kontrol eden bie sorgu yazarsınız. Bunu cevabına göre kaydı gönderirsiniz. Bu durumda kilitleme teknikleri kullanmak lazım. Yoksa aynı anda srma gerçekleştinde birden çok kullanıcıya kayıt yok gözükür ve ikisi birden eklerler.
Cevapla