Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизИндексы для DBF Найти похожие ветки
← →
Patrick (2003-09-29 08:28) [0]Посоветуйте, пожалуйста, какие компоненты лучше применять для доступа к DBF, причем необходима поддержка индексов Clipper"а (*.NTX), ибо создавать свои как-то затруднительно (Exclusive) в положении false. Таблица постоянно кем-то открыта.
← →
sniknik (2003-09-29 08:39) [1]Halcyon, сам пользуюсь именно изза Clipper и (*.NTX)
http://www.vodonosov.newmail.ru/develop/develop.htm
(есть и другие, этот мне больше нравится, есть исходники полностью на дельфях можно исправлять, хотя он немного тормознее других именно изза этого)
← →
Patrick (2003-09-29 08:52) [2]Премного благодарен.
← →
Ильш (2003-09-30 09:28) [3]А есть еще Merant !!! И тоже неплох !!!
← →
Patrick (2003-09-30 16:08) [4]Попробовал Halcyon, один вопрос как искать по составному индексу
например
HalcyonDataset1.IndexOn(...,"FirstName+SecondName+LasName",...)
то каким образом
HalcyonDataSet1.FindKey(?),
пробовал и HalcyonDataSet1.FindKey([Value1+Value2+Value3]) и
HalcyonDataSet1.FindKey([Value1,Value2,Value3]) (хотя так неправильно), всё равно не получается.
← →
sniknik (2003-09-30 16:27) [5]есть свой метод Find, скачай help по нему (Halcyon, там же, либо по ссылке, очень поможет).
← →
Patrick (2003-09-30 17:55) [6]Find также пробовал, я почти уверен в том, что
IndexOn(...,"Firstname+SecondName+Lastname",...) не делает ALLTRIM каждого поля, но почему-то
IndexOn(...,"ALLTRIM(Firstname)+ALLTRIM(SecondName)+ALLTRIM(Lastname)",...) что-то ругается относительно длины строки выражения, странно.
← →
sniknik (2003-09-30 18:07) [7]создание составного индекса
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 18:14) [8]Спасибо
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.016 c