Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2013, 14:00   #1
Vylv
 
Регистрация: 27.07.2013
Сообщений: 7
По умолчанию Не могу создать индексный файл для dbf-таблицы

Хочу создать индексный файл из двух разнотипных полей в dbf-таблице. Как мне показалось, утилита Database Desktop создание такого поля не допускает,решил пойти по пути кодирования. Сначала определяю поля таблицы, потом нужный мне индексный файл. Код выглядит так:
Код:
TableStk->Active=false;
     TableStk->DatabaseName="F066_db";
     TableStk->TableType=ttDBase;
     TableStk->TableName="Statkarta_out";
     if (!TableStk->Exists)
        {
         TableStk->FieldDefs->Clear();
         TFieldDef *pNewDef=TableStk->FieldDefs->AddFieldDef();
         pNewDef->Name="Nist";
         pNewDef->DataType=ftInteger;
         pNewDef->Required=true;
         pNewDef=TableStk->FieldDefs->AddFieldDef();
         pNewDef->Name="Date_vip";
         pNewDef->DataType=ftDate;
         pNewDef=TableStk->FieldDefs->AddFieldDef();
         pNewDef->Name="Fam";
         pNewDef->DataType=ftString;
         pNewDef->Size=13;
         pNewDef=TableStk->FieldDefs->AddFieldDef();
         pNewDef->Name="Kodotd";
         pNewDef->DataType=ftInteger;
         // Описание индексов
         TableStk->IndexDefs->Clear();
         TableStk->IndexDefs->Add("NistDtStk","Nist;Date_vip",TIndexOptions() <<ixPrimary << ixUnique);
         TableStk->CreateTable();
         TableStk->Active=true;
        }
Компиляция проходит, но при выполнении возникает ошибка: "Ivalid index descriptor".
Вместо метода Add, пробовал использовать другой метод:

TableStk->IndexDefs->AddIndexDef("NistDtStk","Nist;Date _vip",TIndexOptions() <<ixPrimary << ixUnique,"","",0);

Компилятор выдает ошибку:
[C++ Error] InputStk.cpp(49): E2227 Extra parameter in call to _fastcall TIndexDefs::AddIndexDef()

Как можно выкрутиться из этой ситуации, не уходя все же от dbf-файла?

Последний раз редактировалось Stilet; 13.10.2013 в 14:23.
Vylv вне форума Ответить с цитированием
Старый 19.10.2013, 20:16   #2
Vylv
 
Регистрация: 27.07.2013
Сообщений: 7
По умолчанию

Возникло ощущение, что для dbf-таблиц , с помощью Database Desktop составной индекс из полей разного типа создать нельзя. Индексация выполняется только по первому полю из индексного выражения, которое пропускает компилятор. То что для dbf-таблиц в C++ Builder такое вообще невозможно мне кажется невероятным....Значит пытаться все же искать, создавать программный вариант?
Vylv вне форума Ответить с цитированием
Старый 21.10.2013, 12:51   #3
Vylv
 
Регистрация: 27.07.2013
Сообщений: 7
По умолчанию

Добрые люди, знатоки!...Не дайте разочароваться в жизни!...Я, безусловно, перебрал еще далеко не весь набор возможных вариантов создания мультииндекса для dbf-таблицы, но всякий раз С++ Builder "отшивает" мои попытки! Database Desktop я уже давно забросил.Пытаюсь использовать разные методы компонента ТТавlе, к счастью их не так много. Индекс из одного поля создается без проблем. Компилятор проглатывает и синтаксис метода AddIndex, с перечислением нужных мне полей чрез точку запятой, но индексация при этом таблицы выполняется только по первому полю индексного выражения!... В Fox-e все делается без проблем, правда, я там сам элементы индексного выражения привожу к одному типу!...Ну, не могу поверить, что Bilder уступает ему в такой вроде элементарной вещи!
Vylv вне форума Ответить с цитированием
Старый 21.10.2013, 13:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

почему не сделать нужные индексы в Fox'е?
Правда, не факт, что это бажное антикварное BDE будет поддерживать актуальность индекса данным, при изменении последних из BDE.

И вообще, зачем Вам весь этот антиквариат?!
Неужели нельзя перейти на что-нибудь более-менее актуальное?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2013, 13:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не дайте разочароваться в жизни!
Не используй BDE, используй ADO и разочарований будет намного меньше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.10.2013, 18:24   #6
Vylv
 
Регистрация: 27.07.2013
Сообщений: 7
По умолчанию

Спасибо за рекомендации! К сожалению тематика форума не позволяет мне комментировать мою ситуацию...:-) Обыкновенная горбольница, где работают программы, написанные еще на Клиппере...Рассыпаются винты.....Накоплен большой объем dbf-файлов и т.д.
Но меня уже просто заел сам факт с трудностью создания индекса из нескольких разнотипных полей в Builder-e. Не верится, что такое в нем невозможно, даже при использовании BDE...
Vylv вне форума Ответить с цитированием
Старый 21.10.2013, 19:45   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Понимаю.
Несмотря на давно завершенные отношения с БДЕ попробую помочь вот чем:
По идее фраза
Цитата:
"Ivalid index descriptor
должна означать, что BDE драйвер не понимает формат DBF именно той версии, что использует клиппер (ибо он в наше время печальный). Посему для начала попробуй разные вариации в BDE Admin настроить Native драйвер. Поиграться с его параметрами. Но вообще прими на заметку - BDE тебе не лучший помошник.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2013, 17:37   #8
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Vylv
Пробовал?
Код:
TableStk->IndexDefs->Add("","Nist", TIndexOptions() << ixPrimary << ixUnique); 
TableStk->IndexDefs->Add("NistDtStk","Nist;Date_vip", TIndexOptions() << ixCaseInsensitive);
Мне кажется, что твой создаваемый индекс не может быть первичным...
FataLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт dbf таблицы в такую же dbf таблицу betirsolt БД в Delphi 34 31.07.2011 20:43
не могу создать выходной файл novice2010 Помощь студентам 2 20.09.2010 14:55
сохранение результата выборки из DBF файла в DBF файл с такой же структурой таблицы GazimagomedovM БД в Delphi 5 06.11.2007 17:58
Не могу изменить DBF файл Wanderer БД в Delphi 3 31.05.2007 20:23