Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Biten ürünler
#1
serlamın aleyküm arkadaşalar;

Stokta ürün yoksa ürün satış listesine eklenmiyor ve kullanıcıya uyarı veriyorum (Ürün stokta bitti) diye,
ancak ürün stokta olmasına rağmen hem satış listesine eklenip (Ürün stokta bitti) uyarısı yine devreye giriyor kodlamada sorunda yok anlayamadım.
yardımlarınızı rica ederim.


      Close;
      SQL.Clear;
      SQL.Add('Select * From URUNLER Where ADET>:AD And BARKOD=:BR');
      ParamByName('AD').AsInteger := 0;
      ParamByName('BR').AsString := SatisBarkod.Text;
      Prepared := True;
      Open;
      if Not IsEmpty then
      begin
        ID := FieldByName('ID').AsInteger;
        BR := FieldByName('BARKOD').AsString;
        UR := FieldByName('URUN').AsString;
        MD := FieldByName('MODEL').AsString;
        ST := FieldByName('SATIS').AsString;
        AD := StrToInt('1');
        US := FieldByName('SATIS').AsString;
        SatisOnay(ID, BR, UR, MD, ST, AD, US);
      end
      else
      begin
             Mesaj('Ürün stokta bitti       ', 3);
      end;

Cevapla
#2
IsEmpty kullanmak yerine Query1.recordcount<>0 şeklinde kullansanız daha iyi olmaz mı?
Ben sanki sorunu o sebepten zannediyorum.

Yani Şöyle :

     Close;
     SQL.Clear;
     SQL.Add('Select * From URUNLER Where ADET>:AD And BARKOD=:BR');
     ParamByName('AD').AsInteger := 0;
     ParamByName('BR').AsString := SatisBarkod.Text;
     Prepared := True;
     Open;
     if Query1.Recordcount<>0 then
     begin
       ID := FieldByName('ID').AsInteger;
       BR := FieldByName('BARKOD').AsString;
       UR := FieldByName('URUN').AsString;
       MD := FieldByName('MODEL').AsString;
       ST := FieldByName('SATIS').AsString;
       AD := StrToInt('1');
       US := FieldByName('SATIS').AsString;
       SatisOnay(ID, BR, UR, MD, ST, AD, US);
     end
     else
     begin
            Mesaj('Ürün stokta bitti       ', 3);
     end;


Ek olarak, görünüşe göre barkod hanesini string olarak tutuyorsun. Bu durumda Sorgu içinde SELECT * FROM URUNLER sorgusunda ADET için bir sıkıntı yok BARKOD değerinin kesme işaretleri arasında olması gerekir.

Örnek ile göstereyim : SELECT * FROM URUNLER WHERE ADET>0 and BARKOD='86912440'

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#3
if bloğunu buraya yazarken hata olmadıysa, sorun SatisOnay procedure'ünde olabilir.
SatisOnay procedure kodlarını paylaşmanız mümkün mü?
Cevapla
#4
Ben string degerindeki aramaları like ile yapıyorum böyle bir durumda benim izleyeceğim yol şu olur;
1. si istediğim barkoddaki ürün geliyormu ? tek koşul verir ve sadece barkodu sorgulatırım
geldi ise
miktar koşulunu eklerim
yine gelirse
denildiği gibi emtyp yerine recourd count kullanırım yalnız önce like ile sorgulatmanı öneririm.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#5
(15-06-2017, Saat: 16:04)meko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olif bloğunu buraya yazarken hata olmadıysa, sorun SatisOnay procedure'ünde olabilir.
SatisOnay procedure kodlarını paylaşmanız mümkün mü?

Satış onay prosedürü zaten ilk if bloğunun içinde çalışıyor. Problem, if bloğundan sonra else kısmındaki kodun da çalışması. Bunu da recordcount üzerinden daha doğru değerlendirebilir.

(15-06-2017, Saat: 16:10)boreas Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBen string degerindeki aramaları like ile yapıyorum böyle bir durumda benim izleyeceğim yol şu olur;
1. si istediğim barkoddaki ürün geliyormu ? tek koşul verir ve sadece barkodu sorgulatırım
geldi ise
miktar koşulunu eklerim
yine gelirse
denildiği gibi emtyp yerine recourd count kullanırım yalnız önce like ile sorgulatmanı öneririm.

