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

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

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

локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней.
------------------------
Быстрее не придумаешь.
...
Рейтинг: 0 / 0
11.10.2004, 10:43:41
    #32731626
Andrew O
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
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
11.10.2004, 10:45:46
    #32731633
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
Что значит "локальная копия"? Мне что, всю таблу импортировать каждый раз в базу? Это не серьезно, т.к. ежемеминутно в ней (1С) делаются изменения (проводки). И разве функции D...(lookup,sum) быстрее работают, чем поиск по уже загруженному рекордсету?
...
Рейтинг: 0 / 0
11.10.2004, 10:47:29
    #32731637
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
А как выполнять поиск по коллекции? Т.е. по наименованию в каком-либо поле?
...
Рейтинг: 0 / 0
11.10.2004, 10:49:01
    #32731642
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
aleks2Совет только один:

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

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

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

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

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

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

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

База работает под Access'97, а присоединенная таблица .dbf из конфигурации 1С-Бухгалтерия. Просто, например, менеджер в базе выставляет счет, бухгалтер потом в 1С проставляет оплату по нему, и потом этот же менеджер видит эти оплаты и выполняет разного рода анализ... Таблица в принципе не такая большая (5-10 тыс.записей), но нехочется ее таскать постоянно в клиентскую часть (.mde, установленную у пользователей) - она и расти будет и проч...
...
Рейтинг: 0 / 0
11.10.2004, 10:59:50
    #32731669
Andrew O
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
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
11.10.2004, 11:04:00
    #32731679
Andrew O
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
в моем примере:

Dim Found, MyObject
Found = False
For Each MyObject In colExamp
If MyObject = "Пример" Then
Found = True
Exit For
End If
Next
...
Рейтинг: 0 / 0
11.10.2004, 11:04:43
    #32731681
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
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
11.10.2004, 11:07:25
    #32731690
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
А у вас там сетка сколько Мбит?
...
Рейтинг: 0 / 0
11.10.2004, 11:13:08
    #32731702
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
Mari.PА у вас там сетка сколько Мбит?

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

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

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


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

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

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

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

Альтернатива - совет от aleks2
...
Рейтинг: 0 / 0
11.10.2004, 11:21:39
    #32731726
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
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
11.10.2004, 11:22:26
    #32731729
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
Andrew OНе знаю почему быстрее, но коллекции работают быстрее. :-)
Вы сами измеряли скорость? Или опираетесь на чужие данные?
Andrew O
А проще по тому что:
1. Коллекции могут содержать данные любого типа, в том числе объекты и пользовательские типы данных.
2. Можно не заботиться о количестве элементов, просто добавляй и все .Add
3. Если удалить элемент уменьшается и размерность
4. Очень многое в Accesse строится именно на коллекциях.

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

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

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

1) проверьте разрешение имен в сети (DNS,Wins)
2) личный опыт - работа по модему с базой (oracle), диски с которых подкачивались формы, меню и отчеты подключила через FTP. Ну а в вашем случае, раз dbf для открытия все равно вся тащится на клиентскую машину - может проще ее по фтп кинуть и открыть у клиента?
...
Рейтинг: 0 / 0
11.10.2004, 11:33:19
    #32731759
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А есть ли в Access функции поиска по массиву?
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / А есть ли в Access функции поиска по массиву? / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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