SQL Sorgulama !!
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SQL Sorgulama !!
Arkadaşlar SQL d bir sorgu yaptım fakat iki tarih arası DBGrid1 e rapor aldığımda Genel Toplam satırını toplatıp Label3 e aktarmak istiyorum yardım edebilirmsiniz?
SQL String e yazıyorum ;
SELECT * FROM ROKAYIT
WHERE ROMONTAJTAR >=:ROFILKTAR AND ROMONTAJTAR<=:ROFSONTAR
Button1 e de ;
procedure TForm28.Button1Click(Sender: TObject);
Begin
Query1.close;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
end;
yazıyorum
ROGENELTOPL alanını toplatıp Label3 e nasıl aktarabilirim?
SQL String e yazıyorum ;
SELECT * FROM ROKAYIT
WHERE ROMONTAJTAR >=:ROFILKTAR AND ROMONTAJTAR<=:ROFSONTAR
Button1 e de ;
procedure TForm28.Button1Click(Sender: TObject);
Begin
Query1.close;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
end;
yazıyorum
ROGENELTOPL alanını toplatıp Label3 e nasıl aktarabilirim?
Şu kodu bir denermisin.Sanırım aql kodlarında bir hata yoksa ve sonuç döndürüyorsa bu kod çalışır.Çalışmazsa yine bakarız.Kolay gelsin.
Yanlız Query1 in içine tüm fieldsleri field editörden dahil etmediysen
yerine şeklinde kullanmalısın..
Kod: Tümünü seç
procedure TForm28.Button1Click(Sender: TObject);
var Toplam:Double;
begin
Toplam:=0;
//===================================================
Query1.close;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
//===================================================
Query1.DisableControls;
Query1.First;
while (not (Query1.Eof)) do
begin
Toplam:=Toplam+Query1ROGENELTOPL.value;
end;
Query1.EnableControls;
Label3.caption:=FloatToStr(Toplam);
end;
Kod: Tümünü seç
Query1ROGENELTOPL.value;
Kod: Tümünü seç
Query1.FieldByName('ROGENELTOPL').value;
Eğer toplam işlemi yapıyorsan SUM fonksiyonunu kullanmalısın...
Kod: Tümünü seç
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.ADD('SELECT SUM(ALAN) FROM TABLO');
Query1.SQL.ADD(WHERE TARIH BETWEEN'''+DateToStr(DateTimePicker1.Date)+'''AND'''+DateToStr(DateTimePicker2.Date)+'''');
Query1.Open;
Label3.Caption := IntToStr(Query1.Fields[0].Asinteger);
Bu şekilde liste alıyor ama toplam almıyor şu hatayı veriyor ;
'Invalid Variant type Conversion'
procedure TForm28.Button1Click(Sender: TObject);
var Toplam:Double;
Begin
Toplam:=0;
Query1.close;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
Query1.DisableControls;
Query1.First;
while (not (Query1.Eof)) do
begin
Toplam:=Toplam+Query1.FieldByName('ROGENELTOPL').value;
end;
Query1.EnableControls;
Label3.caption:=FloatToStr(Toplam);
end;
Bu satırı ;
Toplam:=Toplam+Query1ROGENELTOPL.value;
kullandığım zaman döngüde takılıyor ve kilitleniyor Run dan Resetlemek
zorunda kalıyorum.
'Invalid Variant type Conversion'
procedure TForm28.Button1Click(Sender: TObject);
var Toplam:Double;
Begin
Toplam:=0;
Query1.close;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
Query1.DisableControls;
Query1.First;
while (not (Query1.Eof)) do
begin
Toplam:=Toplam+Query1.FieldByName('ROGENELTOPL').value;
end;
Query1.EnableControls;
Label3.caption:=FloatToStr(Toplam);
end;
Bu satırı ;
Toplam:=Toplam+Query1ROGENELTOPL.value;
kullandığım zaman döngüde takılıyor ve kilitleniyor Run dan Resetlemek
zorunda kalıyorum.
Hata mesajı tip dönüşümünde hata oluştuğunu söylüyor.
Toplam değişkeni ile senin databasede tuttuğun değerlerini toplamak istediğn alanların fieldi birbirini tutmuyor.Ben doğal olarak senin o alanının tipinin ne olduğunu bilemediğimden sen kendine göre değiştirirsin diye double tanımladım.Veritabanındaki ROGENELTOPL alanının tipi ne ise Toplam değişkeninide o tipte tanımla.Mesela Currency ise
Var Toplam:Currency; gibi.
o zaman çalışacaktır.Kolay gelsin.
Toplam değişkeni ile senin databasede tuttuğun değerlerini toplamak istediğn alanların fieldi birbirini tutmuyor.Ben doğal olarak senin o alanının tipinin ne olduğunu bilemediğimden sen kendine göre değiştirirsin diye double tanımladım.Veritabanındaki ROGENELTOPL alanının tipi ne ise Toplam değişkeninide o tipte tanımla.Mesela Currency ise
Var Toplam:Currency; gibi.
o zaman çalışacaktır.Kolay gelsin.
Siz veritabanınızın ne olduğunu ve tablo yapınızın DDL (SQL Kodunu) yazarsanız daha güzel olur çünkü sizin toplama yapmak istediğiniz alanın veritabanı tarafında hangi tipde tanımladığınızı bilmiyoruz.
Bu hata tip dönüşümlerinde oluşan istisna sebebi ile size gösterilir. ve burada aklıma gelen şey ise toplamını almak istediğiniz alanın string tipte olmasıdır...
Kod: Tümünü seç
'Invalid Variant type Conversion'
İyide ozcank kardeşim sen hangi veritabanını kullanıyorsun? (interbase, firebird, access, mysql, mssql)
Normal şartlarda bu kodun çalıştığı test edilmiştir...
Normal şartlarda bu kodun çalıştığı test edilmiştir...
Kod: Tümünü seç
Alanımız (KALAN) Veritabanı tarafında Double Precision olarak tanımlanmıştır.
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT SUM(KALAN)FROM CARIBORC WHERE ISLEM_TARIHI BETWEEN'''+Tarih1.Text+'''AND'''+Tarih2.Text+'''');
Query1.Open;
assoft kardeşim ben db kullanıyorum ve şu şekildede tanımlama yaptım;
Button1 e ;
Query1.Close;
Query1.SQL.Clear;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
bunları yazdım.
SQL Strings Kısmınada;
SELECT * FROM ROKAYIT
WHERE ROMONTAJTAR >=:ROFILKTAR AND ROMONTAJTAR<=:ROFSONTAR AND
bunlar yazılı ve bu şekilde çalışıyor bu kısıma SUM da eklemek istiyorum alanım ROGENELTOPL bu alanı toplatıp Label3 e yazdırmak istiyorum hepsi bu kadar.
Button1 e ;
Query1.Close;
Query1.SQL.Clear;
Query1.Params[0].AsDateTime:=DateTimePicker1.DateTime;
Query1.Params[1].AsDateTime:=DateTimePicker2.DateTime;
Query1.Open;
Query1.refresh;
bunları yazdım.
SQL Strings Kısmınada;
SELECT * FROM ROKAYIT
WHERE ROMONTAJTAR >=:ROFILKTAR AND ROMONTAJTAR<=:ROFSONTAR AND
bunlar yazılı ve bu şekilde çalışıyor bu kısıma SUM da eklemek istiyorum alanım ROGENELTOPL bu alanı toplatıp Label3 e yazdırmak istiyorum hepsi bu kadar.
List index out of bounds (0) hatası alıyorum arkadaşlar ne yapabilirim?
SQL Strings de ;
SELECT ROMUSKODU,ROMUSADI,ROMUSSOY,RO5MICRON,RO5ADET,RO5FIYATI,RO5TUTAR,
ROILKKARBON,ROILKADET,ROILKFIYATI,ROILKTUTAR,RO1MICRON,RO1ADET,
RO1FIYATI,RO1TUTAR,ROMEMBRAN,ROMEMADET,ROMEMFIYATI,ROMEMTUTAR,
ROSONKARBON,ROSONADET,ROSONFIYATI,ROSONTUTAR,ROGENELTOPL,
ROSERVELADSOY,(SELECT SUM(ROGENELTOPL) FROM ROKAYIT
WHERE ROMONTAJTAR BETWEEN :RO1TARIHI AND :RO2TARIHI) AS ROGENELT
FROM ROKAYIT
WHERE ROMONTAJTAR BETWEEN :RO1TARIHI AND :RO2TARIHI
bunları yazıyorum ve Button1 de ise ;
procedure TForm28.Button1Click(Sender: TObject);
Begin
Query1.Close;
Query1.SQL.Clear;
Query1.Params[0].AsDate:=DateTimePicker1.DateTime;
Query1.Params[1].AsDate:=DateTimePicker2.DateTime;
Query1.Open;
Label3.Caption:=FormatCurr('##,###,###,###',StrToFloat(Query1ROGENELT.AsString));
Query1.refresh;
end;
Yardım ederseniz çok sevinirim.
SQL Strings de ;
SELECT ROMUSKODU,ROMUSADI,ROMUSSOY,RO5MICRON,RO5ADET,RO5FIYATI,RO5TUTAR,
ROILKKARBON,ROILKADET,ROILKFIYATI,ROILKTUTAR,RO1MICRON,RO1ADET,
RO1FIYATI,RO1TUTAR,ROMEMBRAN,ROMEMADET,ROMEMFIYATI,ROMEMTUTAR,
ROSONKARBON,ROSONADET,ROSONFIYATI,ROSONTUTAR,ROGENELTOPL,
ROSERVELADSOY,(SELECT SUM(ROGENELTOPL) FROM ROKAYIT
WHERE ROMONTAJTAR BETWEEN :RO1TARIHI AND :RO2TARIHI) AS ROGENELT
FROM ROKAYIT
WHERE ROMONTAJTAR BETWEEN :RO1TARIHI AND :RO2TARIHI
bunları yazıyorum ve Button1 de ise ;
procedure TForm28.Button1Click(Sender: TObject);
Begin
Query1.Close;
Query1.SQL.Clear;
Query1.Params[0].AsDate:=DateTimePicker1.DateTime;
Query1.Params[1].AsDate:=DateTimePicker2.DateTime;
Query1.Open;
Label3.Caption:=FormatCurr('##,###,###,###',StrToFloat(Query1ROGENELT.AsString));
Query1.refresh;
end;
Yardım ederseniz çok sevinirim.
GELIRQ.close;
GELIRQ.sql.clear;
GELIRQ.SQL.Add('SELECT SUM(Miktar)FROM kasa_gelir WHERE tarih BETWEEN'''+Tarih1.Text+'''AND'''+Tarih2.Text+'''');
GELIRQ.open;
Yukardaki kodu yazıyorum şöyle bi mesaj çıkıyor.
gelirg:field miktar not found
ama query de böyle bi alanım var. Miktar alanının toplamını alcam ben..
kolay gelsin...
GELIRQ.sql.clear;
GELIRQ.SQL.Add('SELECT SUM(Miktar)FROM kasa_gelir WHERE tarih BETWEEN'''+Tarih1.Text+'''AND'''+Tarih2.Text+'''');
GELIRQ.open;
Yukardaki kodu yazıyorum şöyle bi mesaj çıkıyor.
gelirg:field miktar not found
ama query de böyle bi alanım var. Miktar alanının toplamını alcam ben..
kolay gelsin...
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08