Tablodaki Belli Alanları Update Etmek

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ı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Tablodaki Belli Alanları Update Etmek

Mesaj gönderen macsonfor »

Arkadaş Bu saatte nasıl oluyorda yazıyorsun diyeceksiniz ama ne yapayım bir türlü çözemediğim iş uykumu getirmedi ve şuan pinekliyorum :cry: neyse ben sorunumu anlatayım

Veritabanı : Interbase

master-detail bağlı Abone Ve Satış Tabloları var
===============================
Abone Tablosunda :
------------------------------
'AboneNo' Varchar (5),
'Adı' Varchar (25),
'Soyadı' Varchar (25),
....vs

Satış Tablosunda :
------------------------------
'AboneNo' Varchar (5),
'StokKodu' Varchar (5),
'Fiyatı' Float,
'Adedi' Varchar (5),
'ToplamTutar' Float,
....vs
alanlara sahipler
================================

AboneNo : 21
StokKodu : 3
StokCinsi : 12 Kg Tüp
Fiyatı : 25.000.000
Adedi : 4
Toplam Tutar : 100.000.000

yukarıda 21 numaralı abone stokkodu 3 olan "12 kg Tüp" fiyatı 25.000.000 ve bu üründen 3 adet
almış bu ürünlerin toplamı 100.000.000
------------------------------------------------
işte burda bir update işlemi yapmalıyım:

Stok Kodu : 3
StokCinsi : 12 Kg tüp
Fiyatı : 25.000.000
Adedi : 4
Toplamtutar : 100.000.000 iken

Ben fiyatı değiştirip 26.000.000 yaptığımda kod gidip satış tablosunda stokkodu 3 olan butun kayıtları değiştirsin ve aşağıdaki şekilde alayım

Stok Kodu : 3
StokCinsi : 12 Kg tüp
Fiyatı : 26.000.000
Adedi : 4
Toplamtutar : 104.000.000

aslında satış tablosundaki fiyat değiştirme işlemini yaptım. sorun ise sadece fiyatı değiştirbildim kodu bu şekilde

Kod: Tümünü seç


var
a: String;
begin
a:=strtofloat(edit1.text);
ibquery1.close;
ibquery1.sql.clear;
ibquery1.sql.add('UPDATE SATIS SET FIYATI='+A+'WHERE'+DBEDIT1.TEXT+'');//dbedit1 stoğun eski fiyatı
ibquery1.open;
end;
bu şekilde yaptım oldu
ama sonra bişeyler daha yapayım dedim ve artık görevini yerine getirmiyor kod çalışıyor gibi görünüyor ama aslında hiçbir işlem yapmıyor
bu konuda sizlerden yardımlarınızı bekliyorum ve eğer anlatamadıysam derdimi beni uyku mağduru olarak görün.
herkese kolay gelsin...
Bilgi Paylaşıldıkça Çoğalır
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Re: Tablodaki Belli Alanları Update Etmek

Mesaj gönderen Salih »

Merhaba,

Satış gerçekleştikten sonra gelen zammı neden eski müşterilere yansıtıyorsun, yanlış bence !!! Ama bana ne, senden tüp almam, olur biter :)

Kod: Tümünü seç

ibquery1.sql.add('UPDATE SATIS SET FIYATI='+A+' WHERE FIYATI='+DBEDIT1.TEXT+'');//dbedit1 stoğun eski fiyatı
Where kısmının böyle olması gerekmiyor mu ?

Not 1 : Ben yazdığım bir SQL görevini yapmıyor ise, o SQL cümlesini label1 vs alanında display ettiriyorum, doğru olup olmadığını görmek için. Olmadı, SQL cümlesini IB Expert te çalıştırıp, orada istediğim şekle getiriyor, doğru çalışan kodu alıp Delphi de kullanıyorum.

Not 2 : Ben olsam, yapmaya uğraştığın bu işlemi Stored Procedure içinde yapar, rahat ederdim. %5 zam geldi diyelim, bütün müşterilerin borç bakiyesini %5 artırsak olmuyor mu ? Gerçi mantık olarak hala karşıyım !!
Sevgi, Saygı.....
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

