![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Построение индекса CDX-файла . HELP! [D5, dBase, FoxPro]
nic418 © (2002-08-16 10:22:00)Задача в следующем: В связи с переходом с FoxPro на SQL2000, ведётся таблица в SQL, а Dbf-файл поддерживается автоматически. Нужно обеспечить восстановление Dbf&Cdx-файлов по SQL, в т.ч. и восстанавливать индексы.
Реализуется в D5 через BDE -> AddIndex. Типа
TabDbf.AddIndex("ALFA", "SUBSTR(KPROC,1,1)+ALFA+KODP", [ixExpression]);
мне же надо построить индекс, который бы Фокс понимал как
TAG = ALFA и Index expr KODP & Index filter: PPL="1".
(это эквивалентно Select ...From ... Where PPL="1" имеющий индекс KODP
Это реализовано в Apollo и Halcyon , но обработка Dbf через BDE сделана еже файлов для 50 и переходить ... труба.
Если подскажите - буду благодарен.
Николай kivc406@mail.ru or golubyh@ahxk.ru
Desdechado (2002-08-17 19:03:00) [1]во-во. с фоксом только на чтение. источник - Borland.
elv (2002-08-17 13:39:00) [2]Не могу сослаться на источник, не помню, но ч-з BDE не стоит работать с cdx. Особенно если cdx содержит выражения.
sniknik (2002-08-16 21:09:00) [3]Б-дь и точно не дошла третий раз рамблер чертов отказ дает.
ладно заодно тебе пример вызова хотя это и не сложно
MyDbiAddIndex(Table1, "ALFA", "SUBSTR(KPROC,1,1)+ALFA+KODP");
sniknik (2002-08-16 21:05:00) [4]у тебя основная проблема в том чтобы составной индекс сделать? похоже. В Local SQL вроде не позволяется, я покопался в старом коде нашол процедуру которой делал так (оказалось очень и очень редко) в общем вот почти один в один из хелпа по Dbi
procedure MyDbiAddIndex(Tbl: TTable; sTag: DBINAME; sIndex: DBIKEYEXP);
var
NewIndex: IDXDesc;
begin
if not Tbl.Active then Tbl.Open;
NewIndex.szTagName := sTag;
NewIndex.bPrimary := False;
NewIndex.bUnique := False;
NewIndex.bDescending := False;
NewIndex.bMaintained := True;
NewIndex.bSubset := False;
NewIndex.bExpIdx := True;
NewIndex.iFldsInKey := 1;
NewIndex.aiKeyFld[0] := 2;
NewIndex.szKeyExp := sIndex;
NewIndex.szKeyCond := "";
NewIndex.bCaseInsensitive := False;
NewIndex.iBlockSize := 0;
Check(DbiAddIndex(Tbl.dbhandle, Tbl.handle, PChar(Tbl.TableName),
szFOXPRO, NewIndex, nil));
end;
ну в общем должон разобратся.
p.s. cory за задержку почту тока дома проверил.
на случай если не дошла.....
nic418 (2002-08-16 12:00:00) [5]sniknik
Извини за ошибку в ник-е.
Может быть бросишь CREATE INDEX для моего случая(ни разу не использовал). Lev=25 стоит.
Спасибо
sniknik (2002-08-16 11:50:00) [6]никогда не пользовался AddIndex по крайней мере после того как узнал о замечательной SQL команде CREATE INDEX (не относится к Halcyon и др.комп. не имеющим SQL).
попробуй так гораздо проще и в больщинстве случаев быстрей.
тебе не надо ничего переделывать надо попробовать, установка LEVEL = 25 должна заставить твойкод генерить CDX индексы. проверь на совместимость и дальше решай ...
не перевирай ники, могут обидется.
nic418 (2002-08-16 10:53:00) [7]snicnic
Если не трудно, брось на мыло синтаксис соотв-го AddIndex
Mike Kouzmin
Имел в веду, что в комплексе ~ 50 обрабатываемых SQL2000 таблиц с соответствующим сервисом(восстановление CDX-файлов)- всё через BDE.
sniknik (2002-08-16 10:34:00) [8]попробуй в BdeAdmine у драйвера dBase LEVEL = 25 установить.
не факт что получится, у меня работало (совместимость с FoxPro 2.5 doc) но на здесь на форуме после такого моего ответа говорили не получалось.
скорее всего пытались с более поздними версиями фокса стыковатся, если у тебя с твоим не получится сразу бросай и переходи на Halcyon.
выдержка из хелпа
Type of table format used to create dBASE tables. Can be 7 for dBASE 7.0 table format, 5 for dBASE 5.0 table format, 4 for dBASE 4.0 table format, or 3 for dBASE III and dBASE III PLUS table formats. Use 25 for FoxPro. Default: 7
Mike Kouzmine (2002-08-16 10:27:00) [9]>Это реализовано в Apollo и Halcyon , но обработка Dbf через BDE сделана еже файлов для 50 и переходить ... труба.
Не совсем понял