Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
Подскажите в чем проблема и как её обойти

Пытаюсь засунуть комбобокс список из 13845 наcеленных пунктов, но не получается, комбобокс отображает только 2013 строк.
Access 16, mdb

Заполнение комбобокса при открытии формы
Call ListAddItems(Me.name, "Gorod", "SELECT Goroda.GorodCode, Goroda.Gorod, Goroda.Oblast, Goroda.District FROM Goroda " _
& "ORDER BY Goroda.Gorod;", cnToDataBase)

'Модуль
Function ListAddItems(strNameOfForm As String, ctlList As String, strSQL As String, cnToDataBase As ADODB.Connection)
Dim rs As ADODB.Recordset, strRow As String, NameColonsOfList() As String, i As Long
Set rs = New ADODB.Recordset
rs.Open strSQL, cnToDataBase, adOpenForwardOnly, adLockReadOnly
A = CountRowsInTable(strSQL, cnToDataBase)
If CountRowsInTable(strSQL, cnToDataBase) > 0 Then

    ReDim NameColonsOfList(rs.Fields.count)
    For i = 0 To rs.Fields.count - 1
        NameColonsOfList(i) = rs.Fields(i).name
    Next i

    With Forms(strNameOfForm).Controls(ctlList)
        .RowSourceType = "Value List"
        .ColumnCount = UBound(NameColonsOfList)
        
        Do Until rs.EOF
        strRow = ""
            For i = 0 To UBound(NameColonsOfList) - 1
                strRow = strRow & ";" & rs.Fields(NameColonsOfList(i)).Value
            Next i
            .AddItem Right(strRow, Len(strRow) - 1)
        rs.MoveNext
        Loop
    End With
End If
rs.Close
Set rs = Nothing

End Function


Сообщение было отредактировано: 7 июн 21, 19:03
7 июн 21, 16:26    [22332411]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Valery23
Пытаюсь засунуть комбобокс список из 13845 наcеленных пунктов, но не получается
Даже если получится как с ним работать. А может данные структурировать и сделать зависимые списки (республика,край\область,город\нас.пункт или использовать ОКТМО-есть доступные готовые разработки)

Сообщение было отредактировано: 7 июн 21, 17:01
7 июн 21, 17:06    [22332438]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4755
Valery23
Пытаюсь засунуть комбобокс список из 13845 наcеленных пунктов, но не получается, комбобокс отображает только 2013 строк.
Access 16, mdb

я бы сразу применила не список , а подчиненную ленточную форму, т,к, населенные пункты довольно часто повторяются(особенно мелкие) или меняют хозяина(район, область)

поэтому надо иметь возможность поиска/фильтрации
- по новому/старому названию, по части названия
- по старому/новому хозяину
- по типу населенного пункта
....

многоуровневые списки вас не спасут - только ленточная форма для показа возможных значений

Сообщение было отредактировано: 7 июн 21, 19:20
7 июн 21, 19:28    [22332512]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
ПЕНСИОНЕРКА
..многоуровневые списки вас не спасут ...
Это почему же???
При 3(или4) уровнях структурирования в последнем COMBO будет 10-15, а то и меньше строк
А при поиске..в стране много одноименных населенных пунктов...Ошибки более вероятны,чем при использовании списков

Сообщение было отредактировано: 7 июн 21, 20:11
7 июн 21, 20:12    [22332536]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
sdku,

Ранее я использовал DAO и из прилинкованной таблицы данные легко загружались и использовались. Мне в форме нужен фактически только города, остальные данные, как область, район, код города, используются как справочные и для уточнения конкретного города (много одинаковых названий).
С переходом на ADO прилинковка (по крайней мере в моей исполнении) перестала работать. Убрал все прилинкованные таблицы и оказалось при заполнении комбобокса значениями ("Value List") тоже есть засада. Как я понял свою ошибку, то это ограничение на длину строки в источнике 32 750 формы и контрола в Access [url=https://support.microsoft.com/ru-ru/office/%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8-access-0cf3c66f-9cf2-4e32-9568-98c1025bb47c][/url]
Сделал по другому (данные слава богу отображаются все):
Dim cnToDataBase As ADODB.Connection, rs As ADODB.Recordset, strSQL As String

Set cnToDataBase = GetConnectToDataBase
Forms!Form1.Goroda.RowSource = vbNullString
strSQL = "SELECT Goroda.GorodCode, Goroda.Gorod, Goroda.Oblast, Goroda.District FROM Goroda WHERE (((Goroda.Node)<>'EMS')) ORDER BY Goroda.Gorod;"
Set rs = New ADODB.Recordset
rs.Open strSQL, cnToDataBase, adOpenStatic, adLockReadOnly
Forms!Form1.Goroda.RowSourceType = "Table/Query"
Set Forms!Form1.Goroda.Recordset = rs
rs.Close
Set rs = Nothing

cnToDataBase.Close
Set cnToDataBase = Nothing

Но и тут засада, откуда не ожидал. Не оглядываясь на порядок в запросе, комбобокс отображает в другом порядке: Район, Город, КодГорода, Область. Что делать с порядком столбцов?

К сообщению приложен файл. Размер - 55Kb


Сообщение было отредактировано: 8 июн 21, 15:29
8 июн 21, 14:00    [22332877]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 5155
Вообще-то я где-то в описании встречал, что комбобокс ограничен 10 000 записями. Может я и неправ, но такие цифры у меня в памяти отложились.
8 июн 21, 14:35    [22332902]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
DarkMan
Member

Откуда:
Сообщений: 923
Valery23
Как я понял свою ошибку, то это ограничение на длину строки в источнике 32 750 формы и контрола в Access См.здесь
8 июн 21, 14:50    [22332910]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
Joss,
В случае присваивания рекордсета комбобоксу, отображаются все записи, т.е. все 13845 строк (Вот с отчетами и ADO так не получается, и мне пришлось использовать временные таблицы для размещения данных отчетов). Но вот такое произвольное расположение колонок комбобоксом я вижу впервые (причем изменение положения в запросе ничего не меняет) и пока не знаю решения этой проблемы.
8 июн 21, 14:53    [22332914]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
DarkMan,

Все правильно. У меня не получилось нормально вставить в текст ссылку на туже страницу ;)
8 июн 21, 14:54    [22332917]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
DarkMan
Member

