Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Определение индексов при создании таблицы в Builder

Ответить
Настройки темы
C/C++ - Определение индексов при создании таблицы в Builder

Аватара для Apock

Пользователь


Сообщения: 75
Благодарности: 3

Профиль | Отправить PM | Цитировать


Доброго времени суток всем. Нужна помощь такого плана - пишу прогу на С++ Builder 6. При вводе кое-каких данных и нажатии на кнопку должна создаваться таблица(если её ещё нет) и вноситься в неё данные. В суть программы думаю вникать не буду сейчас, так как не в этом суть. Примерный код такой:
Код: Выделить весь код
AnsiString b=ComboBox4->Text+".db";//таблица имеет имя, вводимое или выбираемое в списке
  if(access(b.c_str(),0)!=0)//проверяем существование таблицы
 {
  Table1->Active = false; // Компонент TTable должен быть отключен.
// Опишем параметры таблицы.
   Table1->DatabaseName = "AceLet";//БД
   Table1->TableType = ttParadox; //как обычно, Парадокс.
// Опишем поля и их типы.
   Table1->FieldDefs->Clear();
   TFieldDef *pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Date";// Дата матча
    pNewDef->DataType=ftDate;//тип поля
    pNewDef->Required=true;
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Name";// имя
    pNewDef->DataType=ftString;//тип поля
    pNewDef->Size=15;
//установим, является ли поле обязательным
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="sex";// пол, принимает значения 1 или 0. Можно было сделать тип boolean, но что-то не могу с ним разобраться
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Ageh";// возраст1.
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Agea";// возраст3.
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Age2h";// возраст4.
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Age2a";// возраст5.
    pNewDef->DataType=ftInteger;//тип поля
//следующие поля просто создаются, данные в них вносятся с другой формы позже
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Red";// цвет
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Yel";// цвет2.
    pNewDef->DataType=ftInteger;//тип поля
   pNewDef=Table1->FieldDefs->AddFieldDef();
    pNewDef->Name="Place";// место.
    pNewDef->DataType=ftInteger;//тип поля
// Теперь взялись за индексы
   Table1->IndexDefs->Clear();
   TIndexDef *newIndexDef = Table1->IndexDefs->AddIndexDef();
     newIndexDef->Name = "T3";
     newIndexDef->Fields = "Date";
     newIndexDef->Options = TIndexOptions() << ixPrimary << ixUnique;
// Ну и наконец, создаем таблицу.
   Table1->CreateTable();
   Table1->Active=true;
   Table1->Append();
   Table1->FieldValues["Date"] = DateTimePicker1->Date;
   Table1->FieldValues["Name"] = ComboBox4->Text;
   Table1->FieldValues["sex"] = 0;
   if(RadioButton1->Checked==false)
   {
    Table1->FieldValues["Ageh"] = CSpinEdit1->Value;
    Table1->FieldValues["Ageа"] = CSpinEdit2->Value;
   }
   Table1->FieldValues["Age2h"] = CSpinEdit3->Value;
   Table1->FieldValues["Age2а"] = CSpinEdit4->Value;
   Table1->Post();
   Table1->ApplyUpdates();
  }
//если таблица существует, то просто вносим данные
  else 
      {
       Table1->Active=true;
       Table1->Append();
       Table1->FieldValues["Date"] = DateTimePicker1->Date;
       Table1->FieldValues["Name"] = ComboBox3->Text;
       Table1->FieldValues["sex"] = 1;
       if(RadioButton1->Checked==false)
       {
        Table1->FieldValues["Ageh"] = CSpinEdit1->Value;
        Table1->FieldValues["Ageа"] = CSpinEdit2->Value;
       }
       Table1->FieldValues["Age2h"] = CSpinEdit3->Value;
       Table1->FieldValues["Age2а"] = CSpinEdit4->Value;
       Table1->Post();
       Table1->ApplyUpdates();
      }
Проблема с описанием индексов. Сокращаю создаваемую таблицу до двух полей - всё ОК. Ставлю, как в данном примере - выползает "Key Violation" и хоть об стену убейся. Пробовал ставить для каждого поля, начиная со второго ещё индексы, типа
Table1->IndexDefs->Add("Fld5Index","Agea", TIndexOptions() << ixCaseInsensitive);
, тоже никакого изменения.
Подскажите, что не так. А то в сети решения на Key Violation больше на отмазки похожи.

-------
Говорят, что производители чипсетов не стоят на месте. Чушь. Как стоял завод корпорации 3dfx на перекрёстке 7-й авеню и 6-й дежавю, так и стоит.


Отправлено: 22:45, 24-04-2010

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Определение индексов при создании таблицы в Builder

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
При создании трансляции вэб-камеры Мозилла вылетает, при этом за что-то извиняется. vovikrus Хочу все знать 2 17-02-2010 19:03
Ошибка - при создании нового подключения при сохранений логина и пароля пишет ошибку 1305 p.s-bagdan Microsoft Windows 2000/XP 1 09-10-2008 09:33
MySQL - Сколько лучше назначить индексов для таблицы? tolbol Программирование и базы данных 5 23-07-2008 10:01
Mysql, оптимизация таблицы (создание индексов) ivank Вебмастеру 7 07-03-2007 17:47
C++ Builder->Определение времени, необходимого для завершения процесса XCodeR Программирование и базы данных 6 18-01-2005 14:40




 
Переход