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

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

Индексы для DBF [D7, dBase, FoxPro]


Patrick ©   (2003-09-29 08:28:00) 

Посоветуйте, пожалуйста, какие компоненты лучше применять для доступа к DBF, причем необходима поддержка индексов Clipper"а (*.NTX), ибо создавать свои как-то затруднительно (Exclusive) в положении false. Таблица постоянно кем-то открыта.


Patrick   (2003-09-30 18:14:00) [1]

Спасибо


sniknik   (2003-09-30 18:07:00) [2]

создание составного индекса

if not FileExists(BaseDir+"\DiscCrd.Ntx") then
try
AddLog("Переиндексация таблици DiscCli.Dbf", FileIndexShow);
TDest.Active:= False;
TDest.TableName:= "DiscCli.Dbf";
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);
TDest.Active:= False;
except
on E: EDataBaseError do DoIfError(E.Message);
else DoIfError("Неизвестная ошибка!");
end;


использование

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;
....


p.s. скачай хелп.


Patrick   (2003-09-30 17:55:00) [3]

Find также пробовал, я почти уверен в том, что
IndexOn(...,"Firstname+SecondName+Lastname",...) не делает ALLTRIM каждого поля, но почему-то
IndexOn(...,"ALLTRIM(Firstname)+ALLTRIM(SecondName)+ALLTRIM(Lastname)",...) что-то ругается относительно длины строки выражения, странно.


sniknik   (2003-09-30 16:27:00) [4]

есть свой метод Find, скачай help по нему (Halcyon, там же, либо по ссылке, очень поможет).


Patrick   (2003-09-30 16:08:00) [5]

Попробовал Halcyon, один вопрос как искать по составному индексу
например
HalcyonDataset1.IndexOn(...,"FirstName+SecondName+LasName",...)
то каким образом
HalcyonDataSet1.FindKey(?),
пробовал и HalcyonDataSet1.FindKey([Value1+Value2+Value3]) и
HalcyonDataSet1.FindKey([Value1,Value2,Value3]) (хотя так неправильно), всё равно не получается.


Ильш   (2003-09-30 09:28:00) [6]

А есть еще Merant !!! И тоже неплох !!!


Patrick   (2003-09-29 08:52:00) [7]

Премного благодарен.


sniknik   (2003-09-29 08:39:00) [8]

Halcyon, сам пользуюсь именно изза Clipper и (*.NTX)
http://www.vodonosov.newmail.ru/develop/develop.htm
(есть и другие, этот мне больше нравится, есть исходники полностью на дельфях можно исправлять, хотя он немного тормознее других именно изза этого)


Наверх

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