bir sql cümlesi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

bir sql cümlesi

Mesaj gönderen gercek_16 »

merhabalar benim şöyle bir sql cümlem var

Kod: Tümünü seç

if edit1.text<>'' then sql:=sql+'and mekan = '''+edit1.text +'''';
bu cümle çalışıyor editten değeri alarak, ben bunun yerine direk programdan değer göndermek istiyorum, değeri string olarak atmak istiyorum mesela

Kod: Tümünü seç

if edit1.text<>'' then sql:=sql+'and mekan = '''+AHMET +'''';
olacak şekide direk ahmetleri süzsün istiyorum bu kodu nasıl yazmam gerekir. teşekkürler
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ahmet dediğin sabit bir string değer ise şu şekilde yazman lazım;

Kod: Tümünü seç

 if edit1.text <> '' then sql := sql + ' and mekan = ''AHMET'''; 
Bir de sql stringi birleştirirken başında ve sonunda boşluklar bırakmalısın :idea: mesela and bir önceki komuta bitişmiş durumda. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

hocam yardımınız için teşekkür ederim verdiğiniz kod doğru çalışıyor ama şöyle bir şey var;

Kod: Tümünü seç

 if a=1  then   sql:= sql+ ' and emlak=''satılık dükkan''';
 if b=1  then  sql:= sql+ ' and emlak=''kiralık ev''';
ben bu şekilde kriteleri arttıtmak istiyorum, tek satır yazınca mesela satılık dükkan ın olduğu satırı yazınca satılık dükkanları görüntülüyor, buna altındaki kiralık ev satırını ekleyince hiç birini görüntülemiyor. bu konuda ne yapabilirim. teşekürler.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

anladığım kadari ile en son kodunda

Kod: Tümünü seç

if a=1  then   sql:= sql+ ' and emlak=''satılık dükkan'''; 
 if b=1  then  sql:= sql+ ' and emlak=''kiralık ev''';
yani bu kod hem satılık dükkanları hemde kiralık ev leri arıyor onun içinde geri boş sonuş deniyor

bo kodun en başına

Kod: Tümünü seç

sql:='';
if a=1  then   sql:= sql+ ' and emlak=''satılık dükkan'''; 
 if b=1  then  sql:= sql+ ' and emlak=''kiralık ev''';
yaparsan çalışacaktır bence

yani aynı alanda arama yapıyorsun dikkat et ikiside emlak yazıyor
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

[/code] sql:='';

Kod: Tümünü seç

 yazınca invalid use of keyword hatası veriyor, çalışıyor ama yine boş sonuç dönüyor. 

ben şunu yazmıştım onun yerine 
sql:='select * from emlak where 1=1 ';

Kod: Tümünü seç


evet yapmak istediğim aynı alanda aratmak, bu mümkün değilmi? 
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

son anda aklıma geldi

ikinci and i or olarak değiştir.

Kod: Tümünü seç

if a=1  then   sql:= sql+ ' and emlak=''satılık dükkan'''; 
 if b=1  then  sql:= sql+ ' or emlak=''kiralık ev''';
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sorguyu tam yazmazsan müneccim gibi tahminlerde bulunmak zorunda kalıyoruz :? Yine tahminen söylüyorum çünkü sorgu cümleciğinin bütünü ortada yok; and sonra emlak= kısmını tümden parantez içine alırsan problem olmaz.. fakat sonundaki parantezi koymayı unutma.. yani bu işlerin herhangi biri oluşunca parantez açılmış demektir ve de kapanacaktır.. hepsini de OR la bağla :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

evet hocam çok fazla kafa karıştırmamak için hepsini yazmak istemedim haklısınız böyle anlamak daha zor oluyor, evet kodum şu anda çalışıyor ama başına extra bir satır eklemnek zorunda kaldım (x olan satır)
kodum şöyle

Kod: Tümünü seç

a:=1;
query1.sql.Clear;
sql:='select * from emlak where 1=1 ';

 if a=1  then   sql:= sql+ ' and emlak=(''x'')';
 if form44.CheckBox2.Checked  then   sql:= sql+ ' or emlak=(''kiralık ev'')';
 if  form44.CheckBox2.Checked  then  sql:= sql+ ' or emlak=(''kiralık dükkan'')';
 if  form44.CheckBox3.Checked then  sql:= sql+ ' or emlak=(''satılık ev'')'; 
hepsi or olunca olmuyor çünkü. bu şekilde bir problemim yok ama ilginçtir ben checkboxlarla başka bir formdan değer gönderiyorum bunları almıyor, (buda delphi konusuna giriyor artık, table ve query i bu şekilde kullanmıştım) . Neyse çok teşekkürler problemim bu şekilde çözülmüş oldu.
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

