uses DB, DBTables, StdCtrls; procedure TForm1.Button1Click(Sender: TObject); var tSource, TDest: TTable;beginTSource := TTable.create(self);with TSource do beginDatabaseName := 'dbdemos';TableName := 'customer.db';open;end;TDest := TTable.create(self);with TDest do beginDatabaseName := 'dbdemos';TableName := 'MyNewTbl.db';FieldDefs.Assign(TSource.FieldDefs);IndexDefs.Assign(TSource.IndexDefs);CreateTable;end;TSource.close;end; |
Дополнение
Читатель пишет:
В совете, на мой взгляд, неточность. Приведен пример копирования структуры одной таблицы в другую. Если нужно создать таблицу, то:
Простейший способ – использовать SQL запрос. Таблицы можно создавать с индексом и без индекса.
Небольшой пример:
… const CreateTab = 'CREATE TABLE ';IDXTab = 'PRIMARY KEY ';MyTabStruct ='IDX_TAB DECIMAL(6,0), '+'DATE_ DATE, '+'FLD_1 CHARACTER(20), '+'FLD_2 DECIMAL(7,2), '+'FLD_3 BOOLEAN, '+'FLD_4 BLOB(1,1), '+'FLD_5 BLOB(1,2), '+'FLD_6 BLOB(1,3), '+'FLD_7 BLOB(1,4), '+'FLD_8 BLOB(1,5) ';… // создание таблицы без индекса procedure TForm1.Button1Click(Sender: TObject); begin if CreateTable('"MYTAB.DBF"', MyTabStruct, '') then… // выполняем дальнейшие операции else… end; // создание таблицы с индексом procedure TForm1.Button2Click(Sender: TObject); begin if CreateTable('"MYTAB.DBF"', MyTabStruct, IDXTab+' (IDX_TAB)') then… // выполняем дальнейшие операции else… end; function TForm1.CreateTable(TabName, TabStruct, TabIDX: string): boolean; var qyTable: TQuery;begin result := true;qyTable := TQuery.Create(Self);with qyTable dotrytrySQL.Clear;SQL.Add(CreateTab+TabName+'('+TabStruct+TabIDX+')');Prepare; // ExecSQL, а не Open. Иначе ... облом ExecSQL;except // Обработка ошибок открытия таблицы Возможности обработчика можно расширить. Exception.Create('Ошибка открытия таблицы');result := false;end;finallyClose;end;end; |
[000027]