Создание таблицы

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;

// Создание DBF-файла во время работы приложения
...
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 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;

sql := 'CREATE TABLE "employee.db" ( '+
  'Last_Name CHAR(20),'+
  'First_Name CHAR(15),'+
  'Salary NUMERIC(10,2),'+
  'Dept_No SMALLINT,'+
  'PRIMARY KEY (Last_Name, First_Name))';
Query1.sql.text:=sql;
Query1.ExecSQL;

Примечание Vit: этот способ наиболее предпочтительный, так как наиболее стандартный. Кроме того он будет работать практически неизменно на любых базах данных при использовании любого способа доступа, а не только BDE.


Взято с http://delphiworld.narod.ru

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...