powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / А есть ли в Access функции поиска по массиву?
25 сообщений из 35, страница 1 из 2
А есть ли в Access функции поиска по массиву?
    #32731538
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть доволно большая присоединенная таблица (.dbf), по кот. необходимо постоянно в процессе работы осуществлять поиск в разных местах программы... Открывать/Закрывать каждый раз (при обращениях из разных мест - форм, запросов и т.п.) рекордсет накладно (по времени). Решил Открывать его один раз при запуске базы и обнолять его по надобности. Но даже в этом случае поиск по нему (.FindFirst и т.п.) оччень медленно :(. Вот думаю, может его в массив перекинуть, но как тогда искать в нем? Не найду чего-то...

Помогите советом, пожалуйста!
Борис
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731554
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без доп. информации о целях и задачах поиска можно посоверовать только локальную копию большой присоединенной таблицы с грамотными индексами и DLookup.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731568
Andrew O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше вместо массива использовать коллекцию, быстрее и проще.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731577
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цели и задачи:
есть присоединенная таблица .dbf 1С бухгалтерии, по кот. в "он-лайн" в базе пользователями делаются запросы и проч. статистика. Так вот запросы по ней делаются оччень медленно. Физически она (таблица 1С) расположена на том же сервере, где и сама база (серверная часть, таблицы).
Работаю над увеличением скорсти доступа к ней.
Пробовал открывать рекордсет с разными параметрами (dbOpenDynamic/dbOpenDynaset/dbOpenSnapshot), открывать только при запуске базы и обновлять по запросу пользователя, при этом делая поиск по загруженному рекордсету. Но все-равно медленно...

Заметил такую особенность:
Если вместо UNC-пути для этой присоединенной таблицы типа \\server\baza указывать (через подключение сет.диска) Диск:\baza, работает несколько быстрее, но не на много.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731579
N_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЛучше вместо массива использовать коллекцию, быстрее и проще.Уже не первый раз наталкиваюсь на рекомендации использовать коллекции. Объяснте неграматному, чем они быстрее и проще? Или имеется ввиду скорость написания кода?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731580
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно по-подробнее про коллекцию (синтаксис и проч.)?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731581
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew OЛучше вместо массива использовать коллекцию, быстрее и проще.
А почему быстрее?
А чем проще?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731589
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совет только один:

локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней.
------------------------
Быстрее не придумаешь.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731626
Andrew O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serge Gavrilov Andrew OЛучше вместо массива использовать коллекцию, быстрее и проще.
А почему быстрее?
А чем проще?

Не знаю почему быстрее, но коллекции работают быстрее. :-)
А проще по тому что:
1. Коллекции могут содержать данные любого типа, в том числе объекты и пользовательские типы данных.
2. Можно не заботиться о количестве элементов, просто добавляй и все .Add
3. Если удалить элемент уменьшается и размерность
4. Очень многое в Accesse строится именно на коллекциях.
А вообще читайте хелпы

Синтаксис
Dim colExamp As New Collection
colExamp.Add "Пример"
colExamp.Count
colExamp.Remove
colExamp (Index)
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731633
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "локальная копия"? Мне что, всю таблу импортировать каждый раз в базу? Это не серьезно, т.к. ежемеминутно в ней (1С) делаются изменения (проводки). И разве функции D...(lookup,sum) быстрее работают, чем поиск по уже загруженному рекордсету?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731637
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как выполнять поиск по коллекции? Т.е. по наименованию в каком-либо поле?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731642
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Совет только один:

локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней.
------------------------
Быстрее не придумаешь.

Если уж куда-нибудь переводить базу, так лучше будет в SQL Server.
Но проблема, если я правильно понимаю, база работает в какой-то бух. программе, написанной на Clipper или другой программе, поддерживающей формат dbf. А в Аксе нужно проводить какие-то стат. исследования!?
Так может быть лучше вместо рекордсета использовать запросы?
Если в Аксе не производятся изменения данных, может быть, действительно, стоит осуществлять периодически удаление старой таблицы и импорт новых данных с последующей индексацией. А может быть удастся импортировать данные в каком нибудь подготовленном виде...
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731646
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Что значит "локальная копия"? Мне что, всю таблу импортировать каждый раз в базу? Это не серьезно, т.к. ежемеминутно в ней (1С) делаются изменения (проводки).

А держать открытый рекордсет и обновлять его - это не одно и тоже что таблицу копировать локально?

>>И разве функции D...(lookup,sum) быстрее работают, чем поиск по уже загруженному рекордсету?

Да. Ибо могут пользовать индексы.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731663
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несомненно, коллекция для сотни или даже тысячи объектов - удобная вещь, но удобна она только для ключа, когда по нему вызывается из памяти весь объект. Но как искать в коллекции, содержащей, например, объект "клиент" всех клиентов по фамилии Петров? Так что в данном случае лучше всего забыть про коллекции и пользоваться обычными для БД средствами - индексами, запросами и т.д. ...
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731667
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry aleks2Совет только один:

локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней.
------------------------
Быстрее не придумаешь.

Если уж куда-нибудь переводить базу, так лучше будет в SQL Server.
Но проблема, если я правильно понимаю, база работает в какой-то бух. программе, написанной на Clipper или другой программе, поддерживающей формат dbf. А в Аксе нужно проводить какие-то стат. исследования!?
Так может быть лучше вместо рекордсета использовать запросы?
Если в Аксе не производятся изменения данных, может быть, действительно, стоит осуществлять периодически удаление старой таблицы и импорт новых данных с последующей индексацией. А может быть удастся импортировать данные в каком нибудь подготовленном виде...

База работает под Access'97, а присоединенная таблица .dbf из конфигурации 1С-Бухгалтерия. Просто, например, менеджер в базе выставляет счет, бухгалтер потом в 1С проставляет оплату по нему, и потом этот же менеджер видит эти оплаты и выполняет разного рода анализ... Таблица в принципе не такая большая (5-10 тыс.записей), но нехочется ее таскать постоянно в клиентскую часть (.mde, установленную у пользователей) - она и расти будет и проч...
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731669
Andrew O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
borisbА как выполнять поиск по коллекции? Т.е. по наименованию в каком-либо поле?

Пример из хелпа:

Dim Found, MyObject, MyCollection
Found = False ' Initialize variable.
For Each MyObject In MyCollection ' Iterate through each element.
If MyObject.Text = "Hello" Then ' If Text equals "Hello".
Found = True ' Set Found to True.
Exit For ' Exit loop.
End If
Next
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731679
Andrew O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в моем примере:

Dim Found, MyObject
Found = False
For Each MyObject In colExamp
If MyObject = "Пример" Then
Found = True
Exit For
End If
Next
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731681
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew O borisbА как выполнять поиск по коллекции? Т.е. по наименованию в каком-либо поле?

Пример из хелпа:

Dim Found, MyObject, MyCollection
Found = False ' Initialize variable.
For Each MyObject In MyCollection ' Iterate through each element.
If MyObject.Text = "Hello" Then ' If Text equals "Hello".
Found = True ' Set Found to True.
Exit For ' Exit loop.
End If
Next

А таблицу с, например, 20 полями я загоняю в эту Collection как один объект? Не пойму что-то принцип работы с полями (и ихними типами данных) в этом случае.
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731690
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас там сетка сколько Мбит?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731702
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PА у вас там сетка сколько Мбит?

Сейчас 100. На сервере находится база 1С и база Access (таблицы). Свитчи 3С-омские. Планирую воткнуть в сервер 1Гбит-карточку и соединить с соответствующим каналом свитча. Т.е. будет от сервера до первого коммутатора 1000Мбит (наиболее узкое место), а до клиентов по 100... Не знаю, сильно спасет это жизнь, т.к., например, при обновлении линков на таблы (в клиентской части) загрузка сети составляет 1-2%, и обновления происходят медленно... Правда, как я писал ранее, эта ситуация немного ускоряется при использовании подключенных сет.дисков - вместо \\server\baza Диск:\baza...
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731709
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению.
Не сказано, какой акцесс,характерный размер и количество записей в дбф, есть ли у дбф таблы индекс и надо ли следить за живыми изменениями в таблице.

авторЗаметил такую особенность:
Если вместо UNC-пути для этой присоединенной таблицы типа \\server\baza указывать (через подключение сет.диска) Диск:\baza, работает несколько быстрее, но не на много

наверно, еще "чуть-чуть" выиграешь, если мапировать "базу" будешь просто на букву - \\server\baza -> Disk:\


borisbЕсть доволно большая присоединенная таблица (.dbf), по кот. необходимо постоянно в процессе работы осуществлять поиск в разных местах программы... Открывать/Закрывать каждый раз (при обращениях из разных мест - форм, запросов и т.п.) рекордсет накладно (по времени). Решил Открывать его один раз при запуске базы и обнолять его по надобности. Но даже в этом случае поиск по нему (.FindFirst и т.п.) оччень медленно :(. Вот думаю, может его в массив перекинуть, но как тогда искать в нем? Не найду чего-то...
Помогите советом, пожалуйста!
Борис

открывать один раз и держать таблу открытой - это правильная идея.
Это экономия на времени открытия, которое для линкованной таблицы может оказаться существенным.

Ускорить поиск без индексов на большой таблице не получится.
Если работать с АДО, и использовать локальный курсор, то можно для рекордсета создать локальные индексы по полям поиска

типа
MyRs("SearchField").Properties("Optimize")=True - создать (локальный) индекс по полю
MyRs("SearchField").Properties("Optimize")=False - убить индекс

Альтернатива - совет от aleks2
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731726
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictoshaК сожалению.
Не сказано, какой акцесс,характерный размер и количество записей в дбф, есть ли у дбф таблы индекс и надо ли следить за живыми изменениями в таблице.

авторЗаметил такую особенность:
Если вместо UNC-пути для этой присоединенной таблицы типа \\server\baza указывать (через подключение сет.диска) Диск:\baza, работает несколько быстрее, но не на много

наверно, еще "чуть-чуть" выиграешь, если мапировать "базу" будешь просто на букву - \\server\baza -> Disk:\


borisbЕсть доволно большая присоединенная таблица (.dbf), по кот. необходимо постоянно в процессе работы осуществлять поиск в разных местах программы... Открывать/Закрывать каждый раз (при обращениях из разных мест - форм, запросов и т.п.) рекордсет накладно (по времени). Решил Открывать его один раз при запуске базы и обнолять его по надобности. Но даже в этом случае поиск по нему (.FindFirst и т.п.) оччень медленно :(. Вот думаю, может его в массив перекинуть, но как тогда искать в нем? Не найду чего-то...
Помогите советом, пожалуйста!
Борис

открывать один раз и держать таблу открытой - это правильная идея.
Это экономия на времени открытия, которое для линкованной таблицы может оказаться существенным.

Ускорить поиск без индексов на большой таблице не получится.
Если работать с АДО, и использовать локальный курсор, то можно для рекордсета создать локальные индексы по полям поиска

типа
MyRs("SearchField").Properties("Optimize")=True - создать (локальный) индекс по полю
MyRs("SearchField").Properties("Optimize")=False - убить индекс

Альтернатива - совет от aleks2

Объем базы не так велик - порядка 100 тыс.записей во всех таблицах. Сама работа с базой (не включая анализ этой присоединенной .dbf) ведется быстро - при одновременных 10 пользователях нет тормозов.

Все операции ведутся в DAO, с АДО не работал....
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731729
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew OНе знаю почему быстрее, но коллекции работают быстрее. :-)
Вы сами измеряли скорость? Или опираетесь на чужие данные?
Andrew O
А проще по тому что:
1. Коллекции могут содержать данные любого типа, в том числе объекты и пользовательские типы данных.
2. Можно не заботиться о количестве элементов, просто добавляй и все .Add
3. Если удалить элемент уменьшается и размерность
4. Очень многое в Accesse строится именно на коллекциях.

Почти все, что вы указали относится к возможностям использования классов, но не простоты использования
Andrew O
А вообще читайте хелпы

Спасибо за совет :)
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731750
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
borisb Mari.PА у вас там сетка сколько Мбит?

Сейчас 100. На сервере находится база 1С и база Access (таблицы). Свитчи 3С-омские. Планирую воткнуть в сервер 1Гбит-карточку и соединить с соответствующим каналом свитча. Т.е. будет от сервера до первого коммутатора 1000Мбит (наиболее узкое место), а до клиентов по 100... Не знаю, сильно спасет это жизнь, т.к., например, при обновлении линков на таблы (в клиентской части) загрузка сети составляет 1-2%, и обновления происходят медленно... Правда, как я писал ранее, эта ситуация немного ускоряется при использовании подключенных сет.дисков - вместо \\server\baza Диск:\baza...

1) проверьте разрешение имен в сети (DNS,Wins)
2) личный опыт - работа по модему с базой (oracle), диски с которых подкачивались формы, меню и отчеты подключила через FTP. Ну а в вашем случае, раз dbf для открытия все равно вся тащится на клиентскую машину - может проще ее по фтп кинуть и открыть у клиента?
...
Рейтинг: 0 / 0
А есть ли в Access функции поиска по массиву?
    #32731759
borisb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P borisb Mari.PА у вас там сетка сколько Мбит?

Сейчас 100. На сервере находится база 1С и база Access (таблицы). Свитчи 3С-омские. Планирую воткнуть в сервер 1Гбит-карточку и соединить с соответствующим каналом свитча. Т.е. будет от сервера до первого коммутатора 1000Мбит (наиболее узкое место), а до клиентов по 100... Не знаю, сильно спасет это жизнь, т.к., например, при обновлении линков на таблы (в клиентской части) загрузка сети составляет 1-2%, и обновления происходят медленно... Правда, как я писал ранее, эта ситуация немного ускоряется при использовании подключенных сет.дисков - вместо \\server\baza Диск:\baza...

1) проверьте разрешение имен в сети (DNS,Wins)
2) личный опыт - работа по модему с базой (oracle), диски с которых подкачивались формы, меню и отчеты подключила через FTP. Ну а в вашем случае, раз dbf для открытия все равно вся тащится на клиентскую машину - может проще ее по фтп кинуть и открыть у клиента?

Извиняюсь, не понял ;) - а зачем здесь ФТП-то? Сама база (Access) и база 1С (эта самая присоединенная таблица) лежат на ОДНОМ сервере, а клиенты в ЛОК.сети...
DBF-то тащится на клиента, естественно, но делается это редко - при открытии базы и по спец.запросу клиента. Т.о. вся табла "висит" в памяти клиента во время работы с ней.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / А есть ли в Access функции поиска по массиву?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]