|
|
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Есть доволно большая присоединенная таблица (.dbf), по кот. необходимо постоянно в процессе работы осуществлять поиск в разных местах программы... Открывать/Закрывать каждый раз (при обращениях из разных мест - форм, запросов и т.п.) рекордсет накладно (по времени). Решил Открывать его один раз при запуске базы и обнолять его по надобности. Но даже в этом случае поиск по нему (.FindFirst и т.п.) оччень медленно :(. Вот думаю, может его в массив перекинуть, но как тогда искать в нем? Не найду чего-то... Помогите советом, пожалуйста! Борис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 09:46:47 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Без доп. информации о целях и задачах поиска можно посоверовать только локальную копию большой присоединенной таблицы с грамотными индексами и DLookup. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 09:59:22 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Лучше вместо массива использовать коллекцию, быстрее и проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:14:00 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Цели и задачи: есть присоединенная таблица .dbf 1С бухгалтерии, по кот. в "он-лайн" в базе пользователями делаются запросы и проч. статистика. Так вот запросы по ней делаются оччень медленно. Физически она (таблица 1С) расположена на том же сервере, где и сама база (серверная часть, таблицы). Работаю над увеличением скорсти доступа к ней. Пробовал открывать рекордсет с разными параметрами (dbOpenDynamic/dbOpenDynaset/dbOpenSnapshot), открывать только при запуске базы и обновлять по запросу пользователя, при этом делая поиск по загруженному рекордсету. Но все-равно медленно... Заметил такую особенность: Если вместо UNC-пути для этой присоединенной таблицы типа \\server\baza указывать (через подключение сет.диска) Диск:\baza, работает несколько быстрее, но не на много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:18:44 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
авторЛучше вместо массива использовать коллекцию, быстрее и проще.Уже не первый раз наталкиваюсь на рекомендации использовать коллекции. Объяснте неграматному, чем они быстрее и проще? Или имеется ввиду скорость написания кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:19:26 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Можно по-подробнее про коллекцию (синтаксис и проч.)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:19:41 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Andrew OЛучше вместо массива использовать коллекцию, быстрее и проще. А почему быстрее? А чем проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:19:53 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Совет только один: локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней. ------------------------ Быстрее не придумаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:25:30 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Serge Gavrilov Andrew OЛучше вместо массива использовать коллекцию, быстрее и проще. А почему быстрее? А чем проще? Не знаю почему быстрее, но коллекции работают быстрее. :-) А проще по тому что: 1. Коллекции могут содержать данные любого типа, в том числе объекты и пользовательские типы данных. 2. Можно не заботиться о количестве элементов, просто добавляй и все .Add 3. Если удалить элемент уменьшается и размерность 4. Очень многое в Accesse строится именно на коллекциях. А вообще читайте хелпы Синтаксис Dim colExamp As New Collection colExamp.Add "Пример" colExamp.Count colExamp.Remove colExamp (Index) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:43:41 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Что значит "локальная копия"? Мне что, всю таблу импортировать каждый раз в базу? Это не серьезно, т.к. ежемеминутно в ней (1С) делаются изменения (проводки). И разве функции D...(lookup,sum) быстрее работают, чем поиск по уже загруженному рекордсету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:45:46 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
А как выполнять поиск по коллекции? Т.е. по наименованию в каком-либо поле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:47:29 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
aleks2Совет только один: локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней. ------------------------ Быстрее не придумаешь. Если уж куда-нибудь переводить базу, так лучше будет в SQL Server. Но проблема, если я правильно понимаю, база работает в какой-то бух. программе, написанной на Clipper или другой программе, поддерживающей формат dbf. А в Аксе нужно проводить какие-то стат. исследования!? Так может быть лучше вместо рекордсета использовать запросы? Если в Аксе не производятся изменения данных, может быть, действительно, стоит осуществлять периодически удаление старой таблицы и импорт новых данных с последующей индексацией. А может быть удастся импортировать данные в каком нибудь подготовленном виде... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:49:01 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
>>Что значит "локальная копия"? Мне что, всю таблу импортировать каждый раз в базу? Это не серьезно, т.к. ежемеминутно в ней (1С) делаются изменения (проводки). А держать открытый рекордсет и обновлять его - это не одно и тоже что таблицу копировать локально? >>И разве функции D...(lookup,sum) быстрее работают, чем поиск по уже загруженному рекордсету? Да. Ибо могут пользовать индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:50:02 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Несомненно, коллекция для сотни или даже тысячи объектов - удобная вещь, но удобна она только для ключа, когда по нему вызывается из памяти весь объект. Но как искать в коллекции, содержащей, например, объект "клиент" всех клиентов по фамилии Петров? Так что в данном случае лучше всего забыть про коллекции и пользоваться обычными для БД средствами - индексами, запросами и т.д. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:57:17 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Rivkin Dmitry aleks2Совет только один: локальная копия (в формате Access) большой присоединенной таблицы с грамотными индексами и DLookup по ней. ------------------------ Быстрее не придумаешь. Если уж куда-нибудь переводить базу, так лучше будет в SQL Server. Но проблема, если я правильно понимаю, база работает в какой-то бух. программе, написанной на Clipper или другой программе, поддерживающей формат dbf. А в Аксе нужно проводить какие-то стат. исследования!? Так может быть лучше вместо рекордсета использовать запросы? Если в Аксе не производятся изменения данных, может быть, действительно, стоит осуществлять периодически удаление старой таблицы и импорт новых данных с последующей индексацией. А может быть удастся импортировать данные в каком нибудь подготовленном виде... База работает под Access'97, а присоединенная таблица .dbf из конфигурации 1С-Бухгалтерия. Просто, например, менеджер в базе выставляет счет, бухгалтер потом в 1С проставляет оплату по нему, и потом этот же менеджер видит эти оплаты и выполняет разного рода анализ... Таблица в принципе не такая большая (5-10 тыс.записей), но нехочется ее таскать постоянно в клиентскую часть (.mde, установленную у пользователей) - она и расти будет и проч... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:59:44 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 10:59:50 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
в моем примере: Dim Found, MyObject Found = False For Each MyObject In colExamp If MyObject = "Пример" Then Found = True Exit For End If Next ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:04:00 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
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 как один объект? Не пойму что-то принцип работы с полями (и ихними типами данных) в этом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:04:43 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
А у вас там сетка сколько Мбит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:07:25 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Mari.PА у вас там сетка сколько Мбит? Сейчас 100. На сервере находится база 1С и база Access (таблицы). Свитчи 3С-омские. Планирую воткнуть в сервер 1Гбит-карточку и соединить с соответствующим каналом свитча. Т.е. будет от сервера до первого коммутатора 1000Мбит (наиболее узкое место), а до клиентов по 100... Не знаю, сильно спасет это жизнь, т.к., например, при обновлении линков на таблы (в клиентской части) загрузка сети составляет 1-2%, и обновления происходят медленно... Правда, как я писал ранее, эта ситуация немного ускоряется при использовании подключенных сет.дисков - вместо \\server\baza Диск:\baza... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:13:08 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
К сожалению. Не сказано, какой акцесс,характерный размер и количество записей в дбф, есть ли у дбф таблы индекс и надо ли следить за живыми изменениями в таблице. авторЗаметил такую особенность: Если вместо UNC-пути для этой присоединенной таблицы типа \\server\baza указывать (через подключение сет.диска) Диск:\baza, работает несколько быстрее, но не на много наверно, еще "чуть-чуть" выиграешь, если мапировать "базу" будешь просто на букву - \\server\baza -> Disk:\ borisbЕсть доволно большая присоединенная таблица (.dbf), по кот. необходимо постоянно в процессе работы осуществлять поиск в разных местах программы... Открывать/Закрывать каждый раз (при обращениях из разных мест - форм, запросов и т.п.) рекордсет накладно (по времени). Решил Открывать его один раз при запуске базы и обнолять его по надобности. Но даже в этом случае поиск по нему (.FindFirst и т.п.) оччень медленно :(. Вот думаю, может его в массив перекинуть, но как тогда искать в нем? Не найду чего-то... Помогите советом, пожалуйста! Борис открывать один раз и держать таблу открытой - это правильная идея. Это экономия на времени открытия, которое для линкованной таблицы может оказаться существенным. Ускорить поиск без индексов на большой таблице не получится. Если работать с АДО, и использовать локальный курсор, то можно для рекордсета создать локальные индексы по полям поиска типа MyRs("SearchField").Properties("Optimize")=True - создать (локальный) индекс по полю MyRs("SearchField").Properties("Optimize")=False - убить индекс Альтернатива - совет от aleks2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:16:07 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
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, с АДО не работал.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:21:39 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
Andrew OНе знаю почему быстрее, но коллекции работают быстрее. :-) Вы сами измеряли скорость? Или опираетесь на чужие данные? Andrew O А проще по тому что: 1. Коллекции могут содержать данные любого типа, в том числе объекты и пользовательские типы данных. 2. Можно не заботиться о количестве элементов, просто добавляй и все .Add 3. Если удалить элемент уменьшается и размерность 4. Очень многое в Accesse строится именно на коллекциях. Почти все, что вы указали относится к возможностям использования классов, но не простоты использования Andrew O А вообще читайте хелпы Спасибо за совет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:22:26 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
borisb Mari.PА у вас там сетка сколько Мбит? Сейчас 100. На сервере находится база 1С и база Access (таблицы). Свитчи 3С-омские. Планирую воткнуть в сервер 1Гбит-карточку и соединить с соответствующим каналом свитча. Т.е. будет от сервера до первого коммутатора 1000Мбит (наиболее узкое место), а до клиентов по 100... Не знаю, сильно спасет это жизнь, т.к., например, при обновлении линков на таблы (в клиентской части) загрузка сети составляет 1-2%, и обновления происходят медленно... Правда, как я писал ранее, эта ситуация немного ускоряется при использовании подключенных сет.дисков - вместо \\server\baza Диск:\baza... 1) проверьте разрешение имен в сети (DNS,Wins) 2) личный опыт - работа по модему с базой (oracle), диски с которых подкачивались формы, меню и отчеты подключила через FTP. Ну а в вашем случае, раз dbf для открытия все равно вся тащится на клиентскую машину - может проще ее по фтп кинуть и открыть у клиента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:27:44 |
|
||
|
А есть ли в Access функции поиска по массиву?
|
|||
|---|---|---|---|
|
#18+
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-то тащится на клиента, естественно, но делается это редко - при открытии базы и по спец.запросу клиента. Т.о. вся табла "висит" в памяти клиента во время работы с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2004, 11:33:19 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32731642&tid=1671191]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 314ms |

| 0 / 0 |