aslında bende bu işten çok sıkılıyorum ama ben ne yapayım adam diyorki
zam geldimi ben yansıtacam işin birde pis bir yanı daha varki hiç sormayın
iyi dinleyin :
ben 01.02.2004 tarihinde 5 adet 12 kg tüp aldım bu tarihte tüpün fiyatı 25.000.000 TL toplam fiyat ettimi 125.000.000 TL ben bu paranın 90.000.000 TL'sini ödedim kaldı kaldı 35.000.000 TL
aradan bir hafta geçti tüp zam aldı ne oldu tüpün fiyatı 26.000.000 şimdibenim kalan para ne kadar 35.000.000 şimdi ALLAH'ınızı severseniz siz söyleyin bu işin içinden nasıl çıkılacak...
Kolay gelsin...
Bilgi Paylaşıldıkça Çoğalır
Misafir

cari bakiyeleri artır

Mesaj gönderen Misafir »

daha önce de yazmış arkadaş. bu konuda en uygunu zam oranı kadar cari bakiyeleri artımak olur. 25 den 26 çıkmışsa % 4 zam gelmiş olur. 35.000.000 un %4 ü, 1.400.000 lira bi borç hareketi girersin olur biter.
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

Bir şeyler daha ekledim ama sorun hala devam ediyor


procedure TFIYATGUNCELLE1.Button1Click(Sender: TObject);
var
a,b,c : String;
d,e,f,g : Real;
begin
//--burada bir sorun yok sipariş tablosundaki bütün fiyatlar değiştiriliyor-//
A:=FloatToStr(Para1.TextAsFloat);
DATA1.SIPARIS.Edit;
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('UPDATE SIPARIS SET FIYATI='+A+'WHERE FIYATI='+DBEdit1.Text+'');
IBQuery1.Open;
//-------------------------------ama burada sorun var-------------------------//
DATA1.SIPARIS.First;
while not data1.SIPARIS.eof do
if DBEdit1.Field.AsFloat=DATA1.SIPARIS.FieldByName('FIYATI').AsFloat Then
begin
DATA1.SIPARIS.Edit;
D:=(DATA1.SIPARISFIYATI.Value*DATA1.SIPARISMIKTARI.Value);
DATA1.SIPARISTTUTAR.Value:=d;
E:=(D-DATA1.SIPARISODENEN.Value);
DATA1.SIPARISKALAN.Value:=E;
DATA1.SIPARIS.Next;
DATA1.STOK.Edit;
JvDBGrid1.Columns.Grid.Field[2].AsFloat:=Para1.TextAsFloat;
DATA1.STOK.Post;
DATA1.STOK.Refresh;
//---------------------------------------------------------------------------------//
end;
end;
end.

Yukarıdaki kodla stok fiyatını değiştirip sipariş tablosunda ne kadar borcu olan abone varsa bunların borçlarını yeniden update etmek ama olmuyor stok fiyatını değiştiriyor gerisi sanki yalan…
Bilgi Paylaşıldıkça Çoğalır
Misafir

post nerde ?

Mesaj gönderen Misafir »

data1.siparis.post;

ben mi göremedim gerçekten yok mu ?
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

mikrocu ben senin ne demek istediğini tam olarak anlamadım
Bilgi Paylaşıldıkça Çoğalır
Misafir

Mesaj gönderen Misafir »

1- DATA1.SIPARIS.Edit;
2- D:=(DATA1.SIPARISFIYATI.Value*DATA1.SIPARISMIKTARI.Value);
3- DATA1.SIPARISTTUTAR.Value:=d;
4- E:=(D-DATA1.SIPARISODENEN.Value);
5- DATA1.SIPARISKALAN.Value:=E;
6- DATA1.SIPARIS.Next;
7- DATA1.STOK.Edit;
8- JvDBGrid1.Columns.Grid.Field[2].AsFloat:=Para1.TextAsFloat;
9- DATA1.STOK.Post;
10-DATA1.STOK.Refresh;
1.satırda siparisi edit ediyorsun. ama post etmiyorsun. dolayısı ile yaptığın değişikleri görememen normal.

sonra şöyle bir hataya düşüyorsun. yaptığın hesaplama ile diyelim ki yıl boyunca 20 milyondan 5 adet tüp alan birr, 4 ünü ödemiş olsa bile tüp 25 milyon olduğunda 5*5 = 25 milyon zam yiyor. halbuki sadece 5 milyon zam yemesi lazım.

bence, bu işlem için yeni bir ekran kullan. orada deki zam oranını giriniz. girilen zam oranı diyelim ki %5

Kod: Tümünü seç

