Tăng tốc độ cho file access sử dụng mô hình Front End / Back End

  • Thread starter VAS
  • Ngày gửi
V

VAS

Guest
Cty mình sử dụng ctrình viết trên access – Front End / Back End và gặp vấn đề là chương trình bị chậm khi có nhiều ngươi cùng sử dụng. Mình đã áp dụng một mẹo nhỏ và thấy có tác dụng nên muốn được chia sẻ cùng các bạn.

1/ Tăng tốc độ cho Combo Box và giới hạn độ dài của Dropdown list

Mẹo được sử dụng ở đây là chúng ta không gán row source cho combo box . Combo box sẽ được gán row source sau khi người nhập liệu gõ 3 ký tự đầu tiên.

Chúng ta có 1 Table tên My_Words và một Combo Box tên Field1_Combo

Sử dụng đọan Code sau:

Private Sub Field1_Combo_Change()
Dim strText As String

strText = Nz(Me.Field1_Combo.Text, "")

If Len(strText) > 2 Then
Me.Field1_Combo.RowSource = "Select keywords from " _
& "My_Words " _
& "where keywords like '" & strText & "*' " _
& "order by keywords"
Me.Field1_Combo.Dropdown
End If
End Sub
2/ Tăng tốc cho Form

Cũng cùng một mẹo như trên , record source & row source sẽ được gán khi form load

Private Sub Form_Load()
Me.RecordSource = "qryLargeTable"
Me.txtSomeField.RowSource = _
"SELECT SomeField " & _
"FROM qryLargeTable " & _
"GROUP BY SomeField " & _
"ORDER BY SomeField;"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Me.RecordSource = ""
Me.cboFindRecord.RowSource = ""
End Sub

Hi vọng sẽ giúp gì được cho bạn.

VAS
 
Khóa học Quản trị dòng tiền
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear VAS,
----------
Rất hữu ích đấy chứ ạ!
Nhưng giá như trong bài viết của VAS nói cụ thể hơn nguyên nhân làm chậm máy buộc ta phải viết các thủ tục trên (nếu có nhiều màn hình và có rất nhiều điều khiển phải làm như vậy thì cũng hơi mệt...) thì thuyết phục hơn nữa!
Theo tôi hiểu thì Data Source chỉ có hiệu lực lúc "run time". Vậy có nhất thiết phải LET/GET tháo tháo - lắp lắp như thế không?
 
Sửa lần cuối:
V

VAS

Guest
Dear Đào Việt Cường,

Cám ơn lời động viên của bạn, thật sự VAS không thấy quá vất vả trong việc thay đổi sang cách dùng mới, đơn giản chỉ là xóa recordsource của form ( SELECT Query1.[No], Query1....) và thêm đọan code Form_Load/ Form_Unload.

Để thuận lợi hơn bạn có thể store các câu lệnh SQL ở Tag property cho các combo box và subform.

Private Sub Form_Load()
Dim ctl As Control

Me.RecordSource = "qryLargeTable"

For Each ctl In Me.Controls
Select Case ctl.Properties("ControlType")
Case acComboBox, acListBox
ctl.RowSource = ctl.Tag
Case acSubform
ctl.Form.RecordSource = ctl.Form.Tag
Case Else
'do nothing
End Select
Next ctl

Set ctl = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ctl As Control

Me.RecordSource = ""

For Each ctl In Me.Controls
Select Case ctl.Properties("ControlType")
Case acComboBox, acListBox
ctl.RowSource = ""
Case acSubform
ctl.Form.RecordSource = ""
Case Else
'do nothing
End Select
Next ctl

Set ctl = Nothing
End Sub


Mình đã thử và kết quả cực kỳ khả quan, còn những vấn đề khác Bạn Đào Việt Cường đưa ra thì mình xin học hỏi từ các cao thủ khác từ diễn đàn.

Thân

VAS
 
Sửa lần cuối:

Xem nhiều

Webketoan Zalo OA