连接到VPS以加载2个组合框的慢速访问表单

时间:2019-05-15 22:19:19

标签: mysql ms-access odbc

正如标题所述,我有一个用于数据输入的访问表单。此表单必须加载2个组合框,其中一个用于提供更高级的名称,另一个用于存储位置名称。它所做的另一件事是检查用户是否有权访问该表单。这是在加载事件上。

Private Sub Form_Load()
'Verify User Access
If Globales.Accesos(Me.Name) = 0 Then
    MsgBox "No tiene accesos a esta area."
    DoCmd.Close acForm, Me.Name
End If

'Set Null Values
    Me.Text14 = Null
    Me.Text16 = Null
    Me.Text18 = Null
    Me.Combo26 = Null
    Me.Text73 = Null
    Me.Text28 = Null
    Me.Text50 = Null
    Me.Text42 = Null
    Me.Text46 = Null
    Me.Text44 = Null
    Me.Text40 = Null
    Me.Text48 = Null
    Me.Text30 = Null
    Me.Text36 = Null
    Me.Text38 = Null
    Me.Text52 = Null
    Me.Text54 = Null
    Me.Text75 = Null

'Set Combobox Localidades Values
Dim db2 As DAO.Database
Dim rs2 As DAO.Recordset
Dim SQL2 As String

    Set db2 = OpenDatabase("", False, False, Globales.ConnString)

    SQL2 = "SELECT tbl5localidades.ID, tbl5localidades.NombreLocalidad FROM tbl5localidades;"
    Set rs2 = db2.OpenRecordset(SQL2, dbOpenDynaset, dbReadOnly)
    With Text18
    .RowSourceType = "Value List"
    .BoundColumn = 1
    .ColumnCount = 2
    .ColumnWidths = "0;1in"
    End With
    With rs2
    .MoveFirst
    Do Until .EOF
    Text18.AddItem !ID & ";" & !NombreLocalidad
    .MoveNext
    Loop
    End With

    rs2.Close
    Set rs2 = Nothing

'db2.Close
'Set db2 = Nothing

   'Set Combobox Suplidores Values
Dim db3 As DAO.Database
Dim rs3 As DAO.Recordset
Dim SQL3 As String

 Set db3 = OpenDatabase("", False, False, Globales.ConnString)

    SQL3 = "SELECT tbl6suplidores.ID, tbl6suplidores.NombreSuplidor FROM tbl6suplidores ORDER BY tbl6suplidores.NombreSuplidor;"
    Set rs3 = db3.OpenRecordset(SQL3, dbOpenDynaset, dbReadOnly)
    With Combo26
    .RowSourceType = "Value List"
    .BoundColumn = 1
    .ColumnCount = 2
    .ColumnWidths = "0;1in"
    End With
    With rs3
    .MoveFirst
    Do Until .EOF
    Combo26.AddItem !ID & ";" & !NombreSuplidor
    .MoveNext
    Loop
    End With

    rs3.Close
    Set rs3 = Nothing

'db3.Close
'Set db3 = Nothing
End Sub

这可以按预期工作,但是速度如此之慢,以至于Acces大约30秒钟无法响应。无论如何,有没有优化它来更快地加载?

1 个答案:

答案 0 :(得分:0)

好吧,驱动组合框的“值”列表大约可以容纳100行,也许是200行。

那之后?

请勿使用值列表。只需将sql直接推到combo / listbox数据源中即可。

例如:

Me.Text18.Rowsource =“选择tbl5localidades.ID,tbl5localidades.NombreLocalidad FROM tbl5localidades;”

实际上,由于sql不是动态的,因此只需将sql放在行源中,就根本不需要任何代码。

您没有提到驱动组合框的表格有多大,但是Access会尽最大努力仅从该列表中拉入行PK,直到打开组合框。因此,请勿使用“值/列表”,而将sql用于组合框。您还可以在表单级别声明记录集,并将其作为数据源推入表单加载时的组合框中,但是仅使用您拥有的sql,没有代码可能会最好地工作。

值列表也有大约4000个字符的硬限制,因此这是您可以轻松击中的另一堵墙。

请勿为此使用传递查询-客户端无法优化PT查询,因此,平面Jane链接表和平面Jane sql应该可以正常工作。

并且,当然,将组合框设置从值列表更改为表/查询