Ищите библиотеку javascript для обработки загрузки этих файлов на стороне клиента. Я наткнулся на пример javascript и php . Dojo также предлагает загрузку файла s3 на стороне клиента.
Я обнаружил уловку ... для свойства rowSourceType элемента управления combobox необходимо установить значение «Table / List». Дисплей теперь в порядке, но у меня возникла другая проблема с памятью. Поскольку я использую эти наборы записей ADO в своих формах, использование памяти Access увеличивается каждый раз, когда я просматриваю форму. Память не освобождается ни при остановке просмотра, ни при закрытии формы, что делает MS Access нестабильным и регулярно зависает. Я открою вопрос, если не смогу решить эту проблему
Элемент управления "поле со списком" не имеет свойства набора записей. У него есть свойство RowSource, но Access ожидает, что там будет строка SQL.
Вы можете изменить RowSourceType на имя определяемой пользователем функции «обратного вызова». Доступ к справке предоставит вам дополнительную информацию, включая образец кода, если вы укажете RowSourceType и нажмете F1. Я использую этот тип функции, когда хочу предоставить пользователям список доступных отчетов, букв дисков или других данных, которые недоступны с помощью запроса SQL.
Я не понимаю, что вы имеете в виду, говоря в третьем абзаце с в отношении использования данных непосредственно со стороны сервера. Вернее, я не понимаю, в чем проблема со стандартными запросами.
Как было сказано, вы должны получить RowSourceType в «Таблица / Список» (или «Таблица / Запрос», если на французском языке), чтобы результаты запроса отображались в поле со списком.
Проблемы с памятью возникают из-за открытия набора записей (rsPersonne) без его закрытия. Вы должны закрыть их при закрытии / выгрузке формы (но опять же, у вас могут возникнуть проблемы с областью действия, поскольку набор записей объявлен в функции, а не в форме).
Вы также можете попытаться создать и сохранить запрос с помощью встроенного в Access -в создателе запросов и вставьте тот же запрос в RowSource вашего поля со списком. Таким образом запрос проверяется и компилируется в Access.
хороший метод с использованием свойства Recordset, спасибо за подсказку!
Патрик, метод, который вы показали на своей странице, имеет большой недостаток (я тоже пробовал это самостоятельно): список значений может быть только 32 КБ, если вы превысите этот предел, функция выдаст ошибку. У метода обратного вызова есть большой недостаток: он очень медленный и вызывается один раз для каждой записи, что делает его непригодным для использования в более длинном списке. Использование метода набора записей работает очень хорошо. Мне это было нужно, потому что моя строка SQL была длиннее 32 КБ (много значений индекса для WHERE ID IN (x, x, x, x, x ...)).
Вот простая функция, которая использует эту идею для установки набор записей в поле со списком:
' Fills a combobox with the result of a recordset.
'
' Works with any length of recordset results (up to 10000 in ADP)
' Useful if strSQL is longer than 32767 characters
'
' Author: Christian Coppes
' Date: 16.09.2009
'
Public Sub fnADOComboboxSetRS(cmb As ComboBox, strSQL As String)
Dim rs As ADODB.Recordset
Dim lngCount As Long
On Error GoTo fnADOComboboxSetRS_Error
Set rs = fnADOSelectCommon(strSQL, adLockReadOnly, adOpenForwardOnly)
If Not rs Is Nothing Then
If Not (rs.EOF And rs.BOF) Then
Set cmb.Recordset = rs
' enforces the combobox to load completely
lngCount = cmb.ListCount
End If
End If
fnADOComboboxSetRS_Exit:
If Not rs Is Nothing Then
If rs.State = adStateOpen Then rs.Close
Set rs = Nothing
End If
Exit Sub
fnADOComboboxSetRS_Error:
Select Case Err
Case Else
fnErr "modODBC->fnADOComboboxSetRS", True
Resume fnADOComboboxSetRS_Exit
End Select
End Sub
(Функция fnADOSelectCommon открывает набор записей ADO и возвращает его. Функция fnErr показывает окно сообщения с ошибкой, если она была.)
Поскольку эта функция закрывает там открытый набор записей с памятью проблем быть не должно. Я протестировал его и не заметил увеличения объема памяти, который не был освобожден после закрытия формы с помощью полей со списком.
В событии выгрузки формы вы можете дополнительно использовать «Set rs = Me.Comboboxname.Recordset» а затем закройте его. Это не обязательно в отношении памяти,