- Tham gia
- 18/3/08
- Bài viết
- 8,306
- Được thích
- 15,849
- Giới tính
- Nam
- Nghề nghiệp
- Làm ruộng.
Nếu áp dụng giống y chang như bài #35 thì cần phải điều chỉnh 1 tí mới đúng kết quả.Nếu vậy thì nó đã bị lộ ở bài #35 rồi anh
Nếu áp dụng giống y chang như bài #35 thì cần phải điều chỉnh 1 tí mới đúng kết quả.Nếu vậy thì nó đã bị lộ ở bài #35 rồi anh
Có gì đâu mà ăn mừng anh, máy hôm nay chưa có thời gian với lại em dang nghiên cứu cái encryption nên chưa đưa hội đồng sư phạm xem trước hihihiChúc mừng em. Khi nào "ra lò" nhớ mở tiệc mừng nhé.
Vẫn theo kiểu truyền thống là gửi và nhận gói tin hay là kiểu mới JSON? Hay là cả hay đều không phải? Có thể bật mí chút không emCó gì đâu mà ăn mừng anh, máy hôm nay chưa có thời gian với lại em dang nghiên cứu cái encryption nên chưa đưa hội đồng sư phạm xem trước hihihi
hihih có gì ghê gớm đâu anh, ai hiểu sao cứ làm vậy, mỗi người mỗi kiểu mà, đã làm trên Win thì cứ bám theo ông MS mà làm. trên android thì theo ông Google, trên Linux thì theo LinuxVẫn theo kiểu truyền thống là gửi và nhận gói tin hay là kiểu mới JSON? Hay là cả hay đều không phải? Có thể bật mí chút không em
Sub Page_HLMT_1()
With CreateObject("ADODB.Recordset")
.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
.PageSize = 20
MsgBox .PageCount
End With
End Sub
Cũng tương tự với bài tách dữ liệu ở Bài #28 nhưng dưới đây ta khai thác đến 'Page' trong Recordset như sau:
Tôi đưa ví dụ chia mỗi trang ra 20 dòng và sau đó chạy code trên với dữ liệu bài số 1 thì ta được 6 trang. Như vậy ta có thể khai thác thêm để đưa dữ liệu trong Recordset cho từng trang xuống sheet.Mã:Sub Page_HLMT_1() With CreateObject("ADODB.Recordset") .Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1 .PageSize = 20 MsgBox .PageCount End With End Sub
Đoạn này không có tác dụng ghi dữ liệu xuống bảng tính ở sheet khác à anh Hai Lúa ơi T_TCũng tương tự với bài tách dữ liệu ở Bài #28 nhưng dưới đây ta khai thác đến 'Page' trong Recordset như sau:
Tôi đưa ví dụ chia mỗi trang ra 20 dòng và sau đó chạy code trên với dữ liệu bài số 1 thì ta được 6 trang. Như vậy ta có thể khai thác thêm để đưa dữ liệu trong Recordset cho từng trang xuống sheet.Mã:Sub Page_HLMT_1() With CreateObject("ADODB.Recordset") .Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1 .PageSize = 20 MsgBox .PageCount End With End Sub
Ý bạn là làm theo kiểu "Lazy loading"? Để đơn giản hơn thì bạn tạo một nút gọi nôm na là nút "Xem Thêm", bạn quy định đổ dữ liệu bao nhiêu dòng xuống sheet thì hiện cái nút đó phìa bên dưới của vùng dữ liệu, nếu người dùng thích thì click vào đó xem tiếp, đến khi đổ hết dữ liệu thì nút đó không hiện lên nữa.Cảm ơn anh @Hai Lúa Miền Tây về bài em viết em đang quan tâm.
Em có nhu cầu đưa dữ liệu ra màn hình. Do dữ liệu dài mà muốn hiển thị đầy đủ nên cần đưa dữ liệu theo cách trôi dần từng dòng lên trên màn hình 1 cách tự động.
Màn hình hiển thị được 10 dòng, lần đầu em đưa 10 record đầu tiên (record 0-9), sau 5s sẽ hiển thị từ record 1 đến 10, sau 5s tiếp theo lại query từ record 2-11, cứ thế cho đến khi hết dữ liệu. (Bản chất 1 muốn trượt dữ liệu 1 cách mượt nhất và trượt tự động thông qua lệnh Application.Ontime)
Qua những bài viết đầu tiên em cũng đã hiểu 1 chút tuy nhiên vẫn còn lúng túng. Anh hướng dẫn giúp tình huống trên nhé.
Cảm ơn anh
Cảm ơn befaint, với OT thì những trao đổi liên quan đến lập trìn OT rất khó hiểu chỉ biết chạy code xem kết quả là cái gì bạn ạ.. hic hicGhi xuống đâu thì mình ghi thôi. @@
'Người ta' ghi chú code đó có tác dụng gì rồi mà. Tức là nếu kết quả query trả về 99 dòng, thì chia 99 thành n phần, trong đó (n-1) phần = 20 dòng, phần n có 99 - 20*(n-1) dòng
View attachment 249238
Không phải rồi anh.Ý bạn là làm theo kiểu "Lazy loading"?
Không khéo làm kiểu này chỉ khó chịu cho người dùng hơn và chưa chắc là thời gian đợi ít hơn so với thời gian đổ dữ liệu 1 lần.Không phải rồi anh.
Tác giả có cái màn hình treo ở giữa lối đi, hiện chữ thật to, được 10 dòng.
Giờ muốn kết quả chạy trôi trôi theo phương thẳng đứng, trượt từng dòng một theo thời gian. Kiểu như trình diễn PowerPoint, như kiểu đoạn kết thúc bộ phim có chạy nội dung tác giả kịch bản, đạo diễn, diễn viên, kỹ thuật âm thanh/ sánh sáng ấy.
Em chỉ diễn giải giúp tác giả thôi.Không khéo làm kiểu này chỉ khó chịu cho người dùng hơn và chưa chắc là thời gian đợi ít hơn so với thời gian đổ dữ liệu 1 lần.
Nếu có thời gian em thử giúp bạn ấy vấn đề này nhéEm chỉ diễn giải giúp tác giả thôi.
Tác giả cần làm vậy để cung cấp thông tin cho những người cần đọc nó. Kiểu như sàn chứng khoán đó anh.
Và tất nhiên không quan tâm lắm về thời gian đổ dữ liệu kia, chỉ quan tâm kết quả cuối cùng là dữ liệu chạy chạy trên màn hình thôi.
----
Phương án có thể là 30 phút, hay vài tiếng gì đó mới truy vấn 1 lần. Kết quả ghi vào sheet tạm hoặc biến tạm, sau đó mới đẩy ra màn hình theo ý tác giả.
Em chỉ lanh chanh vậy thôi.Nếu có thời gian em thử giúp bạn ấy vấn đề này nhé
Anh ghi dữ liệu xuống Sheet2 theo file mẫu bài 1 nhéCảm ơn befaint, với OT thì những trao đổi liên quan đến lập trìn OT rất khó hiểu chỉ biết chạy code xem kết quả là cái gì bạn ạ.. hic hic
Sub Page_HLMT_2()
Dim intPage As Integer, i As Integer, intSq As Integer, intRecord As Integer
With CreateObject("ADODB.Recordset")
.Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1
.PageSize = 20
Sheet2.Cells.ClearContents
For intPage = 1 To .PageCount
For intRecord = 1 To .PageSize
i = i + 1
intSq = intSq + 1
Sheet2.Range("A" & i) = intSq
Sheet2.Range("B" & i) = !ID
Sheet2.Range("C" & i) = !Code
Sheet2.Range("D" & i) = !Price
.MoveNext
If .EOF Then Exit For
Next
i = i + 1
Next
End With
End Sub
Cảm ơn anh Hai Lúa, OT test thử thấy kết quả rồi , dữ liệu xen lẫn 1 dòng trống 20 dòng một bảng, như vậy mỗi dòng trống là ta có thể thêm dòng tổng hợp vào những dòng này phải không anh, cảm ơn anh Hai Lúa, OT đã hiểu ứng dụng như chắc muốn viết thêm dòng tổng cộng thì phải thêm 1 sub bằng VBA thôi ạ chứ chư biết cách thêm trong đoạn code ADO này của Anh, hihiAnh ghi dữ liệu xuống Sheet2 theo file mẫu bài 1 nhé
Mã:Sub Page_HLMT_2() Dim intPage As Integer, i As Integer, intSq As Integer, intRecord As Integer With CreateObject("ADODB.Recordset") .Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1 .PageSize = 20 Sheet2.Cells.ClearContents For intPage = 1 To .PageCount For intRecord = 1 To .PageSize i = i + 1 intSq = intSq + 1 Sheet2.Range("A" & i) = intSq Sheet2.Range("B" & i) = !ID Sheet2.Range("C" & i) = !Code Sheet2.Range("D" & i) = !Price .MoveNext If .EOF Then Exit For Next i = i + 1 Next End With End Sub
Em có thể thêm dòng tổng cho mỗi trang và dòng tổng cộng của cột 'Price' cho toàn bộ trang qua code đơn giản trên để dễ hình dung.
Như vậy ngắn gọn hơn chứ anh Hai LúaAnh ghi dữ liệu xuống Sheet2 theo file mẫu bài 1 nhé
Mã:Sub Page_HLMT_2() Dim intPage As Integer, i As Integer, intSq As Integer, intRecord As Integer With CreateObject("ADODB.Recordset") .Open "Select * from [Sheet1$]", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1 .PageSize = 20 Sheet2.Cells.ClearContents For intPage = 1 To .PageCount For intRecord = 1 To .PageSize i = i + 1 intSq = intSq + 1 Sheet2.Range("A" & i) = intSq Sheet2.Range("B" & i) = !ID Sheet2.Range("C" & i) = !Code Sheet2.Range("D" & i) = !Price .MoveNext If .EOF Then Exit For Next i = i + 1 Next End With End Sub
Em có thể thêm dòng tổng cho mỗi trang và dòng tổng cộng của cột 'Price' cho toàn bộ trang qua code đơn giản trên để dễ hình dung.
Sub Page_HLMT_2()
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
.pagesize = 20
While Not .EOF
Sheet2.Range("A" & Rows.Count).End(xlUp).Offset(2).CopyFromRecordset .DataSource, .pagesize
Wend
End With
End Sub