![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый поиск при помощи TTable [D6, dBase, FoxPro]
Nikkkkk © (2003-08-18 15:46:00)
Уважаемые мастера,
как осуществить быстрый поиск записи по заданному условию. Какая команда работает быстрее всего. Если не трудно, небольшой пример.
Заранее спасибо.
Nikkkkk (2003-08-18 17:40:00) [21]
> Соловьев © (18.08.03 17:35) [14]
> SQL запросами можешь пользоваться.
Могу, умею, и постоянно пользуюсь. Но в моей задаче возникла необходимость работать с базами данных FoxPRO 2.5 (Dos). Так что полный доступ пришлось отключить, т.к. при редактировании записей, TQuery создает свой индекс, и изменения из под FoxPRO не видны. TTable работает пока без глюков. А при попытке сделать запрос к таблице(открытой только для чтения) на сервере, выдает ошибку: Can not acces dyrectory. и т.д.
koks (2003-08-18 17:37:00) [22]
повторюсь - ты сам придумываешь себе сложности... Все проще. Использую TQuery.
Соловьев (2003-08-18 17:35:00) [23]
SQL запросами можешь пользоваться.
Nikkkkk (2003-08-18 17:33:00) [24]
> бред. может быть только наоборот.
это о чем ???
Соловьев (2003-08-18 17:32:00) [25]
> SQL запросами пользоваться не могу, таблицы открыты только
> для чтения
бред. может быть только наоборот.
Nikkkkk (2003-08-18 17:31:00) [26]
> Соловьев © (18.08.03 17:26) [10]
> select t1.*
> from table t1
> where t1."date" between :p1 and :p2
SQL запросами пользоваться не могу, таблицы открыты только для чтения, как справочники...
SORRY
за то что не сказал раньше
необходима какая то процедура, которую поддерживает TTable, связанная и индексом...
Соловьев (2003-08-18 17:26:00) [27]
select t1.*
from table t1
where t1."date" between :p1 and :p2
Nikkkkk (2003-08-18 17:24:00) [28]
> создал бы для всех записей поле (строковое в твоем случае),
> в которое бы автоматом при изменении-добавлении записи заносилось
> значение, но которому ты будешь их отбирать (твое индексное
> выражение).
> ну а дальше - фильтр...
> И вообще - 500 000 записей - это мало...
>
> Я вообще очень настороженно отношусь к фильтрам по выражению
> в BDE, да еще к FoxPro-шным таблицам.
я не могу добавлять никакие поля в таблицу, по условию моей задачи, потому что в них постоянно работают другие пользователи. Мне необходимо сделать выборку из одной базы, потом по результату сделанной выборки, произвести выборку из другой таблицы, поэтому 500000 записей это я сказал примерно. На самом деле их намного больше. Индекс в этой таблице уже существует (он описан мною выше), этот индекс сортирует записи по дате ввода. Мне же необходимо перейти (как можно быстрее) на запись с датой ввода 01.месяц.год, и далее при помощи TTabe.next добраться до 31.месяц.год. Так вот, этот то самый быстрый переход у меня и занимает минуту-полторы. А мне бы хотелось узнать, нет ли какой-нибудь стандартной процедуры поиска (дипа Фоксовской seek), для быстрого перехода к первой по счету подходящей записи ???
Заранее спасибо.
koks (2003-08-18 17:09:00) [29]
Я бы сделал так:
создал бы для всех записей поле (строковое в твоем случае), в которое бы автоматом при изменении-добавлении записи заносилось значение, но которому ты будешь их отбирать (твое индексное выражение).
ну а дальше - фильтр...
И вообще - 500 000 записей - это мало...
Я вообще очень настороженно отношусь к фильтрам по выражению в BDE, да еще к FoxPro-шным таблицам.
Nikkkkk (2003-08-18 16:36:00) [30]
!!! ПОМОГИТЕ ПЛИИИИЗЗЗЗЗ !!!
Nikkkkk (2003-08-18 16:26:00) [31]
Ну, чо же все замолчали, я знаю что Query ищет все и быстро, но с его помощью выбрать 20 записей из 500000 тоже не слишком быстро, как быть, подскажите мастера. Как осуществить поиск, отталкиваясь от индекса STR(GURN,3)+DTOS(DATOTG)+STR(NOMDOK,7)???
Nikkkkk (2003-08-18 16:06:00) [32]
индекс выглядит так:
STR(GURN,3)+DTOS(DATOTG)+STR(NOMDOK,7) (FoxPro)
Nikkkkk (2003-08-18 16:05:00) [33]
Пробую
Table1.FindNearest(["1",strtodate("01.07.03")]);
выдает ошибку:
cannot use array or field values with Expression inexes
что бы это могло занчить ???
MsGuns (2003-08-18 15:54:00) [34]
Locate
Семен Сорокин (2003-08-18 15:54:00) [35]
быстрее ИМХО запрос (TQuery) работает
Bob (2003-08-18 15:52:00) [36]
Если по ключевому полю - TTable.FindNearest() прокатывае на ура