Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: ADOQuery parametre problemim(nedir bu parametre?)  (Okunma sayısı 4342 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı CoDeX

  • Delphi 1 Level 2
  • **
  • İleti: 15
  • Rep: +0/-0
  • Cinsiyet: Bay
Merhaba arkadaşlar
Delphi 7 ile MS SQL 2000 kullanıyorum. Delphide Parmetre kullanımını öğrenmek istiyorum. Nasıl birşey bu parametre nedir? Şöyle birşey yaptım.

Birbiri ile alakalı 2 tablom var.   model tablosunda marka_id yi foreing key tanımlayarak ilişkilendirmemi yaptım sorun yok.
   TBL_MARKA
--------------------
pk marka_id  fk
    marka_adi

  TBL_MODEL
--------------------
pk model_id
    model_adi
fk  marka_id

Sorunum şu Delphide ado kullanıyorum. DBLookupbox ile 1. listeden marka seçildiğinde 2. listeden seçilen markaya bağlı modeller listelenecek. Burada Sorguyu bozmamak için, parametre kullanılıyormuş. parametre nasıl yazılıyor yani nedir tam olarak kullanımına örnek arıyorum. genel olarak nasıl yazılır query protestiesin içindeki parameters özelliğine ne tanımlıcam kod olarak nasıl yazıcam ilgili nesnenin altına?

Yardımcı olursanbız çok teşekkür ederim..

Çevrimdışı barutali

  • Administrator
  • *****
  • İleti: 2.229
  • Rep: +55/-0
  • Cinsiyet: Bay
  • Falan filan ...
  • Delphi Sürümü: 2010 - XE2
Ynt: ADOQuery parametre problemim(nedir bu parametre?)
« Yanıtla #1 : 01 Şubat 2008 02:42:39 »

AdoQuery1 de Parametre belirliyoruz parametre adının Listele olduğunu varsayalım..
SQL i yazarken parametrenin başına : koyuyoruz..

ADOQUERY nin SQL i
Kod:  (Unknown Language)
  1. Select * From REHBER Where :Listele = REHBER.ADI_SOYADI


Kullanımı;

Kod:  (Unknown Language)
  1.  
  2.  adoquery1.Active:=false;
  3.  adoquery1.Parameters[0].Value:=edit1.text; // parametre [0] tanımladığımız Listele Parametresi
  4.  adoquery1.Active:=True;
  5.  

basit bir örnek parametreye...

Kolay Gelsin
İyi Çalışmalar...



Amatör Küme Programcı

Çevrimdışı Opt2000

  • Global Moderatör
  • *****
  • İleti: 263
  • Rep: +9/-1
  • Cinsiyet: Bay
Ynt: ADOQuery parametre problemim(nedir bu parametre?)
« Yanıtla #2 : 02 Şubat 2008 05:45:40 »
Selam,

barutali açıklamış, ama ben biraz daha detaylı bilgi vereyim.

Sanırım önce parametrenin ne olduğu ve ne işe yaradığını anlatmak gerekiyor.

Parametre, SQL kodunuzdaki değişkenlerin atanmasında kullanılır. Kullanımı zorunlu değildir, ama programcının işini çok kolaylaştırır. Kişisel olarak parametreyi iki sebeple kullanıyorum:,

1. SQL'deki değişkenler için
Örneğin kullanıcı bir tarih girecek ve siz de x tablosundan, tarih alanını, kullanıcının girdiği değere göre sorgulayacaksınız. Ama bu kod bir kere çalışmayacak, kullanıcı her istediğinde tarihi değiştirip sorguyu tekrar çalıştıracak. Eğer burada parametre kullanacak olursanız, sadece üç satırla işi bitiriyorsunuz:

ADOQuery.Active := false;
ADOQuery.Parameters.ParamByName('tarih').Value = Kullanıcının seçtiği tarih
ADOQuery.Active := true;

Dikkat ederseniz tekrar sorgu yazmak için uğraşmadım. Verdiğimiz örneğin basit bir SQL sorgusu üzerine olduğunu unutmayın. Yani bu örneğin sorgusu da çok kısadır, parametre ayarlayacağıma adam gibi sorguyu yazarım diyebilirsiniz. Ama bazı SQL sorgularım bir iki sayfayı geçebiliyor. Bir iki sayfayı geçen bir sorguyu kodun içinde sıkıldıkça tekrar yazamazsınız.

2. Data type problemlerine çözüm:
Neredeyse her programlama forumunda görmüşsünüzdür. Tarihlerle ilgili sorgulamalarda garanti sorun çıkar. Çünkü text formatındaki tarihin Date veya DateTime tipine dönüştürülmesinde, sunucunun bölgesel (sunucu bilgisayarın değil, sunucu veri tabanının) ayarları çok önemli. Örneğin 31.01.2008 Türkçe ayarlanmış bir sunucuda geçerli iken, İngilizce ayarlanmış bir sunucuda geçersizdir. Parametre kullandığınız zaman bu sorun da ortadan kalkar, çünkü parametre (bildiğim kadarıyla) veriyi binary olarak gönderiyor. En azında Profiler gibi araçlarda parametre bilgileri görünmüyor.

Kullanımı çok basit.

ADOQuery.Active := false;
ADOQuery.SQL.Text := 'SELECT * FROM tbKullanicilar WHERE tbKullanicilar.dtKayitTarihi > :Tarih';
ADOQuery.Parameters.ParamByName('DogumTarihi').Value = Date;
ADOQuery.Active := true;

String bir karşılaştırma yapacağınız zaman da işler kolay. Normalde kullandığınız veri tabanına göre string bilgileri tek tırnak veya çift tırnak içine almanız gerekiyor. Bu da en basit SQL kodlarının bile veri tabanına özel kılıyor. Yani ileride veri tabanını değiştirmek istediğinizde bütün SQL kodlarını yeniden elden geçirmeniz gerekiyor. Ama Parametre u sorunu da çözüyor.

ADOQuery.SQL.Text := 'SELECT * FROM tbKullanicilar WHERE tbKullanicilar.sAdi = :Adi';
ADOQuery.Parameters.ParamByName('Adi').Value = 'Bahadır';

Umarım açıklayıcı olmuştur.

Kolay gelsin,
Bahadır Alkaç

Çevrimdışı CoDeX

  • Delphi 1 Level 2
  • **
  • İleti: 15
  • Rep: +0/-0
  • Cinsiyet: Bay
Ynt: ADOQuery parametre problemim(nedir bu parametre?)
« Yanıtla #3 : 28 Şubat 2008 18:12:49 »
Hocam çok teşekkür ederim. Konuya gayet iyi ve detaylı bir açıklama getirmişsiniz..