Fiyat girişi yeni başlangıç tarihinden bir gün öncesine önce

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Fiyat girişi yeni başlangıç tarihinden bir gün öncesine önce

Mesaj gönderen delphist »

S.a. Arkadaşlar. Şöyle bir problemim var. fiyat atışı tablom var ve buraya fiyatlar atılıyor. Yanlız aynı ürün ve aynı cari için eski fiyatları silmiyorum bilgi şeklinde kalsın diye. Fakat yeni girilecek fiyat iyin yeni başlangıç tarihi girilirken önceki bitiş tarihinin bu yeni girilen başlangıç tarihinden bir gün öncesini alıp update edip yeni fiyatı girmem gerekiyor. Bu konuda yardımcı olurmusunuz...Teşekkürler.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Tablo yapınız nasıl?
Cozume nasıl basladınız?
Biraz daha detay verebili misiniz...
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Merhaba,

Öncelikle anladığım kadarıyla
1. sorun bir tarihten bir gün öncesini hesaplatma
2. sorun da eski değeri güncelleme sanırım.

İlki için basit bir fonksiyon yazdım.Formuma 2 datetimepicker ve bir buton koydum. Kodu ise şu şekilde;

Kod: Tümünü seç


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
  function hesapla(tarih:tdatetime):tdatetime;
    { Public declarations }
  end;

var
  Form1: TForm1;



implementation

{$R *.dfm}

function tform1.hesapla(tarih:tdatetime):tdatetime;
var gun, ay, yil,yenigun,yeniay,yeniyil:word;
    gunler: array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
begin
 //artik yil değişikliği
 if (yil mod 4)=0 then
 gunler[2]:=29
 else
 gunler[2]:=28;

 //Tarih, gun, ay ve yil değişkenlerine parçalanıyor
 decodedate(tarih,yil,ay,gun);

 //Bir tarihten bir gün öncesini hesaplayan if bloğu
 if gun=1 then
 begin
 yenigun:=gunler[ay-1];
 yeniay:=ay-1;
 yeniyil:=yil;

    if (ay=1) then
    begin
      yenigun:=31;
      yeniay:=12;
      yeniyil:=yil-1;
    end;
 end
 else
 begin
 yenigun:=gun-1;
 yeniay:=ay;
 yeniyil:=yil;
 end;

 // Fonksiyonun döndüreceği değere hesaplanan tarih atanıyor
 result:=EncodeDate(yeniyil,yeniay,yenigun);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

DateTimePicker2.Date:=hesapla(DateTimePicker1.Date);

end;

end.

Bu fonksiyonu gerekli biçimde programınıza uyarladıktan sonra 2.sorun da şu şekilde çözülebilir. Yeni bilgi girişi için bir adotable ve güncelleme işlemi için bir adoquery kullandığınızı varsayarak;

Bilgi girişi için kullandığınız table'ın afterpost eventında girilen tarihin değerini fonksiyona gönderip, bulunan sonucu da querydeki parametreye eşitleyip, query'nin sql ini çalıştırmak yoluyla güncelletebilirsiniz.

Kod: Tümünü seç

procedure TForm1.kayitekleAfterPost(DataSet: TDataSet);
begin
  guncelle.parameters.parambyname['x'].value:=hesapla(kayiteklebasltarihi.value);
  guncelle.parameters.parambyname['y'].value:=kayitekleid.value-1;
  guncelle.execSQL;
end;
guncelle query'sinin sql'i de şu şekilde olabilir. y de bir önceki kayda ilişkin parametreyi belirtsin (autoinc ve primary olarak varsaydim).

Kod: Tümünü seç

update fiyatlartablosu set bitistar=:x where id=:y
AfterPost ve query ile ilgili kısımlarda ufak tefek hata olabilir. Delphi'de denemedim.

Umarım sorununuzda yardımcı olur. Kolay gelsin
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Bu konu açılalı çok oldu ama bugün bir fonksiyon dikkatimi çekti. O yüzden konuyla ilgili olduğu için göndermek istedim. Yukarıda bir tarihten belli bir gün önceyi bulmak için bir fonksiyon yazmıştım. Halbuki hazır bir fonksiyon varmış. Hiç gerek yokmuş yazmaya. Bu fonksiyon DateUtils kütüphanesinde bulunuyor. Buradaki bir gün önceyi bu fonksiyonla şu şekilde buldurabiliyoruz.

Forma 2 datetimepicker nesnesi ve bir buton koyup, butonun tıklanması olayına:

Kod: Tümünü seç

uses DateUtils; // Bunu unutmayalım

DateTimePicker2.DateTime:= IncDay(DateTimePicker1.DateTime,-1);
//Mesela buradaki -1 yerine, 3 yapsaydık bir tarihten 3 gün sonrasını verecekti.

veya sistem tarihinden bir gün öncesi için;

Kod: Tümünü seç

Uses DateUtils;

DateTimePicker2.DateTime:= yesterday; 
// İsteğe göre bu da kullanılabilir.
diyoruz. Aynı şekilde incmonth, incyear gibi çeşitli fonksiyonlar aynı kütüphane içinde mevcut.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Cevapla