Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрый поиск при помощи TTable [D6, dBase, FoxPro]


Страницы:   1 2

Nikkkkk ©   (2003-08-18 15:46:00) 

Уважаемые мастера,
как осуществить быстрый поиск записи по заданному условию. Какая команда работает быстрее всего. Если не трудно, небольшой пример.
Заранее спасибо.


sniknik   (2003-08-19 11:47:00) [1]

Anatoly Podgoretsky © (19.08.03 11:22) [35]
я так понял, что только чтение (что у BDE без проблем) это у него искуственное ограничение (гдето он писал, может не в этом топике, и именно потому чно нормально записать не может индексы рушатся), а так может попытатся сделать полную совместимость (и редактировать из своей проги, и так чтобы фокс не порушился). ну хотя бы попытается.


Anatoly Podgoretsky   (2003-08-19 11:22:00) [2]

sniknik © (19.08.03 10:50) [34]
Для чтения пойдет, если конечно не будет проблемы с языком таблицы. Вот если бы дело шло про Клиппер, то тогда да, более серьезные проблемы, а так на чтение как правило работает почти без проблем, если не делать фильтрацию по диапазону.


sniknik   (2003-08-19 10:50:00) [3]

Индекс сложный с выражениями, фоксовый, вряд ли добьешся от 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


DenK_vrtz   (2003-08-19 10:07:00) [4]

> Nikkkkk,
>я обращаюсь на сервер, к таблицам открытым только для чтения

в чем они открыты для чтения? или сетевой ресурс открыт для чтения? права доступа к сетевому русурсу корректно прописаны?

смотри сообщение от Anatoly Podgoretsky © (19.08.03 09:40) "По сообщению ты куда обращаешься, что отсутствует или недоступно".


Anatoly Podgoretsky   (2003-08-19 10:05:00) [5]

По твоим словам "Создал я алиас для своего приложения, прописал в netfiledir путь к таблицам на сервере." выходит, что ты гдето в алиасе прописал netfiledir, если не так, то зачем тебе алиас?

алиас с privatedir никак не связан, это прерогатива сессии

Вообще то у тебя глубокие провалы в базах данных и чего ты в них полез.


Соловьев   (2003-08-19 09:57:00) [6]


> Nikkkkk (19.08.03 09:46) [30]

алиас не обязателен. при работе с БД через BDE автоматически создается Session. У него есть св-во PrivateDir


Nikkkkk   (2003-08-19 09:46:00) [7]


> Anatoly Podgoretsky © (19.08.03 09:40) [29]
> Что такое netfiledir?
> По сообщению ты куда обращаешься, что отсутствует или недоступно

Netfiledir - адрес таблиц на сетевом диске.

> Зачем отдельная сессия, она нужна?

делаю по совету:
Соловьев © (18.08.03 17:54) [23]

> По сообщению ты куда обращаешься, что отсутствует или недоступно

я обращаюсь на сервер, к таблицам открытым только для чтения. Я так думаю алиас мне посоветовали создать для того, чтобы в нем указать privatedit - "D:\TEMP\", но все равно ведь не пашет.


Anatoly Podgoretsky   (2003-08-19 09:40:00) [8]

Что такое netfiledir?
Зачем отдельная сессия, она нужна?
По сообщению ты куда обращаешься, что отсутствует или недоступно


Nikkkkk   (2003-08-19 09:36:00) [9]

вяло все таки с утра форум работает, не все еще проснулись(а может кто и не ложился).


Nikkkkk   (2003-08-19 09:30:00) [10]

Уважаемые мастера, продолжим тему.
Создал я алиас для своего приложения, прописал в netfiledir путь к таблицам на сервере. В privatedit - "D:\TEMP\" подключил к алиасу Query1 и Query2. При session1.active:=True выдает ошибку network initialization failed. File or directoty does not exist.


Anatoly Podgoretsky   (2003-08-18 18:12:00) [11]

Для быстрого передхода по такому индексу надо использовать GotoKey


Соловьев   (2003-08-18 17:58:00) [12]

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.


MsGuns   (2003-08-18 17:57:00) [13]

А вообще надо бы, ИМХО, исследовать св-ва и методы TSession, TDataBase, TTable, TQuery


Соловьев   (2003-08-18 17:54:00) [14]


> алиас я не создавал,

ну так создай.
If no value is specified for PrivateDir, the BDE automatically stores temporary files in the directory current at the time the BDE was initialized.


ОХ   (2003-08-18 17:53:00) [15]

>В TTable есть свойство Readonly, в TQuery нет
А чем плох RequestLive у TQuery?


Nikkkkk   (2003-08-18 17:49:00) [16]


> Соловьев © (18.08.03 17:47) [20]
>
> > Can not acces dyrectory. и т.д.
>
> Private dir у алиаса?
> и что за сервер? файл-сервер?

алиас я не создавал, прописываю пути к таблицам из ini-файла, а читается все с файл-сервера.


Соловьев   (2003-08-18 17:47:00) [17]


> Can not acces dyrectory. и т.д.

Private dir у алиаса?
и что за сервер? файл-сервер?


Bob   (2003-08-18 17:46:00) [18]

TQuery по умолчанию тоже ReadOnly


Nikkkkk   (2003-08-18 17:44:00) [19]


> ОХ (18.08.03 17:42) [17]
> > SQL запросами пользоваться не могу
> Давно не использую TTable,но насколько припоминаю
> при открытии TTable, автоматически формируется запрос
> Select * from Table_Name order by field1

В TTable есть свойство Readonly, в TQuery нет.


ОХ   (2003-08-18 17:42:00) [20]

> SQL запросами пользоваться не могу
Давно не использую TTable,но насколько припоминаю
при открытии TTable, автоматически формируется запрос
Select * from Table_Name order by field1


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо