Update işlemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 04:26
Konum: istanbul

Update işlemi

Mesaj gönderen ahmethakan » 21 Şub 2006 04:22

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

Kod: Tümünü seç

        
        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;

mkysoft
Kıdemli Üye
Mesajlar: 2997
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Mesaj gönderen mkysoft » 22 Şub 2006 09:36

Kod: Tümünü seç

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.

Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 04:26
Konum: istanbul

Satiş delete Stoga iade

Mesaj gönderen ahmethakan » 22 Şub 2006 10:55

Arkadaşlar aşagıdaki kod çalışmıyor nasıl çalışır...

Kod: Tümünü seç


With ADOQuery1 Do
    Begin
      With SQL Do
        Begin
          Clear;
           Add('UPDATE StokTablosu SET Cikan=Cikan+''' + DBEdit1.Text +
            ''' Where StokKodu=''' + Edit5.Text + '''');
          ExecSQL;
        End;
    End;

aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 03:08

Mesaj gönderen aLonE CoDeR » 22 Şub 2006 11:08

İlginçsiniz ne diyim :roll:

@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..

Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 04:26
Konum: istanbul

Mesaj gönderen ahmethakan » 22 Şub 2006 11:30

Kod: Tümünü seç

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

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri » 22 Şub 2006 11:48

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

Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 04:26
Konum: istanbul

Mesaj gönderen ahmethakan » 22 Şub 2006 12:03

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;

Kod: Tümünü seç

Project Satis.exe raised excption class EOleException with message 'Incorrect systax near the keyword "Where", ocess stopped. Use Step or Run to continue.

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 22 Şub 2006 12:56

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?

viewtopic.php?t=644&highlight=

Ordaki örnek kod:

Kod: Tümünü seç

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
  

Sizin istediğiniz kod:

Kod: Tümünü seç

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.

Kullanıcı avatarı
ahmethakan
Üye
Mesajlar: 30
Kayıt: 03 Eki 2005 04:26
Konum: istanbul

Mesaj gönderen ahmethakan » 22 Şub 2006 02:54

Kod: Tümünü seç

Naile hanım çok teşekkür ederim..
Allah bu dünyada 30 Öbür dünyada 70 Sıkıntınız Gidersin..
:D

Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 09:11

Mesaj gönderen naile » 22 Şub 2006 03:10

Birşey değil, ecmain :)

Cevapla