var bakiye:extended;
kod:string;
musteriquery.close;
musteriquery.sql.clear;
musteriquery.sql.add('select kod from musteri');
musteriquery.open;
musteriquery.first;
repeat
kod:=musteriquery.fieldbyname('kod').asstring;
siparisquery.close;
siparisquery.sql.clear;
siparisquery.sql.add('select kod,sum(tutar)toplamalinan,sum(odenen)toplamodenen from siparis where kod="'+kod+'" group by kod');
siparisquery.open;
bakiye:=siparisquery.fieldbyname('toplamalinan').asfloat-siparisquery.fieldbyname('toplamodenen).asfloat;
if bakiye > 0 then begin
siparistable.insert;
siparistable.fieldbyname('kod').asstring:=kod;
siparistable.fieldbyname('tutar').asfloat:=bakiye*5/100;
siparistable.fieldbyname('aciklama').asstring:='ZAM GELDİ BÖYLE OLDU';
siparistable.post;
end;
musteriquery.next;
until musteriquery.eof;
sanırım ve umarım anlaşıldı.
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

öncelikle teşekkür ediyorum ilginizden dolayı.
yanlız şunu belirtmeliyimki bu işin olması bana da mantıklı gelmiyor
niye derseniz :
çünkü tabloda 3000'e yakın abone olacak ve bu abonelerin hepsini tek bir parametre ile güncellemek yetermi açıkçası bilemiyorum sebebine gelince;

Tüp fiyatı 25.000.000 olarak düşünürsek

bir abone gelip 5 adet tüp alacak 125.000.000 TL bunun 70.000.000 TL sini ödeyecek
diğer bir abone gelip 3 tane tüp alacak 75.000.000 TL bunun 10.000.000 TL sini ödeyecek burda bi uyuşmazlık var.
demek istediğim vereceğim parametre nasıl ayırt edecek. Toplamtutarda miktar neyse atıyorum 55.000.000 bunu bölecek tüp fiyatına sonrada kalan neyse ona zammı yansıtacak böyle bişey olabilirmi umarım yeteri kadar açıklayıcı olabilmişimdir.
kolay gelsin...
Bilgi Paylaşıldıkça Çoğalır
Misafir

Mesaj gönderen Misafir »

zaten yukarda yaptığımız senin dediğin şey.

yani a müşterisi 125 milyon alıp 70 milyon ödedi ise 55 milyon luk alacağına örneğimizde %5 zam işletiyorsun. b müşterisi 50 alıp 30 ödedi ise 20 milyon kalan borcuna % 5 zam işletiyorsun.

ikinci bir yöntem şöyle yapılabilir. bi para birimi tanımlarsın. tüp fiyatını günlük döviz bilgisi girer gibi bir tabloda tutarsın sonra müşteri extresi alırken bu arada kur hesaplar gibi aldıklarını ve verdiklerini bu birime çevirirsin.

kolay gelsin
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

Öncelikle bir müjde vereyim sizlere sorunun büyük bir kısmı halledildi...
Ama sorun tam olarak çözülmedi bunuda açıklamaya çalışayım :

abonenin kalan miktarı tüp fiyatına bölünüyor ve kaln sonuç kaç tane tüp adedine tekabül ediyorsa zam miktarını tekabul eden tüp adediyle çarpıp sonucu kalana akatarıyor yöntem bu şekilde yanlız şu yuvarlama ile başım dertte

Kod: Tümünü seç

Edit2.Text:= FloatToStr(Round(StrToFloat(Edit1.Text))); 

burda yuvarlama yapılıyor
ama yuvarlama atıyorum 2.49'eşitse sonuç 2 eğer 2.50'ye eşitse sonuç 3
işte ben burda diyorum ki 2.99' a kadar 2 olsun yoksa parası ödenmiş tüplerede zam yansıtılıyor bu da olmaması gereken bişey bunu nasıl yapabiliriz acaba...
=========================================
İlginizden dolayı Teşekkür ediyorum ALLAH sizlerden razı olsun
=========================================
Kolay gelsin
Bilgi Paylaşıldıkça Çoğalır
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Round fonksiyonu yerine Trunc Fonksiyonunu kullan :wink:

Bu işini görür sanırım.

Kod: Tümünü seç

    Edit2.Text:= FloatToStr(Trunc(StrToFloat(Edit1.Text)));
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Mesaj gönderen macsonfor »

valla ne diyeceğimi bilemiyorum yanlız şunu belirteyim ki ben hepinizi gerçekten çok seviyorum ALLAH hepinizden razı olsun...

Kolay gelsin
Bilgi Paylaşıldıkça Çoğalır
Cevapla