
Allah kimseyi karanlıkta bırakmasın bırakanlara da sizin gibi dost sahibi olsun ki korkmasın
Ben hallettiğimde buraya detaylı olarak yazarım. O zaman inşalla önerilerinizi söylersiniz.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, Grids, DBGrids, ZUpdateSql, ZQuery,
ZMySqlQuery, ZTransact, ZMySqlTr, ZConnect, ZMySqlCon;
type
TForm1 = class(TForm)
ZMySqlDatabase1: TZMySqlDatabase;
ZMySqlTransact1: TZMySqlTransact;
carikarti: TZMySqlQuery;
cariharketsource: TDataSource;
carisource: TDataSource;
DBGrid1: TDBGrid;
carikarticarikod: TStringField;
BitBtn1: TBitBtn;
Edit1: TEdit;
carihareket: TZMySqlTable;
carihareketsanaltutar: TFloatField;
cariharekettutar: TFloatField;
carihareketborc: TFloatField;
carihareketalacak: TFloatField;
carihareketcarikod: TStringField;
carihareketId: TIntegerField;
cariharekettarih: TDateField;
a: TZMySqlQuery;
procedure BitBtn1Click(Sender: TObject);
procedure carihareketCalcFields(DataSet: TDataSet);
procedure carihareketBeforePost(DataSet: TDataSet);
procedure carihareketBeforeInsert(DataSet: TDataSet);
procedure carihareketBeforeEdit(DataSet: TDataSet);
procedure carihareketAfterPost(DataSet: TDataSet);
procedure carihareketBeforeDelete(DataSet: TDataSet);
procedure carihareketAfterDelete(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
id:integer;
guncel,eskiborc,eskialacak:double;
eklecikar,durum:string;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
carikarti.Sql.text:='select carikod FROM carikarti where carikod=:a';
carikarti.Params[0].AsString:=edit1.Text;
carikarti.Open;
if not(carikarti.IsEmpty) then
carihareket.Active:=true;
end;
procedure TForm1.carihareketCalcFields(DataSet: TDataSet);
begin
carihareketsanaltutar.asfloat:=carihareket.fieldbyname('borc').asfloat-
carihareket.fieldbyname('alacak').asfloat;
end;
procedure TForm1.carihareketBeforePost(DataSet: TDataSet);
begin
if (id<>0) and (durum='E') then //edit durumunda ise
begin
a.Sql.Text:='select sum(borc)-sum(alacak) from carihareket where carikod=:ck and id<=:id';
a.Params[0].asstring:=edit1.Text;
a.Params[1].AsInteger:=id-1; //Edit edilmiş satırdan önceki satıra kadar bakiyeyi bulur.
a.Open;
//Hangi sutun içerisinde değişiklik yapıldı ise ona göre işlem yapıyor.
if carihareketborc.asfloat<>0 then
begin
carihareket.FieldByName('tutar').AsFloat:=(a.Fields[0].AsFloat+carihareketsanaltutar.AsFloat);
guncel:=carihareketborc.AsFloat-eskiborc;
if carihareketborc.asfloat>eskiborc then
eklecikar:='+' else eklecikar:='-';
end else
begin
carihareket.FieldByName('tutar').AsFloat:=(a.Fields[0].AsFloat+carihareketsanaltutar.AsFloat);
guncel:=carihareketalacak.AsFloat-eskialacak;
if carihareketalacak.asfloat>eskialacak then
eklecikar:='-' else eklecikar:='+';
end;
//edit yapılmış kayıttan sonraki kayıtları güncelleştiriyor
if eklecikar='+' then //Edit edilmiş sutundaki değer azaldımı arttımı kontrolü.Buna göre tutar artar yada azalır.
a.Sql.Text:='UPDATE carihareket SET tutar=tutar+:VF where carikod=:cd and id>:A'
else
a.Sql.Text:='UPDATE carihareket SET tutar=tutar-:VD where carikod=:cd and id>:D';
a.Params[0].AsFloat:=abs(guncel);
a.Params[1].AsString:=edit1.Text;
a.Params[2].AsInteger:=id;
a.ExecSql;
eskiborc:=0; //Edit edilmiş değerler eski haline getiriliyor.
eskialacak:=0;
durum:='H';
end else //Edit durumunda değil ise aşağıdakilerini yapar
begin
if id=0 then //Bilgi girişi yapılan satır ilk satır ise
begin
carihareket.FieldByName('tutar').AsFloat:=carihareketsanaltutar.AsFloat;
exit;
end;
a.Sql.Text:='select sum(borc)-sum(alacak) from carihareket where carikod=:ck and id<=:id';
a.Params[0].asstring:=edit1.Text;
a.Params[1].AsInteger:=id;
a.Open;
carihareket.FieldByName('tutar').AsFloat:=a.Fields[0].AsFloat+carihareketsanaltutar.AsFloat;
end;
end;
procedure TForm1.carihareketBeforeInsert(DataSet: TDataSet);
begin
id:=carihareket.fieldbyname('id').AsInteger;
end;
procedure TForm1.carihareketBeforeEdit(DataSet: TDataSet);
begin
id:=carihareketid.AsInteger; //Bu değişkenler edit olduğunda..
eskiborc:=carihareketborc.asfloat;
eskialacak:=carihareketalacak.asfloat;
Durum:='E';
end;
procedure TForm1.carihareketAfterPost(DataSet: TDataSet);
begin
carihareket.Refresh;
end;
procedure TForm1.carihareketBeforeDelete(DataSet: TDataSet);
begin
id:=carihareketid.AsInteger;
Durum:='E';
if (carihareketid.AsInteger<>0) and (durum='E') then //Kayıt silinecek durumunda ise
begin
if carihareketborc.asfloat<>0 then
begin
guncel:=carihareketborc.AsFloat;
eklecikar:='-';
end
else
begin
guncel:=carihareketalacak.AsFloat;
eklecikar:='+';
end;
//silinen kayıttan sonraki kayıtları güncelleştiriyor
if eklecikar='-' then
a.Sql.Text:='UPDATE carihareket SET tutar=tutar-:VD where (carikod=:cd and id>:D)'
else
a.Sql.Text:='UPDATE carihareket SET tutar=tutar+:VD where (carikod=:cd and id>:D)';
a.Params[0].AsFloat:=abs(guncel);
a.Params[1].AsString:=edit1.Text;
a.Params[2].AsInteger:=id;
a.ExecSql;
end;
guncel:=0;
durum:='H';
end;
procedure TForm1.carihareketAfterDelete(DataSet: TDataSet);
begin
carihareket.Refresh;
end;
end.