Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
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.
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
Aşağıda ki kod bloğunda, thread içersinden(Execute), pek çok görsel bileşene(Form,cxTextEdit vs) doğrudan erişilmiş.kimimben yazdı:Form ve diğer görsel bileşenlere thread içersinden erişirken Synchronize methodu kullanılmalı.
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;
-
- Üye
- Mesajlar: 86
- Kayıt: 27 May 2014 04:27
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
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.
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.
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
Merhaba,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.
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
-
- Üye
- Mesajlar: 86
- Kayıt: 27 May 2014 04:27
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
çok teşekkür ederim.
Gerçi ben Delphi 7 kullanıyorum ama fikir verir en azından.
Gerçi ben Delphi 7 kullanıyorum ama fikir verir en azından.
-
- Üye
- Mesajlar: 86
- Kayıt: 27 May 2014 04:27
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
ben bu thread olayından vazgeçiyorum. bir türlü beceremedim.
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
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.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.
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.
-
- Üye
- Mesajlar: 86
- Kayıt: 27 May 2014 04:27
Re: Uzak SQL server a kayıt sırasında program tepki vermemesi hk.
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ı.
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ı.