Для создания таблицы используется метод CreateTable() компонента TTable (или любого другого аналогичного ему). Строго говоря, в таблице существуют простые поля и индексные. По индексным полям производится автоматическая сортировка. Более подробно индексные поля мы расмотрим в следующем шаге. Предварительные описания полей содержатся в свойстве FieldDefs, которое мы рассмотрели в одной из предыдущих статей. В качестве примера давайте напишем программу создающую произвольную таблицу (пока без индексов). Форма ее будет такова:
Само собой, компонент TTable нужно настроить на конкретный алиас, я использовал BCDEMOS. В TComboBox* FieldType я набил все значения типов полей:
ftUnknown ftString ftSmallint ftInteger ftWord ftBoolean ftFloat ftCurrency ftBCD ftDate ftTime ftDateTime ftBytes ftVarBytes ftAutoInc ftBlob ftMemo ftGraphic ftFmtMemo ftParadoxOle ftDBaseOle ftTypedBinary ftCursor ftFixedChar ftWideString ftLargeint ftADT ftArray ftReference ftDataSet ftOraBlob ftOraClob ftVariant ftInterface ftIDispatch ftGuid ftTimeStamp ftFMTBcd
Очень важным является соблюдения порядка, соответствующего enum TFieldType. Затем мы пишем код:
//--------------------------------------- void __fastcall TForm1::AddDefClick(TObject *Sender) { ListBox->Enabled = false; AddBox->Enabled = true; } //--------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { table->FieldDefs->Clear(); } //--------------------------------------- void __fastcall TForm1::AddFieldClick(TObject *Sender) { TFieldDef* def = table->FieldDefs->AddFieldDef(); def->Name = FieldName->Text; def->Size = FieldSize->Text.ToInt(); def->DataType = (TFieldType)FieldType->ItemIndex; def->Attributes << (TFieldAttribute)((faHiddenCol&FieldHidden->Checked)| (faRequired&FieldRequired->Checked)| (faReadonly&FieldReadOnly->Checked)| (faFixed&FieldFixed->Checked)); Fields->Items->AddObject(FieldName->Text,def); Fields->ItemIndex = Fields->Items->Count - 1; CancelFieldClick(0); } //--------------------------------------- void __fastcall TForm1::CancelFieldClick(TObject *Sender) { ListBox->Enabled = true; AddBox->Enabled = false; } //--------------------------------------- void __fastcall TForm1::BitBtn1Click(TObject *Sender) { for(int i=0;i<Fields->Items->Count;i++) ((TFieldDef*)Fields->Items->Objects[i])->FieldNo = i; table->TableType = (TTableType)TableType->ItemIndex; table->TableName = TableName->Text; table->CreateTable(); } //--------------------------------------- void __fastcall TForm1::RemoveDefClick(TObject *Sender) { table->Active = false; if(Fields->ItemIndex==-1)return; TFieldDef* def = (TFieldDef*)Fields->Items->Objects[Fields->ItemIndex]; table->FieldDefs->Delete(def->Index); Fields->DeleteSelected(); } //--------------------------------------- void __fastcall TForm1::FieldsChange(TObject *Sender) { TFieldDef* def = (TFieldDef*)Fields->Items->Objects[Fields->ItemIndex]; FieldSize->Text = def->Size; FieldType->ItemIndex = def->DataType; FieldName->Text = def->Name; FieldHidden->Checked = def->Attributes.Contains(faHiddenCol); FieldRequired->Checked = def->Attributes.Contains(faRequired); FieldReadOnly->Checked = def->Attributes.Contains(faReadonly); FieldFixed->Checked = def->Attributes.Contains(faFixed); }
В листинге по-моему описано все, что нужно для создания таблицы. Для большей убедительности добавляю файл проекта к шагу.