SQL de hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

SQL de hata

Mesaj gönderen ulu coder »

Merhaba.
H Alimi tablosundan, H Turu field'ına göre, Combobox'ta yazan yazıyla, CheckBox'ın seçili olup olmamasına göre filtreleme yapıyorum.
Hiç kayıt gelmiyor. Bulamadım hatayı...

Kod: Tümünü seç

procedure TForm13.Button1Click(Sender: TObject);
var
  sorgu:string;
begin
sorgu:='Select * From ''H Alimi''';

if CheckBox1.Checked Then sorgu:=sorgu +' Where ''H Turu''=:pht';
Query1.SQL.Clear;
Query1.SQL.Add(sorgu);
if CheckBox1.Checked Then Query1.ParamByName('pht').AsString:=ComboBox1.Text;
Query1.Open;
end;
EDİT: La havle...
Satan'a göre şöyle bi şey yaptım, bu field'a göre filtreleme yaptı. H Turu'ne göre yapınca hala kayıt gelmiyor :duvar:

Kod: Tümünü seç

procedure TForm13.Button1Click(Sender: TObject);
var
  sorgu:string;
  psiz:integer;
begin
sorgu:='Select * From ''H Alimi'' ';
psiz:=Length(sorgu);

if CheckBox1.Checked Then sorgu:=sorgu +' Where ''H Turu''='+QuotedStr(ComboBox1.Text);
if CheckBox3.Checked Then begin
  if Length(sorgu)=psiz Then sorgu:=sorgu+' Where ' Else sorgu:=sorgu+' and ';
  sorgu:=sorgu+'Satan='+QuotedStr(ComboBox3.Text);
end;
Query1.SQL.Clear;
Query1.SQL.Add(sorgu);
Query1.Open;
end;
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Çözüm:
H Turu adlı alanı HTuru olarak değiştirince sorun ortadan kalktı.

Ne demişler;
VT kaybetmektense Field silmeyi tercih ederim.
Neyse ki field silmeme gerek kalmadı :roll:

EDİT:Bu çözümle günü kurtardım.
Allah'a şükürler olsun, bu tabloya bağlantı sadece 2 formda varmış, Field adını değiştirince pek sorun olmadı. Ama ya her formda olsaydı?
Bu nedenle sorumu şu şekilde değiştiriyorum;
Boşluk bulunduran Field'lar SQL cümlesine nasıl yazılır?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
çift tırnak içinde olması lazım
tabi vt nin syntaxına göre de değişebilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

if CheckBox1.Checked Then sorgu:=sorgu +' Where ''H Turu''='+QuotedStr(ComboBox1.Text);
Hocam zaten çift tırnak içinde değil mi?
kodlardaki iki tırnak tek tırnak yerine geçtiği için 4 tırnak mı koyalım yani?
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

checkbox1 seçili olmazsa "where" komutu sqle gelmez. bu nedenle hata verir. checkbox1 ve checkbox3 seçili olursa sqle 2 tane where komutu gelir kod yine hata verir.
dikkat et.
kolay gelsin.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

@nitrokonat;
1-Hata vermiyor, sadece kayıt gelmiyor.
2-Checkbox1 seçili olmadığında SQL şu oluyor; 'Select * from ''H Alimi'' ki bu da hataya neden olmaz.
3-Eğer checkbox3 seçiliyse, SQL'in ilk uzunluğunda olup olmadığına bakıyor. Eğer ilk uzunluğundaysa, where'in hiç kullanılmadığını anlıyor ve 'where' ekliyor. İlk uzunluğunda değilse daha önce 'where' yazıldığını anlıyor ve ' and ' yazıyor. Sonra da 'Satan='+QuotedStr(Combobox3.text)'le Satan şartını ekliyor. Bu da hataya neden olmaz!!!

Son ispat; H Turu alanını HTuru olarak değiştirince sorun ortadan kalktı.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

Kod: Tümünü seç

psiz:=Length(sorgu); 
olayı dikkatimden kaçmış kardeş, kusura bakma.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

nitrokonat yazdı:

Kod: Tümünü seç

psiz:=Length(sorgu); 
olayı dikkatimden kaçmış kardeş, kusura bakma.
Yok abi ya, ne kusuru!!!
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

bugün dengem yerinde değil kardeş, 10gün önce kazandığım ihalenin ürünlerinin parasını ödeyecem, dolar 1.550ye çıktı. oturduğum yerde 13.000ytl zarar ettim. aklım hep orda
ama can sağolsun, dostlar sağolsun. bu durumda bile cevap yazmamazlık etmedim. :)
Cevapla