Откуда:
Сообщений: 923
Valery23
Все правильно. У меня не получилось нормально вставить в текст ссылку на туже страницу ;)

Просто между [url=] Здесь нужен текст , или символы[/url] . :))
8 июн 21, 14:58    [22332922]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
DarkMan,

Спасибо, учту на будущее:)
8 июн 21, 15:00    [22332926]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Valery23
....Что делать с порядком столбцов?...
Какой в источнике-такой и в combo
покажите\посмотрите источник combo

Сообщение было отредактировано: 8 июн 21, 15:54
8 июн 21, 15:55    [22332966]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 5230
Valery23
С переходом на ADO
чем вызвано?
8 июн 21, 18:51    [22333045]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
Панург,

Захотелось идти в ногу со временем:)
Тренируюсь перед переходом на SQL server
10 июн 21, 11:08    [22333638]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
sdku,

Поясните.
Последовательность в строке strSQL = "SELECT Goroda.GorodCode, Goroda.Gorod, Goroda.Oblast, Goroda.District FROM Goroda WHERE (((Goroda.Node)<>'EMS')) ORDER BY Goroda.Gorod;" не влияет на последовательность столбцов в комбобоксе.
10 июн 21, 11:11    [22333641]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Valery23
sdku,

Поясните.
Последовательность в строке strSQL = "SELECT Goroda.GorodCode, Goroda.Gorod, Goroda.Oblast, Goroda.District FROM Goroda WHERE (((Goroda.Node)<>'EMS')) ORDER BY Goroda.Gorod;" не влияет на последовательность столбцов в комбобоксе.
А это есть строка по которой создается RS формы и никак не список в COMBO,который выглядит как-то так:
Me.Combo.ROWSOURCE="SELECT...FROM...WHERE поле=" & что-то 'синтаксис зависит от типа данных
(или в окне свойств поля>источник строк-без VBA и RS) смена порядка полей в этом запросе изменит его и в списке
Если Вам только заполнить список при открытии формы, то VBA вообще не нужен

К сообщению приложен файл (tmp.rar - 11Kb) cкачать
10 июн 21, 12:42    [22333709]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Прошу пардону-RS не формы а чего-то-не знамо чего(наверное выборка из таблицы),а главное ЗАЧЕМ
10 июн 21, 12:59    [22333733]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
sdku,

Данные, которые должны отображаться в комбобоксе находятся в таблице в другой базе.
Средство достижения данных - ADODB.
Наполнение комбобокса с помощью ADODB через AddItem не получается ввиду ограничения на длину строки данных, наполнение с помощью рекордсета приводит к странной (по крайней мере для меня) последовательности колонок комбобокса.
Вот кратко о проблеме.
10 июн 21, 13:30    [22333774]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
Valery23
Member

Откуда:
Сообщений: 9
Valery23,

Спасибо всем! Разобрался со странной сортировкой. Оказалось, что требовалось указать расположение курсора rs.CursorLocation = adUseClient.
Теперь комбобокс отображается все записи (13845 наcеленных пунктов) и в правильном порядке.
10 июн 21, 14:03    [22333816]     Ответить | Цитировать Сообщить модератору
 Re: Список и ADO  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7350
Valery23
.....
Тренируюсь перед переходом на SQL server
Никак не "вкурю":почему нельзя выполнить запрос к сторонней БД и не назначить его источником combo???
А если на сервере,мало ли почему, изменят порядок столбцов?+в Вашем коде где коннект к сторонней базе

Сообщение было отредактировано: 10 июн 21, 16:29
10 июн 21, 16:31    [22333943]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить