正如标题所述,我有一个用于数据输入的访问表单。此表单必须加载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秒钟无法响应。无论如何,有没有优化它来更快地加载?
答案 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应该可以正常工作。
并且,当然,将组合框设置从值列表更改为表/查询