Советы по Delphi

       

Создание db-файла во время работы приложения


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]



Содержание раздела