LIKE ile sorgulama yapabilmesi için, mesela ÜRÜN ADI'ndan falan sorgulama yapması lazım. O da bir çok üründeki isim benzerliğinden dolayı yanıltıcı olur. BARKOD kodunda zaten LIKE yapması anlamsız olur çünkü barkodların çoğunun ilk 5-6 hanesi aynı olur. (Ülke kodu, firma kodu ve ürün kodu diye ilerler)

Arkadaşımız Adet ve Barkod sorgulamış. Bu alanlarda LIKE kullanmak yanıltıcı olabilir. Yıllarca çok satılan bir market otomasyon sistemini yazdığım için çok rahat söyleyebiliyorum. Çok uzun süre barkodlar ve stok kodları ile uğraştım.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#6
eğer if bloğunu düzgün aktardıysa, koşul kontrolünden kaynaklanan bir sorun değil,
kendi ifadesine göre hem if kısmı çalışıyor hem else kısmı sizce böyle bişi mümkün mü Smile
muhtemelen SatisOnay procedure içinde tekrar stok kontrolü yapıyor olabilir
Cevapla
#7
(15-06-2017, Saat: 16:16)meko Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Oleğer if bloğunu düzgün aktardıysa, koşul kontrolünden kaynaklanan bir sorun değil,
kendi ifadesine göre, hem if kısmı çalışıyor hem else kısmı

Haklısınız, bende ondan bahsettim. Eğer IF koşulu doğru sonuç döndürürse, ELSE bloğu zaten çalışmaz. Arkadaşın çalışıyor dediği kısım ELSE kısmında. Verisetinde IsEmpty kullanmasından kaynaklı yanlış çalışıyor olabilir. IsEmpty fonksiyonu başka yerlerde daha kullanışlı. String kontrollerinde vs. daha iyi kullanılır.

En iyisi arkadaşın recordcount kullanarak bir test yapması. Sonucu da buraya yazarsa hepimiz öğrenmiş oluruz.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#8
arkadaşın ifadesine göre hem satış yapıyor hen de stok bitti uyarısı veriyor
if kısmı satışın yapıldığı yer else kısmı ise uyarı kısmı
yani hem if çalışıyor hem else kısmı
sanırım koşulun test yöntemine takılan arkadaşlar, stok var ama uyarı veriyor diye algıladılar.
Cevapla
#9
@ramazan_t like ile dediğine kesinlikle katılıyorum ama firebird kullanmaktayım "=" ile string sorgularda sorun yaşayabiliyorum hatta bazı sorgularda like "=" den daha hızlı dahi çalışıyor. Ama sonuçta sorun farklı zaten
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#10
(15-06-2017, Saat: 16:34)boreas Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol@ramazan_t like ile dediğine kesinlikle katılıyorum ama firebird kullanmaktayım "=" ile string sorgularda sorun yaşayabiliyorum hatta bazı sorgularda like "=" den daha hızlı dahi çalışıyor. Ama sonuçta sorun farklı zaten

Evet, bende Firebird kullanıyorum. Haklısınız.

Şöyle, Integer (rakamsal) verileri sorgularken "=" kullanmak en doğrusu. Mesela yukarıdaki sorguda, ADET=5 gibi sorgulayabilirsin. Çünkü net bir ifade.

String ifadelerde "=" kullandığın zaman, tam ifadeyi bilmen lazım. Yani atıyorum bir müşteri ünvanına göre sorgulama yapıyorsan UNVAN="AHMET MEHMET SAN.TİC.LTD.ŞTİ." şeklinde boşluğuna kadar doğru yazman gerekir ki aynısını bulabilesin. Böyle durumlarda ya müşterinin ID'sinden bulacaksın, ya da senin yaptığın gibi LIKE kullanarak UNVAN LIKE 'AHMET%' şeklinde sorgulatıp dönen değerlerden seçtireceksin.

Arkadaşın sıkıntısı başka, hem IF hem de ELSE çalışıyor ama problem sorgudan kaynaklı değil.

İlginiz için teşekkür ederim.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi