Detay daki verilere göre master tablo raporu

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
Kullanıcı avatarı
ayhanarican
Üye
Mesajlar: 37
Kayıt: 03 Tem 2003 01:24
Konum: İzmir
İletişim:

Detay daki verilere göre master tablo raporu

Mesaj gönderen ayhanarican »

Merhaba,

Paradox 7 kullanıyorum.
İki tablom var(Girişlerde TTable,raporlarda TQuery).
StokKart.db ve Tarihler.db.
StokKart tablosu, ürünün numarasını (Integer),Ürünün Adını(String 255) ve bu ürünün son kullanma tarihi yaklaşanlar raporu için stoklarda bulunan kaç fraklı son kullanma tarihi bulunduğunu tutan tarihler tablosundaki tarihlerden kaç gün önce uyarı vereceğini saklayan kullanıcının belirlediği UyarGun(Integer) alanlarından oluşuyor.

Kullanıcı stoklarını gözden geçiriyor ve eğer belirli bir ürünün tarihler tablosunda kayıtlı bulunan tarihe(son kull.tarihi) ait stoğu kalmamışsa manual olarak o tarihi siliyor. Yeni parti bir ürün gelmişse bu ürünlerin son kullanma tarih(leri)ni tarihler tablosuna manual olarak giriyor.

Kod: Tümünü seç

StokKart.db
---------
ID      (I)     Ürün No (Primary Key)
StokAd  (A 255) Ürün Adı
UyarGun (I)     Tarihler(son kull.tarihi) tablosundaki tarihlerden kaç gün önce uyaracağı

Tarihler.db
----------
ID      (I)     …(Primary Key)
RefID   (I)     Ürün No suna bağlı referans alan.(Index) 
Tarih   (D)     Son kullanma tarihi.
Son Kullanma Tarihi Geçen Ürünler ve Son Kullanma Tarihi Yaklaşan Ürünler gibi iki rapor almam gerekiyor.Bu raporları verecek bir SQL hazırlanabilir mi? (işin ilginç tarafı bir ürün hem sonkullanma tarihi geçenler listesinde hemde son kullanma tarihi yaklaşanlar listesinde olabilir.)


Yardımlarınız için şimdiden teşekkürler.
Kullanıcı avatarı
ayhanarican
Üye
Mesajlar: 37
Kayıt: 03 Tem 2003 01:24
Konum: İzmir
İletişim:

cevap vermemekte haklısınız. sorumu değiştiriyorum.

Mesaj gönderen ayhanarican »

Son kullanma tarihi geçen ürünlerin listesini almayı başardım.

SQL şöyle :

Kod: Tümünü seç

  With Data.qryGecen Do
  Begin
    Active:=False;
    SQL.Clear;
    SQL.Add('SELECT Stokkart.ID, Stokkart.StokAd, Tarihler.Tarih');
    SQL.Add('FROM "StokKart.db" Stokkart');
    SQL.Add('   INNER JOIN "Tarihler.db" Tarihler');
    SQL.Add('   ON  (Stokkart.ID = Tarihler.RefID)');
    SQL.Add('WHERE  (Tarihler.Tarih) <= '+#39+DateToStr(Date)+#39);
    SQL.Add('ORDER BY Stokkart.ID');
    Active:=True;
  End;
fakat asıl sorun son kullanma tarihi yaklaşan ürünlerin listesinde oluşuyor.

onun SQL si

Kod: Tümünü seç

 With Data.qryYaklasan Do
  Begin
    Active:=False;
    SQL.Clear;
    SQL.Add('SELECT Stokkart.ID, Stokkart.StokAd, Stokkart.UyarGun, Tarihler.Tarih');
    SQL.Add('FROM "StokKart.db" Stokkart');
    SQL.Add('   INNER JOIN "Tarihler.db" Tarihler');
    SQL.Add('   ON  (Stokkart.ID = Tarihler.RefID)');
    SQL.Add('WHERE  (Tarihler.Tarih > '+#39+DateToStr(Date)+#39+')  AND ((Tarihler.Tarih-StokKart.UyarGun) <= '+#39+DateToStr(Date)+#39+')');
    SQL.Add('ORDER BY Stokkart.ID');
    Active:=True;
  End;
Hata : Type mismathch in expression.

sanırım WHERE kalıbının AND den sonraki kısmı için hata veriyor.

StokKart.UyarGun yerine literal(5 gibi) bir değer girdiğimde sorun çıkmıyor.

SELECET veya WHERE kısmında bir tarihten UyarGun gibi integer bir değeri nasıl çıkartabilirim?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Tdatetime tipinde bir değişken tanımla

Kod: Tümünü seç

md:tdatetime;
sonra ona deger ver.

Kod: Tümünü seç

md:=(Tarihler.Tarih-StokKart.UyarGun
sonrada queryde bu tarihi kullan.

ikinci bir yolda parametre kullanımı (ki tavsiye edilen yöntem parametre kullanımıdır)
Kolay Gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
ayhanarican
Üye
Mesajlar: 37
Kayıt: 03 Tem 2003 01:24
Konum: İzmir
İletişim:

fakat

Mesaj gönderen ayhanarican »

A.S.
cevabınız için teşekkür ederim.
Fakat UyarGun sabit değil yani her farklı stok için UyarGun alanıda farklı.
Bu durum da Tarihten UyarGünü SQL için de nasıl çıkartabilirim.Bu çıkarma işleminin sonucu her farklı stok için farklı olacak.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

tarihten tarih cıkar uyargun ile karsılastır
where (date-Tarihler.Tarih) >=StokKart.UyarGun
gibi :wink:
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
ayhanarican
Üye
Mesajlar: 37
Kayıt: 03 Tem 2003 01:24
Konum: İzmir
İletişim:

teşekkürler

Mesaj gönderen ayhanarican »

teşekkürler hocam.Bu daha önce niye aklıma gelmedi. :?:
demekki bazen olaya farklı açılardanda bakmak gerekiyor.
Cevapla