Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kaç adet var
#1
Selam. Database ve listview de ki ürün numaraları tutuyorsa ve bu ürün 'SU KAYAĞI' ise her birini toplamda kaç tane olduğunu nasıl bulabilirim?

Örnek:
2 ŞAMREL
3 SU KAYAĞI
3 SU KAYAĞI
3 SU KAYAĞI ----> TOPLAM 3 ADET
4 MİSİNA
4 MİSİNA
5 SU KAYAĞI
5 SU KAYAĞI
5 SU KAYAĞI
5 SU KAYAĞI
5 SU KAYAĞI
5 SU KAYAĞI----> TOPLAM 6 ADET


procedure TForm6.AdetleriGir(Sender: TObject);
var
  R, HBSay: Integer;
begin
  HBSay := 0;
  With QPLNew, STList do
  begin
    for R := 0 to Items.Count - 1 do
    begin
      Connection := PLConnection;
      Close;
      SQL.Clear;
      SQL.Add('Select * From FIRMALAR');
      SQL.Add('Where URUNNO=:KN');
      ParamByName('KN').AsString := Items[R].SubItems[1];
      Prepared := True;
      Open;
      Items.BeginUpdate;
      try
        if (Pos(FieldByName('URUNNO').AsString, Items[R].SubItems[1]) > 0) and
          (Pos(FieldByName('URUN').AsString, 'SU KAYAĞI') > 0) then
        begin
          inc(HBSay);
          Items[R].SubItems[2] := IntToStr(HBSay) + ' Adet var';
        end;
      finally
        Items.EndUpdate;
      end;
    end;
  end;
end;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol rollup işini görür kanımca.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#3
Merhaba,
Kullanmış olduğunuz; döngü, db bağlantıları (ve SQL işlemleri), bir nesne üzerindeki kayıtların tümden kontrolü ve bu kayıtlardaki birden fazla pos işlemleri, işlem hızınızı oldukça düşürecektir. 
Bu açıklamadan sonra yönteminizin yanlış olduğu kanısına varmanızı istemem. 
Algoritma tamamen matematik kuralları gibidir; sonuca giden birden fazla yöntem vardır. Kimi A, kimi B, kimi de X yöntemini kullanarak sonuca gider. Çıktı hep aynı olur.
Bu kapsamda farkı bir yöntem önerim olacak;
URUNNO ve ListView'de listelemiş olduğunuz Ürün No, Ürün Adı alanları veri tabanından alındığına göre; bu karşılaştırmayı veri tabanına (sunucu işlemlerine) bırakmanız daha doğru olacaktır. 
FIRMALAR tablonuzda bulunan URUNNO alanını, mevcut ürün listeleme tablonuzdaki (ListView'de göstermiş olduğunuz kayıtlar) ID ile gruplayarak, eşleştirmeniz yeterli olacaktır. 
Bu durumda asıl tablonuzda aynı üründen kaç adet olduğunu tek bir SQL cümlesi ile raporlayabilir, yalnızca bu sonucu ListViewe'de listeleyerek, bir çok işlem adımından kurtulabilirsiniz.
Veri tabanı tablo yapınızı bilmediğimden; mevcut durumu dahada detaylandırıp, konuyu daha iyi kavramanızı sağlayacak bir senaryo ile örneklendirmek istiyorum.

Veri tabanı yapısı:
Tablolar: KASA ve KOD_ISLEM_GRUBU

2017-01-23_08-57-10.png

2017-01-23_08-59-53.png

KASA tablomda bulunan tekrarlı bir çok kayıt olduğunu ve bu tekrarlı kayıtların KOD_ISLEM_GRUBU tablosunda tanımlı olması şartı ile kaç adet oldukları ile birlikte listelenmesini istiyorum.
Bunun için bir SQL cümlesi yetecektir.

SELECT COUNT(ACK) AS ADET, ACK FROM KASA
WHERE ISLEM_GRUBU_ID IN (SELECT ID FROM KOD_ISLEM_GRUBU )
GROUP BY ACK

Sonuç:
2017-01-23_09-00-11.png
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Merhaba;

Tavsiye üzerine "Select Count(*)" ile işleme devam edeceğim; fakat öncesinde ürünün adını ve ürünün numarasını aşağıdaki kodlarla almak istediğimde 'SU KAYAĞI' dışında araya faklı ürünlerinde bilgisi giriyor, acaba kodlamada nerede hata yapıyorum?


var
  HB: String;
begin
With QPLNew, STList do
  begin
    Connection := PLConnection;
    Close;
    SQL.Clear;
    SQL.Add('Select * From FIRMALAR');
    Prepared := True;
    Open;
    while Not EOF do
    begin
      HB := Copy(FieldByName('URUN').AsString, 2, 14);
      Next;
      if Pos(HB, 'SU KAYAĞI') > 0 then
      begin
        Memo2.Lines.Add(FieldByName('URUN').AsString); // test için şimdilik memoya aktarıyorum
        Memo1.Lines.Add(HB + ' ' + FieldByName('URUNNO').AsString);
      end;
    end;
  end;
end;
Hayat bazen güzel olabiliyor.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  İzin verilen adet kadar Dostk 16 1.467 06-06-2017, Saat: 20:49
Son Yorum: Dostk



Konuyu Okuyanlar: 1 Ziyaretçi