sorgu birleştirmek

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
heavy
Üye
Mesajlar: 67
Kayıt: 07 May 2005 03:31

sorgu birleştirmek

Mesaj gönderen heavy »

arkadaşlar aşağıdaki SQL kodlarını birleştirip tek seferde sonuçları almanın
bir yolu varmı ?

Kod: Tümünü seç

  ADOQuery1.SQL.Add('SELECT SUM(S.SatisAdet) as TamAdet, SUM(S.SatisFiyat) 
as TamFiyat,  FROM Satis S WHERE (S.SatisTarih BETWEEN :bir AND :iki) AND 
((S.SatisFiyatID=1)');
  ADOQuery1.SQL.Add('SELECT SUM(S.SatisAdet) as OgrenciAdet, 
SUM(S.SatisFiyat) as OgrenciFiyat FROM Satis S WHERE (S.SatisTarih BETWEEN 
:bir AND :iki) AND (S.SatisFiyatID=2)');
  ADOQuery1.SQL.Add('SELECT SUM(S.SatisAdet) as IndirimliAdet, 
SUM(S.SatisFiyat) as IndirimliFiyat FROM Satis S WHERE (S.SatisTarih BETWEEN 
:bir AND :iki) AND (S.SatisFiyatID=3)');
  ADOQuery1.SQL.Add('SELECT SUM(S.SatisAdet) as KonukAdet, SUM(S.SatisFiyat) 
as KonukFiyat FROM Satis S WHERE (S.SatisTarih BETWEEN :bir AND :iki) AND 
(S.SatisFiyatID=4)');
  ADOQuery1.Parameters.ParamByName('bir').Value := t1;
  ADOQuery1.Parameters.ParamByName('iki').Value := t2;
TamAdet, TamFiyat, OgrenciAdet, OgrenciFiyat, IndirimliAdet, IndirimliFiyat,
KonukAdet, KonukFiyat değerlerini tek seferde alabilirmiyim? Yoksa hepsi
için ADOQuery yi açıp kapayarak tekrar tekrar sorgulattırmam mı gerekir ?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; bu SQL cümlelerini hangi veritabanında çalıştıracağın önemli olabilir. SQL Server da istediğin oluyor ve kullanımı:

Kod: Tümünü seç

ADOQuery1.SQL.Clear;
//sql ayarlama kodları
.
.
ADOQuery1.Open;
//1. sorgudan gelen sonuç
.
.
ADOQuery1.NextRecordset(1);
//2. sorgudan gelen sonuç
.
.
ADOQuery1.NextRecordset(1);
//3. sorgudan gelen sonuç
.
.
//vs. vs.
ADOQuery1.NextRecordset(1); kodu ile diğer sorguların sonuçlarına geçebilirsin fakat 4 tane sonuç için 5. sorgunun sonucuna geçmeye çalışırsan tablon boş sonuç döndürebilir. Hata da çıkarabilir tam hatırlayamıyorum. Access gibi basit veritabanlarında bu işlem olmamaktadır. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
heavy
Üye
Mesajlar: 67
Kayıt: 07 May 2005 03:31

Mesaj gönderen heavy »

cevabın için teşekkür ederim, maalesef access kullanıyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aslında benim bir uygulamam yok bir test edebilir misin? :) Sonucu şimdiden merak ediyorum.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
heavy
Üye
Mesajlar: 67
Kayıt: 07 May 2005 03:31

Mesaj gönderen heavy »

maalesef

Kod: Tümünü seç

ADOQuery1.NextRecordset(1);
de hata veriyor.
(Delphi 6 kullanıyorum) Help den baktığımda kullanım örneği olarak

Kod: Tümünü seç

ADODataSet1.Recordset := ADOQuery1.NextRecordset
verilmiş.
:(
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Zaten bende eve gidince bir güzel ofis kurup test ettim. Access'te birden fazla SQL yazılınca sorgu bileşeni açılmıyor (ADOQuery.Open ) :D . Kısacası bu işlem Access'te çalışmıyor. Demekki eskiden test etmişim aklımda doğrusu kalmış :). Belirttiğin yardım örneğine göre yukarıdaki eksikliği de şu şekilde tamamlayabilirim.

Kod: Tümünü seç

ADOQuery1.SQL.Clear;
//sql ayarlama kodları
.
.
ADOQuery1.Open;
DigerAdoQuery.Recorset:=ADOQuery1.RecordSet;
//1. sorgudan gelen sonuç
.
.
DigerAdoQuery.Recorset:=ADOQuery1.NextRecordset;
//2. sorgudan gelen sonuç
.
.
DigerAdoQuery.Recorset:=ADOQuery1.NextRecordset;
//3. sorgudan gelen sonuç
.
.
//vs. vs.
ADOQuery1.NextRecordset(1); şeklinde ise Delphi7'deki çalışma şekli. Bunu ileride arama yapanlar için yazayım istedim.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
heavy
Üye
Mesajlar: 67
Kayıt: 07 May 2005 03:31

Mesaj gönderen heavy »

teşekkür ederim.

selamlar.
Cevapla