Arka planda kitlenmeden çalışacak uygulama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

Mrb herkese.

Yaptığım uygulamada şirket içindeki bilgilerin aktarılmasını sağlayacak arka planda çalışan antivirüsler gibi aktif, kitlenmeyecek ve sistemi çok zorlamayacak uygulama hazırlamam gerekiyor. Bu konuda yardımcı olabilecek veya hangi bilgileri araştırmam gerektiğini söyleyebilecek arkadaşlar olursa çok sevinirim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen tayipk »

önemli olan hangi bilgileri nerden çekip nereye aktaracak. antivirüse takılması için localden alıp internete veri taşıyan bir proje yada sürekli registera müdehalede bulunan proje vs. bunlar antivirüse takılır. kilitlenmeyen demişsin ya tam o noktada bana yanık olmayan yemek lazım gibi bir şey olmuş. programın kilitlenip kilitlenmemesi senin kod yapına network ile haberleşmene vs. bakar. o yüzden ucu her yere çıkabilen bir soru sormuşsun. bence sen önce kendine cevap vermelisin ne yapmak istiyorsun. local mi yoksa dışa açık bir yazılım mı olacak vs. bunları netleştirip sorunu bence tekrar güncellemen gerekebilir. kolay gelsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen G.Arkas »

Cevap: Service Application
Resim
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

localden alıp nete bilgi gönderecek. bilgileri gönderirken uygulama ekranında giden bilgiler görünecek (Thread). Antivirüse takılması olayı değil. Antivirüs arka planda ararken veya antivirüs açık olarak dosyaları ararken nasıl kilitlenmiyorsa ve yüzdelik ve dosya bilgilerini gösteririyor ise aynı şekilde.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

Service application inceliyorum nette güzel bir video buldum http://www.youtube.com/watch?v=w3od-QJwbC8 görüntü kalitesi düşük olduğundan birşey anlaşılmıyor.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen freeman35 »

"uygulama ekranında giden bilgiler görünecek (Thread)."
Servis uygulamasında bunu yapamazsın, servis uygulaması, kullanıcı arayüzü olmayan, sadece iş yapan uygulama diye özetliyebilirsin. Bu yüzden "Ekranda" bir şey gösteremezsin. Servis uygulamasının esas amacı, kullancı login olmadan işlem yapabilmektir.
cümlede Thread i de yanlış anlamda kullanmışsın, thread in amacı, aynı anda işlem yapılıyor izlenimini vermektir, basitçe, aynı uygulama içinde farklı uygulamalar çalışması denebilir.
Senin yazdığından anladığım, x yere gönderilen her bilgide ekrandaki grid e bir kayıt eklemek için thread e gerek yok.
Bu bahsettiğin iş özel bir şey değil, bir uygulama yazacaksın, sadece uygulama minimize edildiğinde taskbar da kaybolup, trayicon olarak görünecek, bununla ilgili net te ve forumda onlarca kod ve component mevcut.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

arda arda 500 veya daha fazlasını kayıt aktarırken ekran donuyor bunu nasıl engelleyebilirim.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen greenegitim »

pasa_yasar yazdı:arda arda 500 veya daha fazlasını kayıt aktarırken ekran donuyor bunu nasıl engelleyebilirim.
Kendi yaptığım projelerde Application.ProcessMessages; kullanıyorum
Mücadele güzelleştirir!
m_yaprakci

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen m_yaprakci »

greenegitim yazdı:
pasa_yasar yazdı:arda arda 500 veya daha fazlasını kayıt aktarırken ekran donuyor bunu nasıl engelleyebilirim.
Kendi yaptığım projelerde Application.ProcessMessages; kullanıyorum

arkadasın soylediği gibi veri gönderme prosedur veya fonksiyonu içerisine veya fonksiyonu çalıştırdığınız yerin hemen altına

Kod: Tümünü seç

application.processmessages;
yazın.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

Onu denedim işe yaramıyor bir süre çalışıyor sonra işlem bitene kadar ekran donuyor. Microsoft veya antivirüs uygulamalarında binlerce dosyayı tarıyor ama ekranda kilitlenmeden düzgün bir şekilde grafik ve isim olarak çalışıyor.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen tayipk »

Kod: Tümünü seç

application.processmessages;
koduyla 18.000 ürün kartı aktarımı gerçekleştirdim herhangi bir donma yaşanmadı önemli olan

Kod: Tümünü seç

application.processmessages;
kodunu işleminizin hangi aşamasına yazdığınızdır.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

while do döngüsünde AdoQuery next yaptıktan sonra kullanıyorum her okuyan kaydı ekrana yazıyorum
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen tayipk »

kod bloğunu paylaşmanız mümkünse birlikte bakabiliriz dilerseniz.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen pasa_yasar »

Stokların Excelden Aktarılması ile ilgili kod bloğu

Kod: Tümünü seç

          Application.ProcessMessages;
        
          AdoQuery1.DisableControls;

          UniQuery2.Close;
          UniQuery2.Open;


          UniQuery8.Close;
          UniQuery8.SQL.Clear;
          UniQuery8.SQL.Add('select * from sales');
          UniQuery8.Open;

          satir:=0;

          ADOQuery1.First;

          while not ADOQuery1.eof do
          begin

              satir:=satir+1;
              cxLabel7.caption:='( '+inttostr(satir)+' / '+inttostr(ADOQuery1.RecordCount)+' )'+#13+Trim(AdoQuery1.FieldByName(cxComboBox1.Text).AsString)+#13+Trim(AdoQuery1.FieldByName(cxComboBox2.Text).AsString);
              cxLabel7.Update;


              UniQuery2.Append;

              UniQuery700.close;
              UniQuery700.sql.clear;
              UniQuery700.sql.add('select * from proautoid');
              UniQuery700.open;

              UniQuery700.Append;
              UniQuery700.Post;

              UniQuery2.fieldbyname('ID').AsInteger:=UniQuery700.fieldbyname('ID').AsInteger;



              if Trim(cxComboBox1.Text)<>'Seçim Yok' then
              begin
                 UniQuery2.FieldByName('code').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox1.Text).AsString);
              end;

              if Trim(cxComboBox2.Text)<>'Seçim Yok' then
              begin
                 UniQuery2.FieldByName('stockname').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox2.Text).AsString);
              end;

              if Trim(cxComboBox3.Text)<>'Seçim Yok' then
              begin
                 UniQuery2.FieldByName('barkod1').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox3.Text).AsString);
              end;

              if Trim(cxComboBox15.Text)<>'Seçim Yok' then
              begin
                    if  (Trim(AdoQuery1.FieldByName(cxComboBox15.Text).AsString)='Ürün')
                    or  (Trim(AdoQuery1.FieldByName(cxComboBox15.Text).AsString)='Hizmet') then
                    begin
                         UniQuery2.FieldByName('turu').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox15.Text).AsString);
                    end
                    else
                    begin
                         UniQuery2.FieldByName('turu').AsString:='Ürün';
                    end;
              end
              else
              begin
                    UniQuery2.FieldByName('turu').AsString:='Ürün';
              end;


              if Trim(cxComboBox4.Text)<>'Seçim Yok' then
              begin

                  if  Trim(AdoQuery1.FieldByName(cxComboBox4.Text).AsString)<>'' then
                  Begin
                      UniQuery6.close;
                      UniQuery6.Sql.Clear;
                      UniQuery6.Sql.Add('select * from birim');
                      UniQuery6.Sql.Add('where birim='''+Trim(AdoQuery1.FieldByName(cxComboBox4.Text).AsString)+'''');
                      UniQuery6.Open;

                      if  UniQuery6.RecordCount>0 then
                      begin

                           UniQuery2.FieldByName('BIRIMID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                           UniQuery2.FieldByName('birim').AsString:=trim(UniQuery6.fieldbyname('birimcode').asstring)+' - '+trim(UniQuery6.fieldbyname('birim').asstring);
                        end
                        else
                        begin

                            UniQuery7.close;
                            UniQuery7.sql.clear;
                            UniQuery7.sql.add('select birimcode from birim');
                            UniQuery7.sql.add('where birimcode<>''''');
                            UniQuery7.sql.add('order by birimcode ASC');
                            UniQuery7.open;

                            UniQuery7.last;

                            UniQuery6.Append;

                            if UniQuery7.recordcount=0 then
                            begin
                              UniQuery6.FieldByName('birimcode').AsString:='000001';
                            end
                            else
                            begin
                              UniQuery6.FieldByName('birimcode').AsString:=numarator(UniQuery7.fieldbyname('birimcode').asstring);
                            end;
                            UniQuery6.FieldByName('birim').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox4.Text).AsString);
                            UniQuery6.Post;

                            UniQuery2.FieldByName('BIRIMID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                            UniQuery2.FieldByName('birim').AsString:=trim(UniQuery6.fieldbyname('birimcode').asstring)+' - '+trim(UniQuery6.fieldbyname('birim').asstring);
                      end;
                  End;
              end;


              if Trim(cxComboBox5.Text)<>'Seçim Yok' then
              begin

                  if  Trim(AdoQuery1.FieldByName(cxComboBox5.Text).AsString)<>'' then
                  Begin
                      UniQuery6.close;
                      UniQuery6.Sql.Clear;
                      UniQuery6.Sql.Add('select * from stockgrup');
                      UniQuery6.Sql.Add('where grupad='''+Trim(AdoQuery1.FieldByName(cxComboBox5.Text).AsString)+'''');
                      UniQuery6.Open;

                      if  UniQuery6.RecordCount>0 then
                      begin

                           UniQuery2.FieldByName('GRUPID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                           UniQuery2.FieldByName('grup').AsString:=trim(UniQuery6.fieldbyname('grupkod').asstring)+' - '+trim(UniQuery6.fieldbyname('grupad').asstring);
                           UniQuery2.FieldByName('grupkod').AsString:=trim(UniQuery6.fieldbyname('grupkod').asstring);
                        end
                        else
                        begin

                            UniQuery7.close;
                            UniQuery7.sql.clear;
                            UniQuery7.sql.add('select grupkod from stockgrup');
                            UniQuery7.sql.add('where grupkod<>''''');
                            UniQuery7.sql.add('order by grupkod ASC');
                            UniQuery7.open;

                            UniQuery7.last;

                            UniQuery6.Append;

                            if UniQuery7.recordcount=0 then
                            begin
                              UniQuery6.FieldByName('grupkod').AsString:='000001';
                            end
                            else
                            begin
                              UniQuery6.FieldByName('grupkod').AsString:=numarator(UniQuery7.fieldbyname('grupkod').asstring);
                            end;
                            UniQuery6.FieldByName('grupad').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox5.Text).AsString);
                            UniQuery6.Post;

                            UniQuery2.FieldByName('GRUPID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                            UniQuery2.FieldByName('grup').AsString:=trim(UniQuery6.fieldbyname('grupkod').asstring)+' - '+trim(UniQuery6.fieldbyname('grupad').asstring);
                            UniQuery2.FieldByName('grupkod').AsString:=trim(UniQuery6.fieldbyname('grupkod').asstring);
                      end;
                  End;
              end;



              if Trim(cxComboBox6.Text)<>'Seçim Yok' then
              begin

                if  Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString)<>'' then
                Begin


                  UniQuery6.close;
                  UniQuery6.Sql.Clear;
                  UniQuery6.Sql.Add('select * from marka');
                  UniQuery6.Sql.Add('where marka='''+Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString)+'''');

                  if Trim(cxComboBox7.Text)<>'Seçim Yok' then
                  begin
                      if Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString)<>'' then
                      begin
                        UniQuery6.Sql.Add('and model='''+Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString)+'''');
                      end;
                  end;

                  UniQuery6.Open;

                  if  UniQuery6.RecordCount>0 then
                  begin

                       UniQuery2.FieldByName('MARKAID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                       UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);

                       if Trim(cxComboBox7.Text)<>'Seçim Yok' then
                       begin
                          UniQuery2.FieldByName('model').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);
                          UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString)+' / '+Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);
                       end;

                       if Trim(cxComboBox7.Text)='Seçim Yok' then
                       begin
                          UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);
                       end;


                    end
                    else
                    begin

                       UniQuery6.Append;
                       UniQuery6.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);

                       if Trim(cxComboBox7.Text)<>'Seçim Yok' then
                       begin

                           UniQuery6.FieldByName('model').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);


                           if  Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString)<>'' then
                           begin
                               UniQuery6.FieldByName('markamodel').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString)+' / '+Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);
                           end;

                           if  Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString)='' then
                           begin
                               UniQuery6.FieldByName('markamodel').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);
                           end;
                       end
                       else
                       begin
                           UniQuery6.FieldByName('markamodel').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);
                       end;

                       UniQuery6.Post;

                       UniQuery2.FieldByName('MARKAID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                       UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);

                       if Trim(cxComboBox7.Text)<>'Seçim Yok' then
                       begin
                          UniQuery2.FieldByName('model').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);
                          UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString)+' / '+Trim(AdoQuery1.FieldByName(cxComboBox7.Text).AsString);
                       end;

                       if Trim(cxComboBox7.Text)='Seçim Yok' then
                       begin
                          UniQuery2.FieldByName('marka').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox6.Text).AsString);
                       end;

                  end;
                end;
              end;

              if Trim(cxComboBox8.Text)<>'Seçim Yok' then
              begin

                  if  Trim(AdoQuery1.FieldByName(cxComboBox8.Text).AsString)<>'' then
                  Begin

                      UniQuery6.close;
                      UniQuery6.Sql.Clear;
                      UniQuery6.Sql.Add('select * from kategori');
                      UniQuery6.Sql.Add('where name='''+Trim(AdoQuery1.FieldByName(cxComboBox8.Text).AsString)+'''');
                      UniQuery6.Open;

                      if  UniQuery6.RecordCount>0 then
                      begin
                           UniQuery2.FieldByName('KATEGORIID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                           UniQuery2.FieldByName('kategori').AsString:=trim(UniQuery6.fieldbyname('code').asstring)+' - '+trim(UniQuery6.fieldbyname('name').asstring);
                        end
                        else
                        begin

                            UniQuery7.close;
                            UniQuery7.sql.clear;
                            UniQuery7.sql.add('select code from kategori');
                            UniQuery7.sql.add('where code<>''''');
                            UniQuery7.sql.add('order by code ASC');
                            UniQuery7.open;

                            UniQuery7.last;

                            UniQuery6.Append;

                            if UniQuery7.recordcount=0 then
                            begin
                              UniQuery6.FieldByName('code').AsString:='000001';
                            end
                            else
                            begin
                              UniQuery6.FieldByName('code').AsString:=numarator(UniQuery7.fieldbyname('code').asstring);
                            end;
                            UniQuery6.FieldByName('name').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox8.Text).AsString);
                            UniQuery6.Post;

                            UniQuery2.FieldByName('KATEGORIID').AsString:=Trim(UniQuery6.FieldByName('ID').AsString);
                            UniQuery2.FieldByName('kategori').AsString:=trim(UniQuery6.fieldbyname('code').asstring)+' - '+trim(UniQuery6.fieldbyname('name').asstring);
                      end;
                  End;
              End;     


              if Trim(cxComboBox9.Text)<>'Seçim Yok' then
              begin
                 UniQuery2.FieldByName('salesprice').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox9.Text).AsString);
              end;

              if Trim(cxComboBox11.Text)<>'Seçim Yok' then
              begin
                 UniQuery2.FieldByName('buyprice').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox11.Text).AsString);
              end;


              if Trim(cxComboBox10.Text)<>'Seçim Yok' then
              begin


                 if Trim(AdoQuery1.FieldByName(cxComboBox10.Text).AsString)<>'' then
                 begin
                      UniQuery2.FieldByName('kdv').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox10.Text).AsString);
                 end;



                 if Trim(AdoQuery1.FieldByName(cxComboBox10.Text).AsString)='' then
                 begin
                     if Trim(cxComboBox23.Text)='Evet' then
                     begin
                       UniQuery2.FieldByName('kdv').AsString:=cxSpinEdit1.Value;
                     end;
                 end;
              end;

              if Trim(cxComboBox12.Text)<>'Seçim Yok' then
              begin


                 if Trim(AdoQuery1.FieldByName(cxComboBox12.Text).AsString)<>'' then
                 begin
                      UniQuery2.FieldByName('aliskdv').AsString:=Trim(AdoQuery1.FieldByName(cxComboBox12.Text).AsString);
                 end;


                 if Trim(AdoQuery1.FieldByName(cxComboBox12.Text).AsString)='' then
                 begin
                     if Trim(cxComboBox23.Text)='Evet' then
                     begin
                       UniQuery2.FieldByName('aliskdv').AsString:=cxSpinEdit2.Value;
                     end;
                 end;
              end;


              UniQuery2.Post;

              AdoQuery1.Next;
          end;
    end;

tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: Arka planda kitlenmeden çalışacak uygulama

Mesaj gönderen tayipk »

kodlarında while döngüsü içinde bir kaçtane if şartı gördüm bnim nacizhane fikrim Application.processmessages kodunu while döngüsü içinde kullanmış olduğun diğer her bir query nin başına koy ve while döngüsü içinde başladığın noktaya koyup denermisin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Cevapla