Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
AdoQuery ile ilgili bir sorun. (Çözüldü)
#1
Herkese Merhabalar ; 

Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.

Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE"  olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365)  hatası aşıldığına dair hata veriyor nedenini bulamadım.

Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.


Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.

Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .

yZ7ZYp.jpeg
Not : Kodlar doğru değil sadece kullanacağım, aklıma gelen yöntem bu şekilde olduğu için, bunu vurgulamak adına anlatmaya çalıştım.

konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.
Cevapla
#2
(17-04-2024, Saat: 10:29)Bay_Y Adlı Kullanıcıdan Alıntı: Herkese Merhabalar ; 

Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.

Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE"  olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365)  hatası aşıldığına dair hata veriyor nedenini bulamadım.

Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.


Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.

Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .

yZ7q9N.jpeg


konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.

Merhabalar,

İlk gördüğüm,
Repeat
içerisinde neden
First;
kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.

Kolay gelsin
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
(17-04-2024, Saat: 10:35)hi_selamlar Adlı Kullanıcıdan Alıntı:
(17-04-2024, Saat: 10:29)Bay_Y Adlı Kullanıcıdan Alıntı: Herkese Merhabalar ; 

Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.

Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE"  olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365)  hatası aşıldığına dair hata veriyor nedenini bulamadım.

Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.


Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.

Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .

yZ7q9N.jpeg


konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.

Merhabalar,

İlk gördüğüm,
Repeat
içerisinde neden
First;
kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.

Kolay gelsin

merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı  , bunun dışında SQL cümlesi yok ,  buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.
Cevapla
#4
(17-04-2024, Saat: 10:42)Bay_Y Adlı Kullanıcıdan Alıntı:
(17-04-2024, Saat: 10:35)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,

İlk gördüğüm,
Repeat
içerisinde neden
First;
kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.

Kolay gelsin

merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı  , bunun dışında SQL cümlesi yok ,  buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.

Merhabalar,

Nacizane, bir yardımda bulunduğunuz da canlı kodları "Kod Bloğu" içinde paylaşmanız faydalı olacaktır.
Diğer türlü örnek kodlarınız üzerinden (benim gibi Smile ) yorumlar gelecek ve sonuca ulaşmanız uzun zaman alacaktır.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#5
(17-04-2024, Saat: 10:49)hi_selamlar Adlı Kullanıcıdan Alıntı:
(17-04-2024, Saat: 10:42)Bay_Y Adlı Kullanıcıdan Alıntı: merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı  , bunun dışında SQL cümlesi yok ,  buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.

Merhabalar,

Nacizane, bir yardımda bulunduğunuz da canlı kodları "Kod Bloğu" içinde paylaşmanız faydalı olacaktır.
Diğer türlü örnek kodlarınız üzerinden (benim gibi Smile ) yorumlar gelecek ve sonuca ulaşmanız uzun zaman alacaktır.

Kolay gelsin.

Çok haklısınız , bu konuda size tamamen katılıyorum , sorun şu ki henüz tamamlanmış bir kod yok sorunu görebilmem için aşağıda paylaşacağım kodu yazmam yetti


procedure satishareketleri_recete_kontrol(fisno, kod , birim: string ; fisadet, miktar : real);
Var sSQLs : String ;
begin
 sSQls := ' SELECT * FROM urunkarti_rec WITH (NOLOCK) WHERE reckod=' + Quotedstr(kod) ;
 SQlServerDb('R',Datalist.adoRecete,sSQLs);
 With Datalist.adoRecete do
 begin
   Datalist.adoRecete.First;
   repeat
     if Datalist.adoRecete.recordcount>0 then
       begin
         // Gelen kod reçeteye sahip

         satishareketleri_recete_kontrol( fisno,
                                          Datalist.adoRecete.FieldByName('kod').AsString ,
                                          Datalist.adoRecete.FieldByName('birim').AsString,
                                          fisadet,
                                          ifnull(Datalist.adoRecete.FieldByName('miktar').value,0) * Miktar
                                         );
       end else begin
         // reçetesi yok ona göre işle
          sSQL := ' INSERT INTO ' + tmpRecete + ' (fisno , reckod, kod, miktar , birim , fisadet, recadet ) ' +
                  ' VALUES ( ' + fisno + ',' +
                                 Quotedstr(kod)+',' +
                                 Quotedstr(Datalist.adoRecete.FieldByName('kod').AsString) +
                                 ',1,' +
                                 birim + ' ,'+
                                 ReplaceDot(FloatToStr(fisadet)) + ','+
                                 ReplaceDot(FloatToStr(miktar)) + ' )' ;
          SQlServerQ(sSQL);

       end;
     Datalist.adoRecete.Next;
   Until Datalist.adoRecete.Eof;
 end;

end;


Procedure satis_stok_isle(fisno:string);
Var sSQLs : String ;
begin
 sSQls := ' SELECT * FROM satishareketleri WITH (NOLOCK) WHERE fisno=' + fisno ;
 SQlServerDb('R',Datalist.adoSales,sSQLs);
 With Datalist.adoSales do
 begin
   if recordcount>0 then
   begin
      tmpRecete := tmpWh + 'recete_' + fisno ;
      tmpf_recete(tmpRecete);
   end else
   begin
      exit;
   end;

   First;
   repeat
     satishareketleri_recete_kontrol(fisno,
                                     FieldByName('kod').AsString ,
                                     FieldByName('birim').AsString,
                                     ifnull(FieldByName('miktar').Value,0),
                                     1
                                     );


     Next;
   Until eof;
 end;
end;



şimdilik kodda ufak bir değişiklik ile sorunum çözüldü, Başka birinin işine yarar diye buraya bı
şimdilik kodda ufak bir değişiklik ile sorunum çözüldü, Başka birinin işine yarar diye buraya brakıyorum.

[ars=delphi]

procedure satishareketleri_recete_kontrol(fisno, kod , birim: string ; fisadet, miktar : real);
Var sSQLs : String ;
   adoRec : TAdoQuery ;
begin
 adoRec := TAdoQuery.Create(nil);
 adoRec.Connection := datalist.cnROS ;
 With adoRec do begin
   Active   := False;
   sSQls    := ' SELECT * FROM urunkarti_rec WITH (NOLOCK) WHERE reckod=' + Quotedstr(kod) ;
   SQl.Text := sSQls ;
   Active   := true ;
   With adoRec do
   begin
     First;
     repeat
       if recordcount>0 then
         begin
           // Gelen kod reçeteye sahip
           receteadet := miktar ;
           satishareketleri_recete_kontrol( fisno,
                                            FieldByName('kod').AsString ,
                                            FieldByName('birim').AsString,
                                            fisadet,
                                            ifnull(FieldByName('miktar').value,0) * Miktar
                                           );
         end else begin
           // reçetesi yok ona göre işle
            sSQL := ' INSERT INTO ' + tmpRecete + ' (fisno , reckod, kod, miktar , birim , fisadet, recadet ) ' +
                    ' VALUES ( ' + fisno + ',' +
                                   Quotedstr(anakod) +',' +
                                   Quotedstr(kod)+
                                   ReplaceDot(FloatToStr(miktar)) +',' +
                                   birim + ' ,'+
                                   ReplaceDot(FloatToStr(anamiktar)) +',' +
                                   ReplaceDot(FloatToStr(receteadet)) + ' ) ' ;
            SQlServerQ(sSQL);

         end;
         Next;
     Until Eof;
   end;
   FreeAndNil(adoRec);
 end;
end;


Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 177 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  paslibvlcplayerin gec acilmasi sorunu-COZULDU sadikacar60 7 343 08-10-2024, Saat: 09:25
Son Yorum: mrmarman
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 4 6.103 08-10-2024, Saat: 09:20
Son Yorum: sadikacar60
  çözüldü-screenshot yapmak hk. sadikacar60 16 7.094 19-06-2024, Saat: 16:12
Son Yorum: bydelphi
  [Çözüldü] - WSDL importer / Unable to load WSDL File/Location Hatası Mesut 25 4.291 04-06-2024, Saat: 22:13
Son Yorum: abdullahBuyuk



Konuyu Okuyanlar: 1 Ziyaretçi