Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Butonun hide durumuna geçmesi
#1
Selamlar;


Open dialog ile excelden verileri alırken SpeedButton yaklaşık üç saniye forumdan kayboluyor ve sonrasında tekrar ortaya çıkıyor bu durum neden kaynaklı olabilir acaba?



const
  ESatir = $0000000B;
var
  Adet: Integer;
  Book: Variant;
  SSay, j, I: Integer;
  Excel, Sheet: Variant;
begin
  Adet := 0;
  DatabaseDelete(Sender);
  OpenDialog.Filter := 'Excel *.xls,*.xlsx|*.xls;*.xlsx';
  OpenDialog.Options := OpenDialog.Options + [ofAllowMultiSelect];
  if OpenDialog.Execute then
  begin
    for I := 0 to OpenDialog.Files.Count - 1 do
    begin
      Excel := CreateOleObject('Excel.Application');
      Book := Excel.WorkBooks.Open(OpenDialog.Files[I]);
      Sheet := Book.WorkSheets['Master']; // Sayfa adı
      SSay := Excel.ActiveSheet.Cells.SpecialCells(ESatir, EmptyParam).Row;
      try
        With FDQuery do
        begin
          for j := 5 to SSay do
          begin
            Inc(Adet);
            Connection := GenelConnection;
            Close;
            SQL.Clear;
            SQL.Add('Insert Into LIST (SIRANO, GIRIS, IDADI, URUN)');
            SQL.Add(' Values (:SR, :GR, :IA, :UR)');
            ParamByName('SR').AsInteger := Adet;
            ParamByName('GR').Value := Sheet.Cells[j, 2].Text;
            ParamByName('IA').Value := Sheet.Cells[j, 3].Text;
            ParamByName('UR').Value := Sheet.Cells[j, 4].Text;
            ExecSQL;
          end;
        end;
      finally
        Screen.Cursor := crDefault;
        Excel.WorkBooks.Close;
        Excel.Quit;
        Excel := Unassigned;
        Sheet := Unassigned;
      end;
    end;
  end;
  FDQuery.Close;
  Form2.ShowModal;
end;
Cevapla
#2
ProcessMessages deneyebilirmisini Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

“Do. Or do not. There is no try.”
Cevapla
#3
Döngü ve aktarımlarda işlem büyük veya döngü fazla ise kilitlenme olabiliyor. Thread kullanmadan çözüm bulmak biraz zor. Excelde kayıt aktardığımda bazen takılıyor bazen takılmıyor application.processmessage vs çok işe yaramıyor.
Cevapla
#4
TMS nnin ADVString gridine ADVExcelIO componentini bağlayınca yakaşık 70 bin kaydı 1.5-2 dakikada atıyor ADV stringgride.. Bi göz atmanızı tavsiye ederim..
WWW
Cevapla
#5
Bende kendi düşüncemi yazayım Smile

Main thread üzerinde bu tür bekletici işlemler yaparken uygulamamızdaki elemanların çizimi sırasında aksaklıklar olması doğaldır.
Eğer main thread bekleten işlemlerinizde döngü varsa her çalışma aşamasında "ProcessMessages" komutunu çalıştırıp uygulamanın hala devam ettiğini sisteme bildirmeniz tahminimce sorununuzu çözecektir.
Fakat işin doğrusu olayı ayrı bir thread tarafında yapmanız ve eğer Ui işleminiz varsa senkronize ederek main threade taşımanızdır diye düşünmekteyim.
Yeni Nesil Yazılımcı
Linkedin: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Blog adresim: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  for ile oluşturulan butonun visible durumu arsl01 22 827 13-07-2018, Saat: 18:28
Son Yorum: arsl01
  butonun captionunu sola yaslama arsl01 1 152 06-07-2018, Saat: 10:54
Son Yorum: esistem
  RDP'yi Simge durumuna küçültünce bağlantı kopuyor yhackup 1 303 06-12-2017, Saat: 13:18
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi