ms sql server update

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
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

ms sql server update

Mesaj gönderen ademcicek »

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..
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

trigger ile yapmanız cok daha uygun olur....
ilgili tablonun update trigger'inda

Kod: Tümünü seç

if old.malzeme<>new.malzeme then
  update .......
seklinde gerekli kontrollerle yapacagınız update islemi cok daha saglıklı olacak ve hızlı calışacaktır.
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Ms SQL de Update

Mesaj gönderen ademcicek »

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
Cevapla