![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как настроить ADO что бы быстрее работало с dbf,а то [D7, dBase, FoxPro]
ceval © (2004-12-31 09:28:00)Как настроить ADO что бы быстрее работало с dbf,а то
долго открывает
Пробывал крутить с CursorLocation менял ClUseServer
и CLUseClient не помогло
Спасибо
ceval (2005-01-05 20:19:00) [1]Sniknik просто для меня в первую очередь просилось в глаза "индексный файл имеет не то имя (должно совпадать с dbf-ным)"
Я тоже взял и пробывал на других компонентах
Начал делать на halcyon'е 6 тут возникла проблема с поискам
....
try
if Fmain.Table_cenpok.Locate('bsh;sh',VarArrayOf ([edit1.Text,Edit2.text]),[loCaseInsensitive])
then ModalResult:=mryes
else ModalResult:=mrno
except
......
Один и тодже код использывал при поиске ADO и при использывании
Halcyon в ADO ищет в Halcyon нет - (дело в том что я использую около 10 dbf-файлов в большой половине работает а в некоторых нет)
ceval (2005-01-05 20:17:00) [2]Удалено модератором
Примечание: дубль
sniknik (2005-01-05 19:44:00) [3]> Тут ты прав sniknik [13]
т.е. в остальных случаях я не прав? будь добр скажи где, а то ведь не усну буду мучится искать в чем моя неправота. ;о))
> А что можно сделать в этом случаи ?
взять компонент который это понимает, благо валом их (ктото говорил штук 300, я когда искал, нашол, скачал, проверил 28(примерно) остановился на halcyon-е. тебе он может и не подойти, версию фокса ты так и не уточнил...).
ceval (2005-01-05 19:13:00) [4]Тут ты прав sniknik [13] так сложилось еще до меня все индекстные файлы имеют имя файла dbf + i-на конце XXX.dbf XXXi.cdx(
индексный файл имеет не то имя (должно совпадать с dbf-ным))
А что можно сделать в этом случаи ?
sniknik (2005-01-05 19:02:00) [5]> В том то и дело что индексов в списке IndexName нет ?
значит и индексов нет, вообще. (снят признак в файле, индексный файл порушен (нет заголовка, описаний), индексный файл имеет не то имя (должно совпадать с dbf-ным), возможно директория/имя по русски/с пробелами поэтому движок его не находит, и т.д. сразу все не смогу предположить, что возможно)
ceval (2005-01-05 18:32:00) [6]sniknik [11]
> Что ДЕЛАТЬ ??
пользуйся готовыми индексами которые найдеш в списке IndexName компанента (если нужны другие/новые сделай в фоксе).
В том то и дело что индексов в списке IndexName нет ?
ы.з.[6] еще раз внимательно прочитаю обязательно
sniknik (2005-01-05 17:05:00) [7]используеш поля не входяшее в индекс. при локальном курсоре это "знак" для ADO что нужно сделать переиндексацию (временную на рекордсете но не в таблице) для серверного эта же операция предлагается драйверу который ее не поддерживает.
> Если я правельно разобрался в АДо нельзя подключить индекстный файл как в BDE
неправильно, cdx это не файловый индекс который нужно подключать (компаундный, насколько помню термин ;) смысл в том что там несколько индексов в одном, обрашаются к ним по тегам, а подключается он (и в BDE тоже, опять же насколько помню) автоматически по признаку индексированности в файле *.dbf (если признак есть то подключается)
подключаются же файловые индексы с расширениями *.idx (фокс) *.ntx (dBase/клиппер).
> Что ДЕЛАТЬ ??
пользуйся готовыми индексами которые найдеш в списке IndexName компанента (если нужны другие/новые сделай в фоксе). прежде чем задать еще вопрос на эту тему перечитай [6] внимательно по поводу "фенечек". ;о)
ceval (2005-01-05 16:04:00) [8]Большое огромное спасибо всем за помощь !!
Я тут помучился и уменя получилось следующие :
поставил Driver={Microsoft dBase VFP Driver (*.dbf)} таблица 17164 записей (при локальном
9,2 сек, а при серверном 2,4 сек конечно по быстрее будет)
Но у меня возникла другая проблема ИНДЕКСАМИ
Если я правельно разобрался в АДо нельзя подключить индекстный файл как в BDE
table.Indexfiles.Add('ktcpind.cdx');
table.IndexName:='izd';
В ADO есть INdexFielName
При попытке открыть
ADOTable1.TableName:='ktcp';
ADOTable1.Active:=true;
ADOTable1.IndexFieldNames:='odcc;oicc';
ADoTable установлен dBase VFP Driver и северный курсор выдает ошибку
"Выполняемая приложением операция не поддерживается службой доступа"
А если стоит локальнай курсор то открывает без проблем
Что ДЕЛАТЬ ?? (почти по Герцину :) )
sniknik (2005-01-04 17:33:00) [9]Anatoly Podgoretsky © (04.01.05 13:20) [7]
если через jet подключился значит есть хорошие шансы что выйдет.
но вообщето да, не обратил внимания.
ceval
с VFP драйвером открытие с серверным курсором намного быстрее (непонятно почему у тебя не получилось) чем с локальным (сам попробовал открыть большую таблицу ~200тыс записей, на локальном 9,5сек на серверном около 1 сек, да не прямое открытие, которое будет 0 сек занимать но всетаки быстрее)
если уж так критично, и базу не поменять то поиши обертку (/компанент) для ODBC-шной библиотеки odbc32.dll. (правда может и не помочь, если принцип реализован на уровне драйвера... т.е. сам драйвер работает не на открытом файле, а с перекачкой в рекордсет и работает уже с ним. что вполне возможно)
msguns (2005-01-04 15:10:00) [10]ADO вообще работает значительно медленнее с локалками (см.sniknik © (04.01.05 12:16) [6] 2-й абзац). Биде открывает курсор существенно быстрее (нету тормозов при открытии формы). Однако преимущества биде очень быстро превращаются в недостатки при больших объемах: ADO как работало "повильно", так и работает, а биде начинает тормозить не по-детски. Да и существенные траблы с откатами-подтверждениями, что приводит к слету индексов и ремонту БД. Часто с потерями информации. В ADO же подтвержденные данные не теряются (т.е. если прога получила сигнал о том, что апдейт завершен, можно быть уверенным, что в базе все изменения сохранились и сама база корректна). Чего нельзя сказать и биде. За скорость "реакции" приходится платить пониженной надежностью.
Anatoly Podgoretsky (2005-01-04 13:20:00) [11]ceval © (04.01.05 09:20) [5]
Что значит медленнее, у тебя с БДЕ совсем не работает, то есть скорость нулевая.
sniknik © (04.01.05 12:16) [6]
[1] не получится смотри абзац выше, у него ФоксПро неизвестной версии.
sniknik (2005-01-04 12:16:00) [12]понимаеш разницу между локальным и клиент серверным методами?
при локальном открытие таблици это - просто открытие файла и "навигация" в нем перемещение по записям, при клиент серверном открытие это - чтение файла на сервере и перекачка запрошенных данных на клиента, навигация уже в них (полученном рекордсете). естественно будет медленнее, вопрос насколько... если сильно а размер таблиц маленький то скорее всего глюк в коде.
ADO разрабатывалось для клиент серверного метода и работает так даже с локальными базами, роль сервера выполняет провайдер данных, такой как jet например. правда у jet-а есть подобная "фенечка" как работа с локальными данными локально что достигается установкой серверного курсора (и еще чегото там посмотри в хелпе на функцию seek в нотациях) работать будет (должно) быстрее но так как все идет через COM обьект все одно немного(!!!) медленнее (глазом не усечеш) чем при прямом открытии файла, само чтение в COM обьекте для dbf/db делается через BDE (такая вот особенность, читай хелп лоя jet-а).
VFP по моему всегда так работает, но у него есть свои "фенечки" (например нет нормальной работы с индексами, создание удаление, в отсутствии базового файла)
слова "очень медление" дают основание что ты просто "не справился с управлением" ;), не смог правильно настроить. пробуй еще (если не хочеш всетаки внять голосу разума [1] ;о))).
ceval (2005-01-04 09:20:00) [13]Так я пробывал и Provider=Microsoft.Jet.OLEDB.4.0 и Driver={Microsoft dBase Driver (*.dbf)} и Driver={Microsoft FoxPro VFP Driver (*.dbf)} но все равно работает очень медление чем в BDE
Anatoly Podgoretsky (2004-12-31 12:20:00) [14]А что же ты молчал, что у тебя FoxPro, для него используй АДО с соответствующим провайдером OLEDB
ceval (2004-12-31 12:07:00) [15]Пробывал на BDE но при открытии индекстного файла *.CDX
выдает :
Procudtion index files missing corrupt or cannot interpret index key
и открывает в режиме Open read only без индексов
sniknik (2004-12-31 11:13:00) [16]что именно надо ускорить?
если открытие таблиц то ставь серверный курсор (не помогло значит чтото напортачил), если "пробежку" по датасетам то локальный. если и то и другое то зависит от провайдера, не все могут в локальном режиме работать (вообще ADO это для клиент серверных "отношений" ;о)).
и в любом случае если ты собираешся с клиент сервером работать мотодами файл сервера/локалки, то скорости не жди.
> Используй БДЕ
Anatoly Podgoretsky (2004-12-31 10:04:00) [17]Используй БДЕ