Медленная форма при подключении к VPS для загрузки 2 комбинированных списков - PullRequest
0 голосов
/ 16 мая 2019

Как видно из заголовка, у меня есть форма доступа, которую я использую для ввода данных. Эта форма должна загрузить 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 голосов
/ 17 мая 2019

Ну, список «значений», управляющий полем со списком, подходит примерно для 100, может быть, 200 строк.

После этого?

Не используйте список значений. Просто вставьте sql прямо в источник данных со списком / списком.

Например:

Me.Text18.Rowsource = "ВЫБЕРИТЕ tbl5localidades.ID, tbl5localidades.NombreLocalidad FROM tbl5localidades;"

Фактически, поскольку sql не является динамическим, просто поместите sql прямо в источник строки, и вам вообще не понадобится какой-либо код.

Вы не упомянули, насколько велика эта таблица, управляющая полем со списком, но Access постарается сделать все возможное, чтобы вытащить только строку PK из этого списка, пока вы не откроете поле со списком. Таким образом, не используйте «значение / список», но используйте sql для поля со списком. Вы также можете объявить набор записей на уровне форм и вставить его в поле со списком при загрузке формы в качестве источника данных, но используя только тот SQL-файл, который у вас есть, и никакой код, скорее всего, не будет работать лучше.

Список значений также имеет жесткий предел около 4000 символов, и, таким образом, это еще одна стена, которую вы можете легко преодолеть.

НЕ используйте для этого транзитный запрос - клиент не может оптимизировать PT-запрос, поэтому плоскость, связанная с таблицей Jane, и плоскость Jane sql должны работать нормально.

И, конечно же, измените настройку поля со списком значений на таблицу / запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...