Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизБыстрый поиск при помощи TTable Найти похожие ветки
← →
Nikkkkk (2003-08-18 15:46) [0]Уважаемые мастера,
как осуществить быстрый поиск записи по заданному условию. Какая команда работает быстрее всего. Если не трудно, небольшой пример.
Заранее спасибо.
← →
Bob (2003-08-18 15:52) [1]Если по ключевому полю - TTable.FindNearest() прокатывае на ура
← →
Семен Сорокин (2003-08-18 15:54) [2]быстрее ИМХО запрос (TQuery) работает
← →
MsGuns (2003-08-18 15:54) [3]Locate
← →
Nikkkkk (2003-08-18 16:05) [4]Пробую
Table1.FindNearest(["1",strtodate("01.07.03")]);
выдает ошибку:
cannot use array or field values with Expression inexes
что бы это могло занчить ???
← →
Nikkkkk (2003-08-18 16:06) [5]индекс выглядит так:
STR(GURN,3)+DTOS(DATOTG)+STR(NOMDOK,7) (FoxPro)
← →
Nikkkkk (2003-08-18 16:26) [6]Ну, чо же все замолчали, я знаю что Query ищет все и быстро, но с его помощью выбрать 20 записей из 500000 тоже не слишком быстро, как быть, подскажите мастера. Как осуществить поиск, отталкиваясь от индекса STR(GURN,3)+DTOS(DATOTG)+STR(NOMDOK,7)???
← →
Nikkkkk (2003-08-18 16:36) [7]
!!! ПОМОГИТЕ ПЛИИИИЗЗЗЗЗ !!!
← →
koks (2003-08-18 17:09) [8]Я бы сделал так:
создал бы для всех записей поле (строковое в твоем случае), в которое бы автоматом при изменении-добавлении записи заносилось значение, но которому ты будешь их отбирать (твое индексное выражение).
ну а дальше - фильтр...
И вообще - 500 000 записей - это мало...
Я вообще очень настороженно отношусь к фильтрам по выражению в BDE, да еще к FoxPro-шным таблицам.
← →
Nikkkkk (2003-08-18 17:24) [9]
> создал бы для всех записей поле (строковое в твоем случае),
> в которое бы автоматом при изменении-добавлении записи заносилось
> значение, но которому ты будешь их отбирать (твое индексное
> выражение).
> ну а дальше - фильтр...
> И вообще - 500 000 записей - это мало...
>
> Я вообще очень настороженно отношусь к фильтрам по выражению
> в BDE, да еще к FoxPro-шным таблицам.
я не могу добавлять никакие поля в таблицу, по условию моей задачи, потому что в них постоянно работают другие пользователи. Мне необходимо сделать выборку из одной базы, потом по результату сделанной выборки, произвести выборку из другой таблицы, поэтому 500000 записей это я сказал примерно. На самом деле их намного больше. Индекс в этой таблице уже существует (он описан мною выше), этот индекс сортирует записи по дате ввода. Мне же необходимо перейти (как можно быстрее) на запись с датой ввода 01.месяц.год, и далее при помощи TTabe.next добраться до 31.месяц.год. Так вот, этот то самый быстрый переход у меня и занимает минуту-полторы. А мне бы хотелось узнать, нет ли какой-нибудь стандартной процедуры поиска (дипа Фоксовской seek), для быстрого перехода к первой по счету подходящей записи ???
Заранее спасибо.
← →
Соловьев (2003-08-18 17:26) [10]select t1.*
from table t1
where t1."date" between :p1 and :p2
← →
Nikkkkk (2003-08-18 17:31) [11]
> Соловьев © (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:32) [12]
> SQL запросами пользоваться не могу, таблицы открыты только
> для чтения
бред. может быть только наоборот.
← →
Nikkkkk (2003-08-18 17:33) [13]
> бред. может быть только наоборот.
это о чем ???
← →
Соловьев (2003-08-18 17:35) [14]SQL запросами можешь пользоваться.
← →
koks (2003-08-18 17:37) [15]повторюсь - ты сам придумываешь себе сложности... Все проще. Использую TQuery.
← →
Nikkkkk (2003-08-18 17:40) [16]
> Соловьев © (18.08.03 17:35) [14]
> SQL запросами можешь пользоваться.
Могу, умею, и постоянно пользуюсь. Но в моей задаче возникла необходимость работать с базами данных FoxPRO 2.5 (Dos). Так что полный доступ пришлось отключить, т.к. при редактировании записей, TQuery создает свой индекс, и изменения из под FoxPRO не видны. TTable работает пока без глюков. А при попытке сделать запрос к таблице(открытой только для чтения) на сервере, выдает ошибку: Can not acces dyrectory. и т.д.
← →
ОХ (2003-08-18 17:42) [17]> SQL запросами пользоваться не могу
Давно не использую TTable,но насколько припоминаю
при открытии TTable, автоматически формируется запрос
Select * from Table_Name order by field1
← →
Nikkkkk (2003-08-18 17:44) [18]
> ОХ (18.08.03 17:42) [17]
> > SQL запросами пользоваться не могу
> Давно не использую TTable,но насколько припоминаю
> при открытии TTable, автоматически формируется запрос
> Select * from Table_Name order by field1
В TTable есть свойство Readonly, в TQuery нет.
← →
Bob (2003-08-18 17:46) [19]TQuery по умолчанию тоже ReadOnly
← →
Соловьев (2003-08-18 17:47) [20]
> Can not acces dyrectory. и т.д.
Private dir у алиаса?
и что за сервер? файл-сервер?
← →
Nikkkkk (2003-08-18 17:49) [21]
> Соловьев © (18.08.03 17:47) [20]
>
> > Can not acces dyrectory. и т.д.
>
> Private dir у алиаса?
> и что за сервер? файл-сервер?
алиас я не создавал, прописываю пути к таблицам из ini-файла, а читается все с файл-сервера.
← →
ОХ (2003-08-18 17:53) [22]>В TTable есть свойство Readonly, в TQuery нет
А чем плох RequestLive у TQuery?
← →
Соловьев (2003-08-18 17:54) [23]
> алиас я не создавал,
ну так создай.
If no value is specified for PrivateDir, the BDE automatically stores temporary files in the directory current at the time the BDE was initialized.
← →
MsGuns (2003-08-18 17:57) [24]А вообще надо бы, ИМХО, исследовать св-ва и методы TSession, TDataBase, TTable, TQuery
← →
Соловьев (2003-08-18 17:58) [25]Note: For applications that run directly from a networked file server, the application should set PrivateDir to a user’s local drive to improve performance and to prevent temporary files from being created on the server where they might conflict with temporary files created by other instances of the application.
← →
Anatoly Podgoretsky (2003-08-18 18:12) [26]Для быстрого передхода по такому индексу надо использовать GotoKey
← →
Nikkkkk (2003-08-19 09:30) [27]Уважаемые мастера, продолжим тему.
Создал я алиас для своего приложения, прописал в netfiledir путь к таблицам на сервере. В privatedit - "D:\TEMP\" подключил к алиасу Query1 и Query2. При session1.active:=True выдает ошибку network initialization failed. File or directoty does not exist.
← →
Nikkkkk (2003-08-19 09:36) [28]вяло все таки с утра форум работает, не все еще проснулись(а может кто и не ложился).
← →
Anatoly Podgoretsky (2003-08-19 09:40) [29]Что такое netfiledir?
Зачем отдельная сессия, она нужна?
По сообщению ты куда обращаешься, что отсутствует или недоступно
← →
Nikkkkk (2003-08-19 09:46) [30]
> Anatoly Podgoretsky © (19.08.03 09:40) [29]
> Что такое netfiledir?
> По сообщению ты куда обращаешься, что отсутствует или недоступно
Netfiledir - адрес таблиц на сетевом диске.
> Зачем отдельная сессия, она нужна?
делаю по совету:
Соловьев © (18.08.03 17:54) [23]
> По сообщению ты куда обращаешься, что отсутствует или недоступно
я обращаюсь на сервер, к таблицам открытым только для чтения. Я так думаю алиас мне посоветовали создать для того, чтобы в нем указать privatedit - "D:\TEMP\", но все равно ведь не пашет.
← →
Соловьев (2003-08-19 09:57) [31]
> Nikkkkk (19.08.03 09:46) [30]
алиас не обязателен. при работе с БД через BDE автоматически создается Session. У него есть св-во PrivateDir
← →
Anatoly Podgoretsky (2003-08-19 10:05) [32]По твоим словам "Создал я алиас для своего приложения, прописал в netfiledir путь к таблицам на сервере." выходит, что ты гдето в алиасе прописал netfiledir, если не так, то зачем тебе алиас?
алиас с privatedir никак не связан, это прерогатива сессии
Вообще то у тебя глубокие провалы в базах данных и чего ты в них полез.
← →
DenK_vrtz (2003-08-19 10:07) [33]> Nikkkkk,
>я обращаюсь на сервер, к таблицам открытым только для чтения
в чем они открыты для чтения? или сетевой ресурс открыт для чтения? права доступа к сетевому русурсу корректно прописаны?
смотри сообщение от Anatoly Podgoretsky © (19.08.03 09:40) "По сообщению ты куда обращаешься, что отсутствует или недоступно".
← →
sniknik (2003-08-19 10:50) [34]Индекс сложный с выражениями, фоксовый, вряд ли добьешся от BDE нормальной работы с ним (ну нет полной поддержки фокса, чего поделаеш).
возьми сторонний компонент типа (не настаиваю, но сам пользуюсь, хотя есть побыстрее) Halcyon. как раз нет поддержки Query только таблицы(это и надо?), зато поддержка фокса/и.др. и вычисляемых/сложных индексов.
поддержка Halcyon-а не больше чем фокс 2.5(или 2.6(?)), но тебе пойдет (2.5 упоминалось).
к примеру поиск по индексу (это для клипера, тот же компонент)
TDest.IndexFileInclude(PDest+"\DiscCrd.Ntx");
TDest.IndexName:= "DISCCRD";
TDest.First;
UpEdit:= 0;
UpAdd:= 0;
while not TSour.Eof do begin
st:= TSour.Fields[MasT2[1]].AsString;
if st[1] = "!" then while length(st) < 25 do st:= st+"Z"
else st:= Copy(St, 1, CutDiscontLength)+StringOfChar(" ", 25-CutDiscontLength);
if TDest. Find(" 4"+st+" 0 0 0 0 0" , True, False) then begin
TDest.Edit;
UpEdit:= UpEdit+ 1;
end else begin
TDest.Append;
UpAdd:= UpAdd+ 1;
end;
.....
индекс здесь
TDest.Active:= True;
TDest.IndexOn(BaseDir+"\DiscCrd.Ntx", "", "PADR(STR(Type,3,0),3) + PADR(CODE,25) + STR(GR1,6,0) + STR(GR2,6,0) + STR(GR3,6,0) + STR(GR4,6,0) + STR(GR5,6,0)", "", Duplicates, Ascending);
правда одно выражение (функцию индексную) мне пришлось переписать, работала не так как наша версия клипера, а нужна была полная совместимость.
Halcyon можно взять сдесь
http://www.vodonosov.newmail.ru/develop/develop.htm
← →
Anatoly Podgoretsky (2003-08-19 11:22) [35]sniknik © (19.08.03 10:50) [34]
Для чтения пойдет, если конечно не будет проблемы с языком таблицы. Вот если бы дело шло про Клиппер, то тогда да, более серьезные проблемы, а так на чтение как правило работает почти без проблем, если не делать фильтрацию по диапазону.
← →
sniknik (2003-08-19 11:47) [36]Anatoly Podgoretsky © (19.08.03 11:22) [35]
я так понял, что только чтение (что у BDE без проблем) это у него искуственное ограничение (гдето он писал, может не в этом топике, и именно потому чно нормально записать не может индексы рушатся), а так может попытатся сделать полную совместимость (и редактировать из своей проги, и так чтобы фокс не порушился). ну хотя бы попытается.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.01 c