Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
VCLcan
Üye
Mesajlar: 15
Kayıt: 09 Şub 2017 12:27

Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen VCLcan »

Arkadaşlar iyi günler, okulumuz kütüphanesi için basit bir ödünç verme programı çalışması yapmaktayım.

Gün içinde farklı saatlerde aynı kitabı alanların sayısını(her kitaptan elimizde altışar adet var) stringgrid'de görüntülemek istiyorum. Şöyleki:

Tarih Kitap Adı Sayı Kalan
16.12.2017 Yaban 3 3
16.12.2017 Çalıkuşu 4 2
16.12.2017 Cimri 2 4

Kitap ödünç vermede barkod kullanıyoruz. Veri tabanına kayıtlı bu bilgileri nasıl filtreleyip toplam sayıyı nasıl aktarabilirim.

(Hobi amaçlı çalışıyorum. Programda Adotable kullandım. Biliyorum SQL kullansaydın diyeceksiniz ama çok büyük bir program değil. Delphi XE5 kullanıyorum. Bu verileri FastReportta görüntülemek niyetindeyim. )
Elinizde örnek bir çalışma formu varsa onu inceleyip adapte etmeye de çalışırım.
Şimdiden teşekkürler.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen ihalilcoban »

Merhaba,

Veritabanı olarak access kullandınız sanırım?
Kütüphane programı şu anda geliştirmekte olduğum bir projedir ufak tefek kısımlar kaldı bitmek üzere. Bahsettiğiniz meseleyi ben veritabanında stored procedure kullanarak yaptırıyorum. Diğer türlü stoğu artır eksilt sıkıntı oluyor. Ben veritabanı olarak firebird kullandım. Kitaplar için kullandığım formun ekran görüntüsünü;

Resim

Her kitabın hesabını ayrı tutuyorum. Stok gibi düşünün. Elimde bir maldan ne kadar var? Ne kadar çıkış ne kadar giriş yapılmış görebiliyorum. Tarih aralığına göre filtreleme yaparak, bir kitabın gün içindeki hareketlerini de görüntüleyebiliyorum. Umarım fikir verici olabilmişimdir. İyi çalışmalar.
En son ihalilcoban tarafından 16 Ara 2017 11:26 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
VCLcan
Üye
Mesajlar: 15
Kayıt: 09 Şub 2017 12:27

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen VCLcan »

Cevabınız için teşekkürler. Resim görüntülenemiyor sanırım yeniden yüklemeniz gerekiyor. En baştan dediğiniz gibi başlasaydım belki olabilirdi. ama artık geç kaldım sanırım.
Kitap adına göre filtreleme yapıyorum. while do döngüsü kullanıyorum. progressbar ile ilerletiyorum. tek kitap için toplam sayıyı yazdırıyorum Birden fazla kitap alındıysa yazdıramadım.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen ihalilcoban »

Şöyle bir şey yapılabilir. Ayrı bir dataset kullanarak SUM komutuyla istenilen alanların toplamı alınabilir. Kod yapınızı tam bilemediğim için fikir yürütmek zor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen ertank »

VCLcan yazdı: 16 Ara 2017 09:46 Arkadaşlar iyi günler, okulumuz kütüphanesi için basit bir ödünç verme programı çalışması yapmaktayım.

Gün içinde farklı saatlerde aynı kitabı alanların sayısını(her kitaptan elimizde altışar adet var) stringgrid'de görüntülemek istiyorum. Şöyleki:

Tarih Kitap Adı Sayı Kalan
16.12.2017 Yaban 3 3
16.12.2017 Çalıkuşu 4 2
16.12.2017 Cimri 2 4

Kitap ödünç vermede barkod kullanıyoruz. Veri tabanına kayıtlı bu bilgileri nasıl filtreleyip toplam sayıyı nasıl aktarabilirim.

(Hobi amaçlı çalışıyorum. Programda Adotable kullandım. Biliyorum SQL kullansaydın diyeceksiniz ama çok büyük bir program değil. Delphi XE5 kullanıyorum. Bu verileri FastReportta görüntülemek niyetindeyim. )
Elinizde örnek bir çalışma formu varsa onu inceleyip adapte etmeye de çalışırım.
Şimdiden teşekkürler.
Merhaba,

Kullandığınız database sistemi nedir? Versiyon numarası ile birlikte bildirebilir misiniz?
Database içindeki hareket kayıtlarını girdiğiniz tablonun alan isimleri ve veri türlerini gösteren yapısını paylaşabilir misiniz?
VCLcan
Üye
Mesajlar: 15
Kayıt: 09 Şub 2017 12:27

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen VCLcan »

Access veri tabanı
Microsoft Jet 4.0 Ole DB
AdoTable

