Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Thủ Thuật] Tạo thanh tiến trình trên Form (Progress bar) khi xử lý dữ liệu
#11
(17-10-16, 05:01 PM)Minh Tiên Đã viết: Cài này Tiên cũng đã ngâm cứu rồi, Tiên ko áp dụng đc vào tiện ích của mình !

Tiên đang chờ 02 cách nữa của Dân, nhưng sao lâu quá ko thấy Dân share nhỉ ?
Hay để ACE "ngâm lã" đi mới bật mí !
Thanks !

Code Demo trên đã ok rồi, chuyện còn lại tùy vào cách xử lý từng sự kiện mà ta sẽ tạo ra các thuật toán của mình mà áp vào nó thôi

* Tiên đưa ra yêu cầu 1 cái đi, Dân lấy cái đó làm minh họa. ( Sẽ cố gắng hết sức, chứ không giám hứa 100%)
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#12
Chào Dân !

Hiện Tiên đang gọi Progress bằng Form theo Demo đính kèm !
Nếu dùng SQL để Update thông tin thì ko sao hiển thị % hoàn thành được.

Dân nghiên cứu giúp nhé !
Demo


Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#13
(19-10-16, 12:08 PM)Minh Tiên Đã viết: Chào Dân !

Hiện Tiên đang gọi Progress bằng Form theo Demo đính kèm !
Nếu dùng SQL để Update thông tin thì ko sao hiển thị % hoàn thành được.

Dân nghiên cứu giúp nhé !
Demo


Thanks !

Đã xem qua Demo này. Code Demo thứ 1 của tiên rất ok rồi... Nên dùng nó mà phát triển

* Có vài lời như sau: Chúng ta đều biết Access hoặc các phần mềm khác phương thức xử lý là từng đoạn code, xong đoạn 1 thì mới xử lý tiếp đoạn 2 như vậy đoạn code thứ 2 ( update_sql) của tiên chỉ phát sinh 1 lần xử lý duy nhất và không có cái progess nào có thể đáp ứng nó.

Vậy thì ta xét trường hợp sau,
* Trường hợp theo tuần tự của 1 hàm khi gọi:
+ khi ta chạy đoạn code: sql = "INSERT INTO " & TenTableUp & " SELECT * FROM " & TenTable & ";"
Ta chèn dưới nó 1 đoạn Msgbox để thông báo đã hoàn thành.
=> Khi câu lênh sql chạy xong ( đã hoàn tất) thì Msgbox mới nhảy lên. Tức là không thể chèn thanh Progess nào để can thiệp vào của pháp sql khi câu lệnh phía trên chưa được thực hiện.

* Kết luận: Nguyên tắc dùng Progess bar để hiển thị tiến trình công việc ta phải nhớ những việc sau đây.
Chỉ có thể chèn vào các code có xử lý theo phân đoạn: như chạy từng record, từng file, tập tin
- Lấy vi1 dụ code sql trên của Tiên: nếu muốn lấy tỷ lệ % chính xác theo Đoạn code thứ nhất trong Demo thì tiên có thể thêm điều kiện để biến đoạn sql này thành 5 câu hoặc 10 câu để chạy ( đây là cách xử lý hay chứ đừng xử lý kiểu 1 cục, nếu Data lớn rất dễ treo máy) sau đó ta nhét thanh Progess vào sẽ ok ngay.

Giống như có 100.000 mẫu tiên, thay vì update cùng lúc Tiên hãy nạp 10 ngàn mẫu trước rồi nạp tiếp tiếp ( ở đây nó cũng giống như đoạn code đâu tiên của tiên là update chỉ 1 mẫu tin thì lệnh update_sql tiên up 1 lần 10 ngàn.

* Trường hợp ép chạy cùng 1 lúc 2 đoạn code.
cũng trường hợp chạy sql trên ta sẽ gọi 1 form tạm cho chạy trước khi chạy sql-update
Mục đích formtạm(form progess) để làm gì: Ta sẽ viết cho nó cứ 1 giây sẽ đếm số record của table Đích so với với Số lượng table nguồn
Ví dụ: Tôi muốn nạp 1.000 mẫu tin từ table A lên Table B ( hiện tại table B có 2.000 mẫu tin)
Như vậy, ở sự kiện time của formtạm cứ 1 giây nó sẽ đếm tableB có bao nhiêu record, đếm đến khi nào đủ 3.000 thì dừng và thoát form tạm

Nói tới đây chắc đủ rồi.

Tiên làm thử xem.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#14
Thanks Dân đã quan tâm, hướng dẫn.

Thực ra khi chuyển sang chạy sql là Tiên đã ko quan tâm đến số lượng record Update rồi.

1. Theo PA1 của Dân nếu phân đoạn thành 5-10 câu SQL để gọi Progress thì ta lại phải đếm số lượng record (Dcount hoặc set rs= ...), sau đó chia 5 hoặc 10 hoặc n, rồi sql từng câu theo số lượng record --> phức tạp.
Song như Dân nói là "Tránh treo PC khi Data lớn". Tiên sẽ ngâm cứu thêm chỗ này, vì hiện nay Tiên thấy khi chạy sql 1 lần với Data lớn, PC của Tiên chưa bị treo nhưng nó chuyển sang màn hình đen (khoản 2-3 giây) trước khi hoàn thành sql (Trở về trạng thái bình thường). Không biết là nguyên nhân gì ?


Việc msgbox thì đơn giản nhất nhưng phải click chuột khi hoàn thành sql. Hơn nữa ko nhìn thấy cái progress nên cũng ko "sướng con mắt" lắm.

2. Tiên sẽ nghiên cứu theo PA2 của Dân thử thế nào rồi thông báo KQ.
Một lần nữa Thanks Dân cùng ACE đã chia sẽ !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#15
Tiên đã thử đoạn code sql phân đoạn như Dân nói.
Nay gửi demo nhờ ACE cho ý kiến.
Demo
Tiên  có 1 "vướng mắc" tìm mãi chưa gỡ được. Đó là trong cách 1 gọi Progress (gán Recorde set) thì Form Progress cứ nháy nháy hoài. Còn trong cách 2 và 3 (SQL) thì Form Progress ko nháy !

Nhờ ACE Pro chỉ giúp có cách khắc phục để Progress (ở cách 1) ko nháy ko ?

Thanks !
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#16
(20-10-16, 04:03 PM)Minh Tiên Đã viết: Tiên đã thử đoạn code sql phân đoạn như Dân nói.
Nay gửi demo nhờ ACE cho ý kiến.
Demo
Tiên  có 1 "vướng mắc" tìm mãi chưa gỡ được. Đó là trong cách 1 gọi Progress (gán Recorde set) thì Form Progress cứ nháy nháy hoài. Còn trong cách 2 và 3 (SQL) thì Form Progress ko nháy !

Nhờ ACE Pro chỉ giúp có cách khắc phục để Progress (ở cách 1) ko nháy ko ?

 Thanks !

Tôi cũng bị tương tự. Theo tôi biết là do tốc độ xử lý (refresh) record làm ảnh hưởng đế CPU và bộ nhớ card màn hình. Theo demo của Tiên, tôi thêm cái hàm Sleep như demo của bác Dân để làm chậm lại tốc độ Repaint, nó sẽ giảm độ nhấp nháy rất nhiều. Để Sleep 2.
---------------------------------
...
    Sleep 2
    Me.boxProgress.Width = (mCurrentProgress / mSteps) * Me.txtMaxBox.Width
    Me.Repaint
...
---------------------------------
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#17
Đúng như ongke0711 nói.
Thêm sleep n thì đỡ nháy hơn (n càng lớn càng đỡ nháy nhưng code chạy càng chậm).
Ko biết còn cách nào khác giảm nháy ko ?
Thanks./.
Chữ ký của Minh Tiên -----------------------------------------------
Đường tuy ngắn, không đi không đến
Việc tuy nhỏ, không làm không nên.
                                           Tuân Tử
-----------------------------------------------
Reply
Những người đã cảm ơn
#18
(21-10-16, 04:44 PM)Minh Tiên Đã viết: Đúng như ongke0711 nói.
Thêm sleep n thì đỡ nháy hơn (n càng lớn càng đỡ nháy nhưng code chạy càng chậm).
Ko biết còn cách nào khác giảm nháy ko ?
Thanks./.

Bạn nên đọc qua bài Dữ liệu phân tán hoặc học Môn "Toán rời rạc" mình thấy nó giúp cho bản thân cũng nhìu lắm đó

Cách code mà Minh tiên đưa chỉ dành cho người mới bắt đầu bước vào Access, chúng ta đã thuần thụt nó rời nên chia nó từng đoạn mà xử lý, đừng xử lý kiểu 1 cục.

Bạn đã chuyên sâu thì nên viết code cho xử lý từng tham số, chuỗi, mẫu tin. Không gom chung.

Mặt khác Access chỉ lưu tối đa có 2Gb nếu có thể chia Database thành nhiều cái... rồi dùng từng đoạn gom từng mẫu tin truy xuất đến chúng.

Hôm trước có gửi Demo cho Ongke rồi, mình tính viết thêm vài đoạn nửa và cũng đã thành công. Nhưng mình chưa Post lên vì cần test và phát triển thêm 2 ý nửa để bổ sung cho nó thật ngon và thật dể cho anh/chị/em đưa vào bài mình áp dụng.

Thân mến! Vài lời chia sẽ nhỏ bé
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Minh Tiên
#19
(21-10-16, 04:44 PM)Minh Tiên Đã viết: Đúng như ongke0711 nói.
Thêm sleep n thì đỡ nháy hơn (n càng lớn càng đỡ nháy nhưng code chạy càng chậm).
Ko biết còn cách nào khác giảm nháy ko ?
Thanks./.

Cũng dựa trên nguyên tắc trên, vì thanh progress của form phải cập nhật theo từng record với tốc độ nhanh nên màn hình cũng ko phản ứng kịp, do vậy nếu ko dùng Sleep thì thay đổi việc cập nhật progresss với khoảng cách xa hơn chút nữa có nghĩa là thay vì cập nhật 1 đơn vị thì chỉ cập nhật progress khi đã xử lý được 10, 100 records
Ví dụ: tôi đổi trong function Update của Module1 -> độ nháy màn hình cũng giảm đáng kể
.................................
   If j Mod 100 = 0 Then
        .CurrentProgress = j
   End If
   Next j
.................................
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Minh Tiên


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tránh xung đột dữ liệu trong access quocdung9999 16 1,694 23-11-16, 11:13 AM
Bài mới nhất: quocdung9999
  Tạo Form đăng ký tài khoản phuc_thanhtien 15 1,019 27-09-16, 12:19 AM
Bài mới nhất: maidinhdan
  [Hỏi] Quá trình thực hiện một lệnh với CSDL dinh_trong_hoa 1 175 02-08-16, 04:06 PM
Bài mới nhất: ongke0711
  [Help] lệnh tìm kiếm và hiển thị kết quả tìm kiếm trên form tvn_hut 12 1,014 25-06-16, 12:22 AM
Bài mới nhất: zinzin8x
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 42 17,043 12-06-16, 12:28 PM
Bài mới nhất: lehongduc

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