kayıtların etkileme durumu yardım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

sa arkadaşlar yüksek okul ögrencisiyim yaptıgım projede 2 tablo arasındaki etkilenme durumunu çözemedigim için yardımlarınızı bekliyorum .sorum şu alim isimli tabloma kayıt eklemem durumunda eklenen kayıttaki prof_mik isimli fielda girilen integer deger kadar hamadde tablosundaki ilk kayıtın miktar isimli field ına deger arttırımı yapasını istiyorum(hammadde tablosu tek kayıt ve tek field dan oluşuyor) örnegin alim tablosuna prof_mik alanına 10 olarak yeni kayıt ekleyince ekledigim anda bu 10 degerini hammadde tablosunun miktar field ına ve ilk kayıta eski degeriyle toplayıp yeni deger olarak atmasını istiyorum yani miktar field ının degeri 40 ise 50 yapsın inşallah acıklayabilmişimdir... yardımlarınız için şimdiden teşekkürlerimi sunarım kolay gelsin
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

S.a
1.hammedde toplosunda sadece 1 kayıtmı var
2.bu kayıtları bir birinden ayıran baska bir alan yokmu (ID Gibi)
3.hammedde tablosunda hangi kolona ve hangi satıra işlem yapacaksın ilk satır diyorsun ama yanlıs sonuclar verebilir. 1 kayıttan fazla ise

bu sorgu ile hammade tablosundaki en büyük hammadde miktarını alırsın

Kod: Tümünü seç

SELECT 
    MAX( miktar ) AS EskiMiktar
FROM hamadde
bu sonucu bir degişkene yükle
Eski:=EskiMiktar;
gelen mal
Yeni:=GelenMal;

eski mikatır bulduk gelen miktarı yazdık sim hammadde tablosunu güncelleyelim

Kod: Tümünü seç

UPDATE HAMMADDE SET 
    Miktar =  Eski + Gelen
Ben sana basit bir yol gösterdim yanlız kaydı okurken ve yazarken kayıtları birbirinden ayırabilmen lazım
Mesela yukarda kodların sonunda bu olması gerekir yoksa hata kaçınılmazdır

Kod: Tümünü seç

WHERE HAMMADDE_NO =1234
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

bu işlemleri delphi ilemi yapacaksın
ne yaptıgını neyle yaptıgını biraz detaylandır.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

hocam projeyi delphi 7 ile yapıyorum .. query koymadım.. hammadde tablosu tek kayıttan olusuyor zaten tek field bu tablo sadece depodaki hammadde miktarını tutacak yani bu tabloya bakan birisi 1 tane rakam görecek oda depodaki profil(hammadde) miktarı .. alım tablosuna kayıt eklemem durumunda ben hammadde almış olacagım yani depomdaki mal miktarı girdigim kayıt kadar depoya (hammadde tablosuna) kayıt eklenmeli.alım tablosunda prof
-mik ve tarih isimli iki field var bu tablodan alınan malın tarihe göre takibi yapılacak

yaptıgım proje sac profilden soba imalatı yapan kobilere yönelik..

mesela benim depomda(hammadde tablosunda)40 profil sac var ben alım yaptıgımda alim tablosuna tarih ve aldıgım miktarı girecegim kayıt eklendigi anda eklenen kayıt ın prof_mik isimli field de ki int deger kadar hammadde tablosuna (tek alan tek kayıt olan )eski degeri set edip yeni degeri eklemeli (aynı kayıt ı set etmeli) sorunum bu tetikleyici olay olarak neyi kullanacagımı da bilmiyorum after post olayı olur diye düşündüm ama gercekten sadece pascal bilgisiyle delphi de proje yapmaya çalışınca durum böyle oluyor ... dikkate aldıgınız için teşekkür ederim bu arada benim ismimde abdul kadir adaşız :wink:
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

hocam proje 1 adet ana formdan oluşuyor bu formda buttonlar var yanda buyuk bir de panel nesnesi var hangi buttona basılır sa panelde onceden accses deki baglantıları bulunan form o panelde görünüyor görülen formda dbgrid var o dbgridde ilgili tabloya baglı ben bu şekilde alim formunu acarak buraya kayıt ekliyorum. kayıt eklenince hammadde formundaki dbgrid e baglı olan hammadde tablosunun acıkladıgım şekilde set olmasını istiyorum .ben sorarken sadece veri tabanı gibi anlatmışım kusura bakmayın .resim nasıl ekleniyor bilmiyorum keşke form görüntüsüyle anlatabilsydim :(


ado table ve data source lar 1 tane data module de tutuluyor
yazdıgım kod
data==> datamodule ün ismi
alim_tb==> alim tablosunun ado table ı
prof_mik ==> field ın ismi
hammadde_tb ==> hammadde tablosunun ado table ı
miktar set edilecek field ın ismi
{
procedure TData.alim_tbAfterPost(DataSet: TDataSet);(kayıt eklenme olayı olarak bunu kullandım)
begin
eklenecek:=data.alim_tbprof_mik.Value;(burada 'eklenecek' isimli bir degişkene alim tablosuna eklenen kayıt ın prof_mik field ının int degerini atamak istedim )

eski:=data.hammadde_tbmiktar.first(burada eski isimli degişkene var olan degeri atamaya calıştım)
data.hammadde_tbmiktar.SetData(eklenecek+eski);(burada girilen ile eskiyi toplayıp miktar field ının tek kayıtını set etmek istedim )
end;
}

ama olmadı :) bi dünya hata verdi
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

alim_tbAfterPost olayında Soyle bir dene

Kod: Tümünü seç

procedure TData.alim_tbAfterPost(DataSet: TDataSet);
var eklenecek, Eski:integer;
begin
eklenecek:=StrToInt(Edit1.text);//eklenen adedi edit1 e yazdıgını varsaydım.
eski:=hammadde_tb.FieldByName('miktar').Asinteger;

hammadde_tb.edit;//guncelleme icin ac
hammadde_tb.FieldByName('miktar').Asinteger:= eklenecek + Eski;//uygula
hammadde_tb.post;//kaydet
End;
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

forma standart bir edit nesnesi koymama ragmen (undeclared identifier 'edit1') altınada (missing operator or semicolon) hatsıyla karşılasıyorum .. affınıza sıgınarak şöyle bir durumu bildirmek istiyorum edit nesnesi yerine kayıtın ilgili field ından degeri direk eklenecek isimli degişkene çekme imkanımız varmı acaba ?

o kısımı


procedure TData.alim_tbAfterPost(DataSet: TDataSet);
var eklenecek, Eski:integer;
begin
eklenecek:=data.alim_tbprof_mik.Value;//degişen kısım .......................................
eski:=hammadde_tb.FieldByName('miktar').Asinteger;

hammadde_tb.edit;//guncelleme icin ac
hammadde_tb.FieldByName('miktar').Asinteger:= eklenecek + Eski;//uygula
hammadde_tb.post;//kaydet

end;


olarak degiştirdim çalışıyor fakat degeri tabloya girip kaydet dedigim anda delphi kücük bi pencere ile(debugger exception notification) başlıklı bi hata veriyor aynı zaman da (proje ismi emba) accses voilation .......emba.exe. read of adres gibi bişey cıkıyor fakat tamam deyip kapatınca tekrar degerleri giriyorum çalışıyor ... bunu çözdügüm taktirde minnettar kalacagım size ugraştıgınız için tekrar teşekkür ederim ..
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

Yardımcı olabilirsem mutlu olurum.
AfterPost olayında dataset degişkeninden alabilirsin (DataSet: TDataSet)

Kod: Tümünü seç

procedure TData.alim_tbAfterPost(DataSet: TDataSet);
var eklenecek, Eski:integer;
begin
eklenecek:= DataSet.FieldByName('prof_mik').Asinteger;
eski:=hammadde_tb.FieldByName('miktar').Asinteger;
hammadde_tb.edit;//guncelleme icin ac
hammadde_tb.FieldByName('miktar').Asinteger:= eklenecek + Eski;//uygula
hammadde_tb.post;//kaydet
End;
degişkenler olmadan bu sekilde de olur.

Kod: Tümünü seç

procedure TData.alim_tbAfterPost(DataSet: TDataSet);
begin
hammadde_tb.edit;//guncelleme icin ac
hammadde_tb.FieldByName('miktar').Asinteger := DataSet.FieldByName('prof_mik').Asinteger + hammadde_tb.FieldByName('miktar').Asinteger; //uygula
hammadde_tb.post;//kaydet
End;
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

yardımlarınız için teşekkür ederim uygulama ilk kayıtı yaparken (accses violation at adres .......in module emba.exe.raed of adres 000000) diye hata vererek kaydetmiyor fakat tamam deyip geçince 2. ve sonraki işlemlerde problemsiz çalışıyor acaba bi yerde mantık hatasımı yaptım fakat oyle bir durumda neden sadece ilk seferde hata versin ingilizcem olmadıgı için çözemiyorum hatayı belliki siz konuya aşinasınız sizce neden böyle bi hata verebilir.donanımsalmı veya delphi yi kurarken bi hata yaptımda ondanmı acaba...
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

hatanın bir cok sebebi olabilir hata (tanımlanan bir değişkenin veya bir nesnenin çalışma esnasında bulunamaması)
hatayı hangi satırda aldıgını tespit et forumda hata bulma ile ilgili bir cok yazı mevcut.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

sorunu bulamassan
.pas ve .dfm deki kodları buraya ac bir bakalım
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

unit anafrmunit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, Menus;

type
Tanafrm = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Image1: TImage;
Image2: TImage;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Label3: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
anafrm: Tanafrm;

implementation

uses personelunit, bayiunit, imalatunit, satisunit, alimunit, urununit,
hammaddeunit, urunstokunit;

{$R *.dfm}



procedure Tanafrm.Timer1Timer(Sender: TObject);
begin
label1.caption:='TARIH '+datetostr(date);
label2.Caption:='SAAT '+timetostr(time);
end;

procedure Tanafrm.FormShow(Sender: TObject);
begin
bayifrm.ManualDock(panel1);
bayifrm.Visible := false;

personelfrm.ManualDock(panel1);
personelfrm.Visible := false;

imalatfrm.ManualDock(panel1);
imalatfrm.Visible:=false;

satisfrm.manualDock(panel1);
satisfrm.visible:=false;

alimfrm.manualDock(panel1);
alimfrm.visible:=false;

urunfrm.manualDock(panel1);
urunfrm.visible:=false;

hammaddefrm.manualDock(panel1);
hammaddefrm.visible:=false;

urunstokfrm.manualDock(panel1);
urunstokfrm.visible:=false;

label3.Caption:='';
end;

procedure Tanafrm.Button1Click(Sender: TObject);
begin
personelfrm.Visible := true;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:=false;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='PERSONEL';
end;

procedure Tanafrm.Button2Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := true;
imalatfrm.visible := false;
satisfrm.visible:=false;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='BAYİ';
end;

procedure Tanafrm.Button5Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := true;
satisfrm.visible:=false;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='İMALAT';
end;


procedure Tanafrm.Button4Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:= true;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='SATIŞ';
end;

procedure Tanafrm.Button3Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:= false;
alimfrm.visible:=true;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='ALIM';
end;

procedure Tanafrm.Button6Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:= false;
alimfrm.visible:=false;
urunfrm.visible:=true;
hammaddefrm.visible:=false;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='ÜRÜN';
end;

procedure Tanafrm.Button7Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:= false;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=true;
urunstokfrm.visible:=false;
label3.Caption:='';
label3.Caption:='HAMMADDE';
end;

procedure Tanafrm.Button8Click(Sender: TObject);
begin
personelfrm.Visible := false;
bayifrm.Visible := false;
imalatfrm.visible := false;
satisfrm.visible:= false;
alimfrm.visible:=false;
urunfrm.visible:=false;
hammaddefrm.visible:=false;
urunstokfrm.visible:=true;
label3.Caption:='';
label3.Caption:='ÜRÜN STOK';
end;

end.


izledigim mantık bir form kapanmadan önce veri tabanı baglantısının kesilmesi acısın yanlış mı sizce

aslında başta hepsi panele gömülerek tıklanan buttuna göre visible özelliklerinin true veya false olması n dan dogan bir sorun mu acaba
eger bundan olursa çözümü nedir . diger formların unitlerinde sadece formun on close olayında ado table ını kapatması veya onshow edilince acması var sizce mantıksal hata buradamı
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

visible özelligi false olan bir bilişene işlem yaparsan hata verir. muhtemelen hata burdan kaynaklanıyor.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
sftware42
Üye
Mesajlar: 7
Kayıt: 02 May 2009 01:38

Re: kayıtların etkileme durumu yardım

Mesaj gönderen sftware42 »

evet üstat sorun tamda buradan kaynaklanıyormuş çözüm yöntemi olarak alım butonuna tıklanınca alım ve hammadde formlarının ikisini yan yana panele gömmek oldu sorunsuz çalışıyor yardımlarınız için minettarım kolay gelsin...
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: kayıtların etkileme durumu yardım

Mesaj gönderen abdulkadir »

sevindim
basarılar...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla