Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen thelvaci »

Siz threading'i inanılmaz derecede hatalı kullanıyorsunuz. Lütfen threading konusunda biraz daha araştırma yapın. Aksi taktirde beklemediğiniz onlarca hata ile karşılaşabilirsiniz. Internette, burada ve benim sitemde de fazlası ile işinize yarayabilecek kaynak bulabilirsiniz.
Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen kimimben »

kimimben yazdı:Form ve diğer görsel bileşenlere thread içersinden erişirken Synchronize methodu kullanılmalı.
Aşağıda ki kod bloğunda, thread içersinden(Execute), pek çok görsel bileşene(Form,cxTextEdit vs) doğrudan erişilmiş.
underwater yazdı:Tabiki. Kod şöyle:

Kod: Tümünü seç


type
 TAntifreeze = class(TThread)
 protected
 procedure Execute;override;
end;


implementation

{$R *.dfm}
uses DM,Ana;


 procedure TFormYukle.CompressStream(inpStream, outStream: TStream);
var
  InpBuf, OutBuf: Pointer;
  InpBytes, OutBytes: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  try
    GetMem(InpBuf, inpStream.Size);
    inpStream.Position := 0;
    InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
    CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
    outStream.Write(OutBuf^, OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;


procedure TAntifreeze.Execute;
 var
 X:TMemoryStream;
 Z:TMemoryStream;
begin

  if Y=True then
  begin
   if
  (FormYukle.cxTextEdit1.Text=NullAsStringValue) or
  (FormYukle.cxTextEdit2.Text=NullAsStringValue) or
  (FormYukle.cxTextEdit3.Text=NullAsStringValue) or
  (FormYukle.cxTextEdit4.Text=NullAsStringValue) or
  (FormYukle.cxTextEdit5.Text=NullAsStringValue) or
  (FormYukle.cxCurrencyEdit3.Text=NullAsStringValue) then
  begin
  MessageBox(0,'Lütfen mavi alanları doldurunuz !   ', '', MB_OK or MB_ICONWARNING or MB_DEFBUTTON1 or MB_TASKMODAL);
  exit;
  end;
  FormYukle.Panel2.Visible:=True;
  FormYukle.Panel2.Refresh;
  X:=TMemoryStream.Create;
  X.LoadFromFile(Yol);
  Z:= TMemoryStream.Create;
  FormYukle.CompressStream(X,Z);

  FormYukle.ADOQInsert.Parameters[0].Value:=FormYukle.cxTextEdit1.Text;                            
  FormYukle.ADOQInsert.Parameters[1].Value:=FormYukle.cxTextEdit2.Text;                           
  FormYukle.ADOQInsert.Parameters[2].Value:=FormYukle.cxCurrencyEdit2.Value;                       
  FormYukle.ADOQInsert.Parameters[3].Value:=FormYukle.cxCurrencyEdit1.Value;                       
  FormYukle.ADOQInsert.Parameters[4].Value:=FormYukle.cxCurrencyEdit3.Value;                       
  FormYukle.ADOQInsert.Parameters[5].LoadFromStream(Z,ftBlob);                          
  FormYukle.ADOQInsert.Parameters[6].Value:=FormYukle.cxTextEdit3.Text;                           
  FormYukle.ADOQInsert.Parameters[7].Value:=FormYukle.cxTextEdit4.Text;                           
  FormYukle.ADOQInsert.Parameters[8].Value:=FormYukle.cxTextEdit5.Text;                      
  FormYukle.ADOQInsert.Parameters[9].Value:=strtoint(FormANA.Edit2.Text);               
  FormYukle.ADOQInsert.Parameters[10].Value:=strtoint(FormANA.Edit1.Text);               
  FormYukle.ADOQInsert.Parameters[11].Value:=GetEnvironmentVariable('COMPUTERNAME');   
  FormYukle.ADOQInsert.ExecSQL;
  FormYukle.Panel2.Visible:=False;
  end;

  if Y=False then
  begin
  if
  (FormYukle.cxTextEdit2.Text=NullAsStringValue) or
  (FormYukle.cxCurrencyEdit3.Text=NullAsStringValue) then
  begin
  MessageBox(0,'Lütfen mavi alanları doldurunuz !   ', '', MB_OK or MB_ICONWARNING or MB_DEFBUTTON1 or MB_TASKMODAL);
  exit;
  end;

  FormYukle.ADOQUpdate.Parameters[0].Value:=FormYukle.cxTextEdit2.Text;                           
  FormYukle.ADOQUpdate.Parameters[1].Value:=FormYukle.cxCurrencyEdit2.Value;                      
  FormYukle.ADOQUpdate.Parameters[2].Value:=FormYukle.cxCurrencyEdit1.Value;                       
  FormYukle.ADOQUpdate.Parameters[3].Value:=FormYukle.cxCurrencyEdit3.Value;                 
  FormYukle.ADOQUpdate.Parameters[4].Value:=FormYukle.cxTextEdit3.Text;                           
  FormYukle.ADOQUpdate.Parameters[5].Value:=FormYukle.cxTextEdit4.Text;                         
  FormYukle.ADOQUpdate.Parameters[6].Value:=FormYukle.cxTextEdit5.Text;                          
  FormYukle.ADOQUpdate.Parameters[7].Value:=strtoint(FormANA.Edit1.Text);                
  FormYukle.ADOQUpdate.Parameters[8].Value:=Now;                                        
  FormYukle.ADOQUpdate.Parameters[9].Value:=GetEnvironmentVariable('COMPUTERNAME');      
  FormYukle.ADOQUpdate.Parameters[10].Value:=FormYukle.ADOQGridDokumanID.Value;                
  FormYukle.ADOQUpdate.ExecSQL;
  end;

  FormYukle.ADOQGrid.close;
  FormYukle.ADOQGrid.Parameters[0].Value:=Ana.FormANA.Edit1.Text;
  FormYukle.ADOQGrid.open;
end;

underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen underwater »

Arkadaşlar sürekli yaptığım hatayı söylüyorsunuz , onun zaten farkındayım synchronize kullanımını bilmiyorum evet.
Kod da gönderdim. Fakat bir türlü şunun doğru kullanımını örnek üzerinde açıklamıyorsunuz.
Basit bir örnek üzerinden gitsek -ki yukarda basit bir örnek kod da var, can çekiştirmeseniz olmaz mı?

Thread ve synchronize ilk defa kullanmaya ihtiyaç duyduğum bir konu ve örnek üzerinde görmeye ihtiyacım var.
Basit kullanımı anlayabilirsem aynı şekilde kendi koduma uygulayacağım.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen ertank »

underwater yazdı:Arkadaşlar sürekli yaptığım hatayı söylüyorsunuz , onun zaten farkındayım synchronize kullanımını bilmiyorum evet.
Kod da gönderdim. Fakat bir türlü şunun doğru kullanımını örnek üzerinde açıklamıyorsunuz.
Basit bir örnek üzerinden gitsek -ki yukarda basit bir örnek kod da var, can çekiştirmeseniz olmaz mı?

Thread ve synchronize ilk defa kullanmaya ihtiyaç duyduğum bir konu ve örnek üzerinde görmeye ihtiyacım var.
Basit kullanımı anlayabilirsem aynı şekilde kendi koduma uygulayacağım.
Merhaba,

Aşağıdaki linkte ekli dosya mevcut. Bu dosyayı indirip Thread kullanımını inceleyebilirsiniz. TMemo nesnesi ile Synchronize işleminin örneği içinde mevcuttur.
viewtopic.php?f=2&t=36022&p=194487#p194487
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen underwater »

çok teşekkür ederim.
Gerçi ben Delphi 7 kullanıyorum ama fikir verir en azından.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen underwater »

ben bu thread olayından vazgeçiyorum. bir türlü beceremedim.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen thelvaci »

underwater yazdı:Arkadaşlar sürekli yaptığım hatayı söylüyorsunuz , onun zaten farkındayım synchronize kullanımını bilmiyorum evet.
Kod da gönderdim. Fakat bir türlü şunun doğru kullanımını örnek üzerinde açıklamıyorsunuz.
Basit bir örnek üzerinden gitsek -ki yukarda basit bir örnek kod da var, can çekiştirmeseniz olmaz mı?

Thread ve synchronize ilk defa kullanmaya ihtiyaç duyduğum bir konu ve örnek üzerinde görmeye ihtiyacım var.
Basit kullanımı anlayabilirsem aynı şekilde kendi koduma uygulayacağım.
Bizler hatalı yaklaşımına vurgu yapıyoruz, çünkü bu şekilde ilerler isen çözemeyeceğin başka hatalar ile karşılaşacaksın. Biraz araştırmak ve okumak zor mu güzel kardeşim ? Gir benim siteme hiç bir yerde kaynak bulamadı isen(ki bu mümkün değil), tıkla thread tag'ına basitinden zoruna bir çok thread makalesi göreceksin.

Okuduğunda sen de farkedeceksin ne demek istediğimizi. Kullanacağınız şeyi önce öğrenmeye gayret ederseniz ileride daha az başınız ağrır.
underwater
Üye
Mesajlar: 86
Kayıt: 27 May 2014 04:27

Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.

Mesaj gönderen underwater »

Tuğrul hocam lafım size değildi.
Thread konusunda epeyce araştırma yaptım , lakin bir türlü VCL bileşenler ile synchronize işlemini beceremedim.
----
not responding sorunumu farklı bir metodla çözdüm.
İşlem sırasında programın not responding konumuna düşmemesi için geçici olarak klavye ve mouse u devre dışı bıraktım.
Ayrıca lütfen bekleyiniz temalı bir gif animasyon koydum.
Keşke thread ile bu işi becerebilseydim daha güzel olacaktı.
Cevapla