Создание db-файла во время работы приложения
uses DB, DBTables, StdCtrls; procedure TForm1.Button1Click(Sender: TObject); var tSource, TDest: TTable;
begin
TSource := TTable.create(self);
with TSource do begin
DatabaseName := 'dbdemos';
TableName := 'customer.db';
open;
end;
TDest := TTable.create(self);
with TDest do begin
DatabaseName := 'dbdemos';
TableName := 'MyNewTbl.db';
FieldDefs.Assign(TSource.FieldDefs);
IndexDefs.Assign(TSource.IndexDefs);
CreateTable;
end;
TSource.close;
end;
|
Дополнение
Читатель VS пишет:
В совете, на мой взгляд, неточность. Приведен пример копирования структуры одной таблицы в другую. Если нужно создать таблицу, то:
Простейший способ – использовать 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;
beginresult := true;
qyTable := TQuery.Create(Self);
with qyTable do
try
try
SQL.Clear;
SQL.Add(CreateTab+TabName+'('+TabStruct+TabIDX+')');
Prepare;
// ExecSQL, а не Open. Иначе ... обломExecSQL;
except
// Обработка ошибок открытия таблицы Возможности обработчика можно расширить.Exception.Create('Ошибка открытия таблицы');
result := false;
end;
finally
Close;
end;
end;
|
[000027]