Fiyat girişi yeni başlangıç tarihinden bir gün öncesine önce
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Fiyat girişi yeni başlangıç tarihinden bir gün öncesine önce
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.
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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;
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.
guncelle query'sinin sql'i de şu şekilde olabilir. y de bir önceki kayda ilişkin parametreyi belirtsin (autoinc ve primary olarak varsaydim).
AfterPost ve query ile ilgili kısımlarda ufak tefek hata olabilir. Delphi'de denemedim.
Umarım sorununuzda yardımcı olur. Kolay gelsin
Ö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.
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;
Kod: Tümünü seç
update fiyatlartablosu set bitistar=:x where id=:y
Umarım sorununuzda yardımcı olur. Kolay gelsin
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
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:
veya sistem tarihinden bir gün öncesi için;
diyoruz. Aynı şekilde incmonth, incyear gibi çeşitli fonksiyonlar aynı kütüphane içinde mevcut.
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.
Kod: Tümünü seç
Uses DateUtils;
DateTimePicker2.DateTime:= yesterday;
// İsteğe göre bu da kullanılabilir.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"