Arkadaşlar StokTablosu ve SatisTablosu isimli iki tablom var
SatisTablosu'ndan kayıt sildiğimde silinen miktarı StokTablosu'na geri iade etmek istiyorum şu şekilde kod yazdım hata vermiyor fakat işlemde yapmıyor yardım edermisiniz
With ADOQuery1 Do
Begin
With SQL Do
Begin
Clear;
Add('UPDATE StokTablosu SET Mevcut=Mevcut+ h2.Miktar FROM StokTablosu h1,SatisTablosu h2 WHERE h1.StokKodu = h2.StokKodu');
ExecSQL;
End;
End;
UPDATE StokTablosu h1 SET Mevcut=Mevcut+ (Select h2.Miktar FROM SatisTablosu h2 WHERE h2.StokKodu = h1.StokKodu)
şeklinde olsa daha kolay olur sanırım. Bu şekilde toplama çıkarma yoluyla stok hesaplamak yerine neden herseferinde satis tablosu toplamından giris tablosu toplamını çıkarmıyorsun?
Kullanığın bir text veri tabanı değilse tabi.
With ADOQuery1 Do
Begin
With SQL Do
Begin
Clear;
Add('UPDATE StokTablosu SET Cikan=Cikan+''' + DBEdit1.Text +
''' Where StokKodu=''' + Edit5.Text + '''');
ExecSQL;
End;
End;
@mkysoft kodları düzenlemiş, olması gerekeni yazmış..Daha da öteye gitmiş kullanılması gereken asıl yöntemi de belirtmiş.Verilen cevaba saygı göstermek lazım..
Ne yapmak istediğimi anlatamadım galiba..
yapmak istediğim salt bir toplama çıkarma değil.
1. satış tablosundan satılan ürünü silmek.
2. satış tablosundan silinen kaydın miktarını stok tablosunda ki mevcuduna eklemek.
3. yapmak istemediğim şey! satis tablosu toplamından giris tablosu toplamını çıkarmak..
1. ve 2. maddelerin nasıl yapıldığını öğrenmek istiyorum..
Teşekkürler
s.a.
enson gönderdiğiniz kod için;
edit1.text i falza tırnak içine alımışsınz. cikan=cikan+'5' gibim bişey oluyor.
parametre kullanarak yapmayı deneyin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Sayın aslangeri dediğini yaptım aşagıdaki hata mesajını verdi bunun yapılabilmesi için gerekli kodu yazabilirmisiniz biçok alternatif denedim bi türlü olmadı vt tarafından sp ve trigger ile yapmayı deneyeceğim fakat o konuda tecrübelideğilim vt olarak ms sql 2000 kullanıyorum Fahrettin beyin örnegi çok güzel ama ms sql de çalışmıyor... o örnegi ms sql e çevirecek bi yiğit aramızda yokmu
With ADOQuery1 Do
Begin
With SQL Do
Begin
Clear;
Add('UPDATE StokTablosu SET Cikan=Cikan+' + DBEdit1.Text +
' Where StokKodu=''' + Edit5.Text + '''');
ExecSQL;
End;
End;
End;
Project Satis.exe raised excption class EOleException with message 'Incorrect systax near the keyword "Where", ocess stopped. Use Step or Run to continue.
ahmethakan yazdı: Fahrettin beyin örnegi çok güzel ama ms sql de çalışmıyor... o örnegi ms sql e çevirecek bi yiğit aramızda yokmu
With ADOQuery1 Do
Begin
With SQL Do
Begin
Clear;
Add('UPDATE StokTablosu SET Cikan=Cikan+' + DBEdit1.Text +
' Where StokKodu=''' + Edit5.Text + '''');
ExecSQL;
End;
End;
End;
Fahrettin abinin mesajına ben ms sql serverda yapılmış örnek eklemiştim, çalışan bir kodu kendinize göre değiştirmeyi neden denemiyorsunuz?
CREATE TRIGGER DELETE_SICIL ON dbo.SICIL FOR DELETE AS
BEGIN
DECLARE @ISYERI VARCHAR(8)
DECLARE @SICILNO VARCHAR(15)
DECLARE SILINENLER CURSOR FOR SELECT ISYERI,SICILNO FROM DELETED
OPEN SILINENLER
FETCH NEXT FROM SILINENLER INTO @ISYERI, @SICILNO
WHILE @@FETCH_STATUS <> -1
BEGIN
DELETE FROM SICILEK WHERE ISYERI=@ISYERI AND SICILNO=@SICILNO
FETCH NEXT FROM SILINENLER INTO @ISYERI, @SICILNO
END
CLOSE SILINENLER
DEALLOCATE SILINENLER
END
CREATE TRIGGER DELETE_SATIS ON dbo.SATISTABLOSU FOR DELETE AS
BEGIN
DECLARE @STOKKODU VARCHAR(8)
DECLARE @MIKTAR INT
DECLARE SILINENLER CURSOR FOR SELECT STOKKODU,MIKTAR FROM DELETED
OPEN SILINENLER
FETCH NEXT FROM SILINENLER INTO @STOKKODU, @MIKTAR
WHILE @@FETCH_STATUS <> -1
BEGIN
UPDATE STOKTABLOSU SET CIKAN=CIKAN+@MIKTAR
WHERE STOKKODU=@STOKKODU
FETCH NEXT FROM SILINENLER INTO @STOKKODU, @MIKTAR
END
CLOSE SILINENLER
DEALLOCATE SILINENLER
END
Dahası sizin yazdığınız kod syntax olarak doğru gibi görünüyor ama gönderdiğiniz değerlerden solayı bir sıkıntı oluyor zannımca mesela DBEdit1.Text den boş değer gelmesi sonucu oluşacak yanlışlık gibi. Bu tür durumlarda tavsiyem program çalışma esnasında open yapmadan önce dönen sql.text ini bir memoya veya showmessage ile alıp bakmanız.