Table Adı: KitapVerme
Table içindeki alan isimleri:
SıraNo,TCKimlik, AdıSoyadı, Numarasi, KitapNo, KitapAdi, VermeTarihi, Aciklama

(Daha önce bir market programı buldum. Oradaki kodları inceleyerek benzerini yazmaya çalıştım. olmadı. )
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen ertank »

Verilen kitabın iade edildiğini nasıl anlıyorsunuz?
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen kerpeten »

Sanırım şuna benzer bir SQL cümleciğiyle işinizi görür;

select VermeTarihi, KitapNo, count(*), from KitapVerme
groupby VermeTarihi, Kitapno
order by VermeTarihi, KitapNo;

Bu kod her günkü her çeşit kitabın veriliş adedini verir.
VCLcan
Üye
Mesajlar: 15
Kayıt: 09 Şub 2017 12:27

Re: Farklı ürünlerin toplam adetlerini veri tabanında bulmak

Mesaj gönderen VCLcan »

Cevaplar için teşekkürler. while not ve if yardımıyla çözdüm. biraz uğraştırdı ama oldu. Bir market programındaki gazete satışları kodlarından faydalandım. kod örneği stringrid kullanımı için faydalı olabilir.
unit UnitGazeteSatislari;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons;

type
TformGazeteSatislari = class(TForm)
sg: TStringGrid;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
formGazeteSatislari: TformGazeteSatislari;

implementation

uses Mdiunit;

{$R *.dfm}

procedure TformGazeteSatislari.FormCreate(Sender: TObject);
var
toplamTutar,toplam : real;
toplamAdet,i,j : integer;
satisNo : string;
begin
toplamTutar := 0;
toplamAdet := 0;
acikFormVar := true;
i := 1;
toplam := 0;
label2.Caption := dateTostr(date-7) + ' - ' + dateToStr(date-1);

sg.Cells[0,0] := 'Gazete';
sg.Cells[1,0] := 'Satış Adedi';
sg.Cells[2,0] := 'Fiyatı';
sg.Cells[3,0] := 'Toplam Tutar';

mdiForm.tableSatislar.Filtered := false;
mdiForm.tableSatislar.Filter := '([SatisTarihi]>='+ quotedStr(datetoStr(date-7)) + ') and ([SatisTarihi]<'+ quotedStr(datetoStr(date)) + ')' ;
mdiForm.tableSatislar.Filtered := true;

satisNo := mdiForm.tableSatislarSatisNo.AsString;
if satisNo = '' then begin
//showmessage('Hiç Satış Yok.');
label4.Caption := '0 TL';
exit;
end;
mdiForm.tableUrunler.Filtered := false;
mdiform.tableUrunler.Filter := '[KategoriNo]='+ QuotedStr('12');
mdiForm.tableUrunler.Filtered := true;

while not mdiForm.tableUrunler.Eof do begin
mdiForm.tableSatilanUrunler.Filtered := false;
mdiForm.tableSatilanUrunler.Filter := '([SatisNo]>='+ quotedStr(satisNo) + ') and ([UrunNo]='+ quotedStr(mdiForm.tableUrunlerUrunNo.AsString) + ')' ;
mdiForm.tableSatilanUrunler.Filtered := true;
toplamTutar := 0;
toplamAdet := 0;
while not mdiForm.tableSatilanUrunler.Eof do begin
toplam := toplam + mdiForm.tableSatilanUrunlerUrunSatisTutari.AsFloat;
toplamTutar := toplamTutar + mdiForm.tableSatilanUrunlerUrunSatisTutari.AsFloat;
toplamAdet := toplamAdet + mdiForm.tableSatilanUrunlerBirimAdedi.AsInteger;
mdiForm.tableSatilanUrunler.Next;
end;
sg.Cells[0,i] := mdiForm.tableUrunlerUrunAdi.AsString;
sg.Cells[1,i] := inttoStr(ToplamAdet);
sg.Cells[2,i] := mdiForm.tableUrunlerBirimAlisFiyati.AsString;
sg.Cells[3,i] := floatToStr(toplamTutar);
mdiForm.tableUrunler.Next;
inc(i);
//if (j+1) = 5 then j := 0;
end; //while dış
label4.Caption := floatToStr(toplam) + ' TL';
end;

procedure TformGazeteSatislari.BitBtn1Click(Sender: TObject);
begin
formGazeteSatislari.Close;
end;

procedure TformGazeteSatislari.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action := cafree;
acikFormVar := false;
mdiForm.menuGazeteSatislari.Checked := false;
mdiForm.tableSatislar.Filtered := false;
mdiForm.tableSatilanUrunler.Filtered := false;
mdiForm.tableUrunler.Filtered := false;
end;

procedure TformGazeteSatislari.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_escape then
mdiForm.ActiveMDIChild.Close;

end;

end.
Cevapla