Query1 toplamada hata alıyorum

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Query1 toplamada hata alıyorum

Mesaj gönderen zengin »

Programci arkadaslara selamlar;
Query1 toplamada hata alıyorum
bu kodlarım Query2 icerigi dolu olur ise hata veriyor bana bu konuda yardımlarını bekliyorum

Query1.sql.clear;
Query1.sql.add('select sum(toplam) from ykart.db where PLAKA>='''+edit2.text+''' and PLAKA <='''+edit2.text+'{$}''');
Query1.active:=true;
Query1.open;
label1.Caption := FormatFloat('###,###',Query1.fields[0].AsFloat);
Zengin
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Ne hatası veriyor... Gerçi syntax ınız da hiç hoşuma gitmedi de...
Temiz kod yazmıyorsunuz. Yukarda verdiğiniz kodun nerde bela çıkaracağını asla bilemezsiniz !
1. Öncelikle bu tür database işlemlerini hatta bütün işlemlerinizi try except veya try finaly bloklarına alarak kullanın.
2. Syntax sınız ilerdeki veritabanı değişikliklerine kolay adapte olacak şekilde olsun.
3. Delphinin tavsiyelerine mutlaka uyun. Help i okuyarak çalışın..
4. Editleri SQL kodlarına gömmek yerine parametrelerle çalışın..
5. Kodlarınızı yazarken programa 5 yıl sonra her şeyi unutmuş vaziyette müdahele edeceğinizi asla aklınızdan çıkarmayın.

Aşağıdaki gibi.. Bakın bakalım bir daha sorun yaşayacakmısınız ?

Kod: Tümünü seç

Try
with Query1 do begin
close;
UnPrepare;
SQL.Clear;
SQL.Add('select sum(toplam) from ykart.db where PLAKA>=:ilk and PLAKA<=:SON');
Prepare;
Params[0].AsString:=Edit1.Text;
Params[1].AsString:=Edit2.Text+'{$}';
Open;
end;
Except
   On Exception Do Raise;
End;

Label1.Caption := FormatFloat('###,###',Query1.fields[0].AsFloat);
Sevgiler....
En son sair tarafından 20 Ağu 2004 08:15 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Pardon biraz alakasız ama
Params[1].AsString:=Edit2.Text+'{$}';
deki {$} ne işe yarıyor. stringin devamı falan mı yoksa özel bi direktif mi? :?:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Bilmiyorum.. Kendisi koymuş bende ekledim.. Belki özel bir karakterdir falan diye..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Mesaj gönderen zengin »

merhaba şair kardeşim ilgilendigin icin teşekkürler

hata olayı bu şekilde oluyor Query1 deki cift tıkladıgımız zaman Add filelds ten secilen isimleri Alanda dolu olur ise şu hatayı veriyor Query1:field muskod not faunt precest stoppet diye ve senin kodunda aynı hatayı veriyor fakat Query1 fields boş olur ise kodlar düzgün calışıyor

fielt name 1 alan örnek muskod + *
2 alan plaka A 15
3alan AD A 25

not :{$} delfi yardımda acıklaması var
Zengin
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Şunu yap
Önce bütün alanları temizle fields editorden. Sonra Query1 in OBject inspectordeki SQL özelliğine gir ve aşağıdaki kodu Oraya yaz..

Kod: Tümünü seç

select sum(toplam) AS TOPLAMLAR from ykart.db
SQL i kapat. Bu işlemden Sonra fields editore gir ve fiedlları çağır. Şimdi oraya sadece TOPLAMLAR fieldının geldiğini göreceksin...

Daha sonra Aşağıdaki kodu aynen kullan:

Kod: Tümünü seç

Try 
with Query1 do begin 
close; 
UnPrepare; 
SQL.Clear; 
SQL.Add('select sum(toplam) AS TOPLAMLAR from ykart.db where PLAKA>=:ilk and PLAKA<=:SON'); 
Prepare; 
Params[0].AsString:=Edit1.Text; 
Params[1].AsString:=Edit2.Text+'{$}'; 
Open; 
end; 
Except 
   On Exception Do Raise; 
End; 

Label1.Caption := FormatFloat('###,###',Query1.fields[0].AsFloat);
Bir daha sorun almayacaksın...
Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Eğer sql i sürekli değiştiriyorsan (kod ile) field listesinin boş olması lazım. çünkü bir sql de kullandığın alan diğer sql de olmuyor. bu gibi durumlarda alanlara ulaşmak için

Kod: Tümünü seç

 query1.fieldbyname('abc').asstring
kullanabilirsin.

not:ben {$} ı sizin hangi amaçla kullandığınızı sormak istemiştim.
helpe baktım orda üç başlık çıktı.
Comment and compiler directive
Constants
Numerals
bu soruyu sadece meraktan soruyorum... :oops:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
zengin
Üye
Mesajlar: 233
Kayıt: 06 Ağu 2003 10:13

Mesaj gönderen zengin »

merhaba arkadaşlar ilgilendiginiz icin cok teşekkürler kodları ne kadarda
ugraşıp düzenlesemde olmadı ve sizleride rahatsız ettim kusura kalmayın

bana başka bir alternetif sütun toplayacak bir kod örnegi var ise yardımcı olun yok ise canınız sagolsun saygılarımla


not:aslangeri kardeşim {$} bunu merak ettin sanırım ben 5 yıl önce
ilk program calışmamda yakın veya% anlamına gelir şekli ile yapmıştım
fakat taki siz farkına varana kadar olsada olurmuş olmasada hic kimse
mükemmel degildir ufak tefek hatalarda olabiliyor fakat yinede bu siteyi
yapan öneren ve ilgilenen ve tüm üyelerinden allah razı olsun
bana her konuda faydalı oldunuz teşekkürler
Zengin
Cevapla