hocam bu sorguya birde tarih eklemek istiyorum saatlerdir uğraşıyorum ama bir türlü başarmadım. aynı filitreleme de 2 adet datetimepicker1 den alınan tarihle sorgulama yaptırtmak istiyorum :(

Kod: Tümünü seç


sql:='select * from emlak where 1=1 '; 

 if a=1  then   sql:= sql+ ' and emlak=(''x'')'; 
 if form44.CheckBox2.Checked  then   sql:= sql+ ' or emlak=(''kiralık ev'')'; 
 if  form44.CheckBox2.Checked  then  sql:= sql+ ' or emlak=(''kiralık dükkan'')'; 
 if  form44.CheckBox3.Checked then  sql:= sql+ ' or emlak=(''satılık ev'')'; 

Kod: Tümünü seç

 sql:=sql+ 'and tarih>='+#39+datetostr(datetimepicker1.date)+#39; tarih<='+#39+datetostr(datetimepicker1.date)+#39; 
gibi bir sorgu eklemek istiyorum. teşekkürler..
Kullanıcı avatarı
ozkanagiral
Üye
Mesajlar: 79
Kayıt: 17 Oca 2004 06:23
Konum: istanbul
İletişim:

Mesaj gönderen ozkanagiral »

Kod: Tümünü seç

Var
 BugunTarihSaat: String;
begin
//Bugün gelenleri bul
//  BugunTarihSaat:= DateToStr(Now); senin yazman gereken alttaki
  BugunTarihSaat:= DateToStr(DateTimePicker1.DateTime);
  DMOD1.IBDS_KISI.Close;
  DMOD1.IBDS_KISI.SelectSQL.Clear;
  DMOD1.IBDS_KISI.SelectSQL.Add('select * from kisi where kisi.kayittarihi=');
  DMOD1.IBDS_KISI.SelectSQL.Add(' '' '+BugunTarihSaat+' '' ');
  DMOD1.IBDS_KISI.Prepare;
  DMOD1.IBDS_KISI.Open;
  SpBtnAramaKipindenCik.Visible:=True;
//.....
Buradaki SQL kodunu kendine göre ayarla çalışan bir koddur.
Kolay Gelsin
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sanırım bir yanlış anlama oldu parantezleri öyle açıp kapayacaksın demek istememiştim :wink:

Olayı anladığım şekliyle herhangi bir TARIH teki herhangi bir kiralık emtia nın olup olmadığının sorgulanması.

Kod: Tümünü seç

Query1.sql.Clear;
sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' ';
 if form44.CheckBox2.Checked  then   sql:= sql+ ' or emlak=''kiralık ev'' ';
 if form44.CheckBox2.Checked  then  sql:= sql+ ' or emlak=''kiralık dükkan'' ';
 if form44.CheckBox3.Checked then  sql:= sql+ ' or emlak=''satılık ev'' ';

 if form44.CheckBox2.Checked  or form44.CheckBox2.Checked  or form44.CheckBox3.Checked then  sql:= sql+ ' )'; 
Query1.ParamByName('TARIH1).AsDateTime := Tarih1;
Query1.ParamByName('TARIH2).AsDateTime := Tarih2;
Burada bahsettiğim hepsini ilgilendiren bir veya iki tarih arasında diyeceksen bunların öncesinde yani where den hemen sonra tarih kontrolunu yapmalısın. Daha sonra da parantez açıp diğer if .. lerdeki emlak='...' kısmını eklemelisin. En sonunda da bu şartların herhangi birinin sağlanması durumunda açtığın parantezi kapatmalısın. :TARIH1 ve :TARIH2 parametre olarak verilecek :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
gercek_16
Üye
Mesajlar: 108
Kayıt: 19 Haz 2005 02:42
Konum: mersin

Mesaj gönderen gercek_16 »

hocam kodu bu hale getirdim ama çalıştıramadım sql bilgim çok az tırnaklarda yada atamalarda hata yapıyor olabilirim. evet formda kullanıcı istediği tarihler arasındaki istediği checkboxları işaretleyerek rapor alacak.

Kod: Tümünü seç


var
  sql:string;
 tarih1,tarih2:string;
begin
  tarih1:=datetostr(DateTimePicker1.date);
  tarih2:=datetostr(DateTimePicker2.date);
  form47.Query1.ParamByName(tarih1); 
  form47.Query1.ParamByName(tarih2);
  sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' '; 
// hatayı bu satırda alıyorum,[Error] SATLNKRLANEMLRAP.pas(77): Unterminated string[Error] SATLNKRLANEMLRAP.pas(79): Missing operator or semicolon[Error] SATLNKRLANEMLRAP.pas(79): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter' tarihleri dateye çeviriyorum yine hata alıyorum.  :( 

  if form46.CheckBox1.Checked  then   sql:= sql+ ' or durum=''kiralandı ev''';
  if  form46.CheckBox2.Checked  then  sql:= sql+ ' or durum=''kiralandı dükkan''';
  if  form46.CheckBox3.Checked then  sql:= sql+ ' or durum=''satıldı ev''';
  if form46.CheckBox1.Checked  or form46.CheckBox2.Checked  or    form46.CheckBox3.Checked then  sql:= sql+ ' )';
 form47.query1.sql.add(sql);
  form47.query1.open;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

 sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' ' '; 
burada tırnakların biri eksik kalmış. string içindeki tırnaklar hep çift (iki tek) tırnak olarak vermek gerekiyor. :idea: diğer hatalarda ona bağlı olarak geliyor olabilir..
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bu bileşeni kullanmak isteyebilirsin.

viewtopic.php?t=8668
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Pardon burada tırnak yok sadece açılan parantez var :cry:

Kod: Tümünü seç

 sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and ( ';
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla