herkes kolay gelsin.
benim bir malzeme tablom var.birde proforma tablom.
kullanıcı malzeme tablosuna malzemeleri giriyor.proforma tablosunda dafirmaları belirleeyince 5 firma belrilemişse malzeme tablosundan malzemeleri alıyor(örnek 5 malzme olsun) ve proforma tablosuna 1 firma için 5 malzemeyi tek tek giriyor. yani 5 firma 5 malzeme olunca toplam 25 kayıt giriyor.ben malzeme tablosunda bir değişiklik olduğunda malzemenin adında veya birimde veya adetinde proforma tablosuna yansımasını istiyorum.ben bir sql yazdım ama şöyle bir sorun oluyor malzem tablosunda bir değişiklik olduğunda değişiklik olan kayıttaki maleme adını diğer kayıtlarada yazıyor.
with DataModule1 do
begin
ADOQuery_GenelSorgu.Close;
ADOQuery_GenelSorgu.Sql.Clear;
ADOQuery_GenelSorgu.Sql.Add('UPDATE proforma SET malzeme=:malzemeadi WHERE id=:id');
ADOQuery_GenelSorgu.Parameters.ParamByName('malzemeadi').Value := ADOQuery_Malzememalzeme.AsString;
ADOQuery_GenelSorgu.Parameters.ParamByName('id').Value := ADOQuery_Ihaleid.AsInteger;
ADOQuery_GenelSorgu.ExecSql;
end;
örnek:(değişmeden önce) malzeme tablosu
malzeme adı
elma
armut
kiraz
proformaya eklenen
firma adı
ondata elma
ondata armut
ondata kiraz
sanin elma
sanin armut
sanin kiraz
değiştikten sonra) malzeme tablosu
malzeme adı
elma1
armut
kiraz1
proformaya değiştikten sonra olması gereken
firma adı
ondata elma1
ondata armut
ondata kiraz1
sanin elma1
sanin armut
sanin kiraz1
teşekür ederim..
ms sql server update
trigger ile yapmanız cok daha uygun olur....
ilgili tablonun update trigger'indaseklinde gerekli kontrollerle yapacagınız update islemi cok daha saglıklı olacak ve hızlı calışacaktır.
ilgili tablonun update trigger'inda
Kod: Tümünü seç
if old.malzeme<>new.malzeme then
update .......
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Ms SQL de Update
Sorunu aşağıdaki sql komutlarıyla çözdüm..
procedure TForm_Ihtiyac_Listesi.dxBarLargeButton_KaydetClick(
Sender: TObject);
var
EskiMalzemeAdi, YeniMalzemeAdi, YeniBirim: string;
YeniMiktar: Integer;
begin
with DataModule1 do
begin
ADOQuery_GenelSorgu.Close;
ADOQuery_GenelSorgu.SQL.Clear;
ADOQuery_GenelSorgu.SQL.Add('Select * from proforma where id=:id');
ADOQuery_GenelSorgu.Parameters.ParamByName('id').Value := ADOQuery_Ihaleid.AsInteger;
ADOQuery_GenelSorgu.Open;
if ADOQuery_GenelSorgu.RecordCount > 0 then
begin
EskiMalzemeAdi := DataModule1.ADOQuery_Malzememalzeme.OldValue;
DataModule1.ADOQuery_Malzeme.Post;
YeniMalzemeAdi := DataModule1.ADOQuery_Malzememalzeme.AsString;
YeniBirim := DataModule1.ADOQuery_Malzemebirim.AsString;
YeniMiktar := DataModule1.ADOQuery_Malzememiktar.AsInteger;
with TADOQuery.Create(Self) do
begin
Connection := DataModule1.ADOConnection_Baglanti;
// Malzeme adı, birim ve miktarları değiştir
SQL.Text := 'UPDATE proforma SET malzeme =:YeniMalzemeAdi, birim =:YeniBirim, miktar =:YeniMiktar WHERE malzeme =:EskiMalzemeAdi AND id =:id';
Parameters.ParamByName('YeniMalzemeAdi').Value := YeniMalzemeAdi;
Parameters.ParamByName('YeniBirim').Value := YeniBirim;
Parameters.ParamByName('YeniMiktar').Value := YeniMiktar;
Parameters.ParamByName('EskiMalzemeAdi').Value := EskiMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Null olmayan tutarları yeniden hesapla
SQL.Text := 'UPDATE proforma SET fiyat = miktar * birim_fiyat WHERE miktar IS NOT NULL AND birim_fiyat IS NOT NULL AND malzeme =:malzeme AND id =:id';
Parameters.ParamByName('malzeme').Value := YeniMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Fiyat Araştırma Malzeme adı, birim ve miktarları değiştir
SQL.Text := 'UPDATE Piyasa_Fiyat_Arastirmasi SET malzeme_adi =:YeniMalzemeAdi, birimi =:YeniBirim, miktar =:YeniMiktar WHERE malzeme_adi =:EskiMalzemeAdi AND id =:id';
Parameters.ParamByName('YeniMalzemeAdi').Value := YeniMalzemeAdi;
Parameters.ParamByName('YeniBirim').Value := YeniBirim;
Parameters.ParamByName('YeniMiktar').Value := YeniMiktar;
Parameters.ParamByName('EskiMalzemeAdi').Value := EskiMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Null olmayan tutarları yeniden hesapla
SQL.Text := 'UPDATE Piyasa_Fiyat_Arastirmasi SET tutar = miktar * birim_fiyat WHERE miktar IS NOT NULL AND birim_fiyat IS NOT NULL AND malzeme_adi =:malzeme AND id =:id';
Parameters.ParamByName('malzeme').Value := YeniMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
Free;
end;
end
else
ADOQuery_Malzeme.Post;
end;
end;
teşekür ederim
procedure TForm_Ihtiyac_Listesi.dxBarLargeButton_KaydetClick(
Sender: TObject);
var
EskiMalzemeAdi, YeniMalzemeAdi, YeniBirim: string;
YeniMiktar: Integer;
begin
with DataModule1 do
begin
ADOQuery_GenelSorgu.Close;
ADOQuery_GenelSorgu.SQL.Clear;
ADOQuery_GenelSorgu.SQL.Add('Select * from proforma where id=:id');
ADOQuery_GenelSorgu.Parameters.ParamByName('id').Value := ADOQuery_Ihaleid.AsInteger;
ADOQuery_GenelSorgu.Open;
if ADOQuery_GenelSorgu.RecordCount > 0 then
begin
EskiMalzemeAdi := DataModule1.ADOQuery_Malzememalzeme.OldValue;
DataModule1.ADOQuery_Malzeme.Post;
YeniMalzemeAdi := DataModule1.ADOQuery_Malzememalzeme.AsString;
YeniBirim := DataModule1.ADOQuery_Malzemebirim.AsString;
YeniMiktar := DataModule1.ADOQuery_Malzememiktar.AsInteger;
with TADOQuery.Create(Self) do
begin
Connection := DataModule1.ADOConnection_Baglanti;
// Malzeme adı, birim ve miktarları değiştir
SQL.Text := 'UPDATE proforma SET malzeme =:YeniMalzemeAdi, birim =:YeniBirim, miktar =:YeniMiktar WHERE malzeme =:EskiMalzemeAdi AND id =:id';
Parameters.ParamByName('YeniMalzemeAdi').Value := YeniMalzemeAdi;
Parameters.ParamByName('YeniBirim').Value := YeniBirim;
Parameters.ParamByName('YeniMiktar').Value := YeniMiktar;
Parameters.ParamByName('EskiMalzemeAdi').Value := EskiMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Null olmayan tutarları yeniden hesapla
SQL.Text := 'UPDATE proforma SET fiyat = miktar * birim_fiyat WHERE miktar IS NOT NULL AND birim_fiyat IS NOT NULL AND malzeme =:malzeme AND id =:id';
Parameters.ParamByName('malzeme').Value := YeniMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Fiyat Araştırma Malzeme adı, birim ve miktarları değiştir
SQL.Text := 'UPDATE Piyasa_Fiyat_Arastirmasi SET malzeme_adi =:YeniMalzemeAdi, birimi =:YeniBirim, miktar =:YeniMiktar WHERE malzeme_adi =:EskiMalzemeAdi AND id =:id';
Parameters.ParamByName('YeniMalzemeAdi').Value := YeniMalzemeAdi;
Parameters.ParamByName('YeniBirim').Value := YeniBirim;
Parameters.ParamByName('YeniMiktar').Value := YeniMiktar;
Parameters.ParamByName('EskiMalzemeAdi').Value := EskiMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
// Null olmayan tutarları yeniden hesapla
SQL.Text := 'UPDATE Piyasa_Fiyat_Arastirmasi SET tutar = miktar * birim_fiyat WHERE miktar IS NOT NULL AND birim_fiyat IS NOT NULL AND malzeme_adi =:malzeme AND id =:id';
Parameters.ParamByName('malzeme').Value := YeniMalzemeAdi;
Parameters.ParamByName('id').Value := DataModule1.ADOQuery_Ihaleid.AsInteger;
ExecSQL;
Free;
end;
end
else
ADOQuery_Malzeme.Post;
end;
end;
teşekür ederim