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

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi VAS, 7 Tháng ba 2006.

3,627 lượt xem

  1. VAS

    VAS Thành viên hoạt động

    Bài viết:
    30
    Đã được thích:
    1
    Nơi ở:
    www.danketoan.com
    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
     
    #1
  2. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    2
    Giới tính:
    Nam
    Nơi ở:
    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?
     
    Last edited: 7 Tháng ba 2006
    #2
  3. VAS

    VAS Thành viên hoạt động

    Bài viết:
    30
    Đã được thích:
    1
    Nơi ở:
    www.danketoan.com
    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
     
    Last edited: 7 Tháng ba 2006
    #3

Chia sẻ trang này