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

=== Создание таблицы ===
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;
ID: 02598
----
// Создание 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
 // выполняем дальнейшие операции
end;
// создание таблицы с индексом
procedure TForm1.Button2Click(Sender: TObject);
begin
 if CreateTable('"MYTAB.DBF"', MyTabStruct, IDXTab + ' (IDX_TAB)') then
 // выполняем дальнейшие операции
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;
ID: 02599
----
Как создать таблицу ?
Вариантов несколько:
# Сделать это с помощью менеджера соответствующей базы данных, например таблицу для Paradox создать в Paradox'e
# С помощью Database Desktop - утилита, поставляемая с BDE и большинством борландовских продуктов. Я не думаю что вы встретите проблемы при создании таблицы - там всё очень просто.
# Из программы. Здесь 2 варианта, вариант первый, использовать метод CreateTable у таблицы, вот пример из справки по Дельфи как Борланд предлагает это делать:
with Table1 do begin
 Active := False;
 DatabaseName := 'DBDEMOS';
 TableType := ttParadox;
 TableName := 'CustInfo';
 { Don't overwrite an existing table }
 if not Table1.Exists then
 begin
 { The Table component must not be active }
 { First, describe the type of table and give }
 { it a name }
 { Next, describe the fields in the table }
 with FieldDefs do
 begin
 Clear;
 with AddFieldDef do
 begin
 Name := 'Field1';
 DataType := ftInteger;
 Required := True;
 end;
 with AddFieldDef do
 begin
 Name := 'Field2';
 DataType := ftString;
 Size := 30;
 end;
 end;
 { Next, describe any indexes }
 with IndexDefs do
 begin
 Clear;
 { The 1st index has no name because it is
 { a Paradox primary key }
 with AddIndexDef do
 begin
 Name := ;
 Fields := 'Field1';
 Options := [ixPrimary];
 end;
 with AddIndexDef do
 begin
 Name := 'Fld2Indx';
 Fields := 'Field2';
 Options := [ixCaseInsensitive];
 end;
 end;
 { Call the CreateTable method to create the table }
 CreateTable;
 end;
end;
Есть другой метод, который нравится мне гораздо больше, он проще в реализации и работает стабильнее - выполнить Query типа "Create Table". Этот способ я разберу позже, когда мы будем рассматривать работу с запросами.
----
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.
Source: Взято с http://delphiworld.narod.ru
ID: 02600