Советы по Delphi. Версия 1.4.3 от 1.1.2001 - страница 37
>procedure TForm1.FormCreate(Sender: TObject);
>var
> MyTable: TTable;
> MyDataSource: TDataSource;
> MyGrid: TDBGrid;
>begin
> { Создаем компонент TTable -- связанная таблица базы данных будет создана ниже. }
> MyTable := TTable.Create(Self);
> with MyTable do
> begin
> { Определяем основную базу данных и таблицу. Примечание: Test.DB пока не существует. }
> DatabaseName := 'DBDemos';
> TableName := 'Test.DB';
> { Назначаем TaxAmountCalc обработчиком события, чтобы использовать его при наступлении события OnCalcFields в MyTable. }
> OnCalcFields := TaxAmountCalc;
> { Создаем и добавляем определения полей к массиву TTableFieldDefs, затем создаем TField с использованием информации из определения поля. }
> with FieldDefs do
> begin
>Add('ItemsTotal', ftCurrency, 0, false);
> FieldDefs[0].CreateField(MyTable);
> Add('TaxRate', ftFloat, 0, false);
> FieldDefs[1].CreateField(MyTable);
> TFloatField(Fields[1]).DisplayFormat := '##.0%';
> { Создаем вычисляемое TField, назначаем свойства, и добавляем поле к массиву определений MyTable. }
> TaxAmount := TFloatField.Create(MyTable);
> with TaxAmount do
> begin
>FieldName := 'TaxAmount';
> Calculated := True;
> Currency := True;
> DataSet := MyTable;
> Name := MyTable.Name + FieldName;
> MyTable.FieldDefs.Add(Name, ftFloat, 0, false);
> end;
> end;
> { Создаем в базе данных новую таблицу, используя в качестве основы MyTable. }
> MyTable.CreateTable;
> end;
> { Создаем компонент TDataSourceи назначаем его MyTable. }
> MyDataSource := TDataSource.Create(Self);
> MyDataSource.DataSet := MyTable;
> { Создаем табличную сетку, отображаемна форме, и назначаем MyDataSource дляполучения доступа к данным из MyTable. }
> MyGrid := TDBGrid.Create(Self);
> with MyGrid do
> begin
> Parent := Self;
> Align := alClient;
> DataSource := MyDataSource;
> end;
> { Запускаем нашу конструкцию! }
> MyTable.Active := True;
> Caption := 'Новая таблица ' + MyTable.TableName;
>end;
Ниже приведен полный исходный код проекта:
>unit gridcalc;
>interface
>uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, DB,DBTables, StdCtrls;
>type
> TForm1 = class(TForm)
> procedure FormCreate(Sender: TObject);
> procedure TaxAmountCalc(DataSet: TDataset);
> private
>TaxAmount: TFloatField;
> end;
>var
> Form1: TForm1;
>implementation
>{$R *.DFM}
>procedure TForm1.TaxAmountCalc(DataSet: TDataset);
>begin
> Dataset['TaxAmount'] := Dataset['ItemsTotal'] *(Dataset['TaxRate'] / 100);
>end;
>procedure TForm1.FormCreate(Sender: TObject);
>var
> MyTable: TTable;
> MyDataSource: TDataSource;
> MyGrid: TDBGrid;
>begin
> MyTable := TTable.Create(Self);
> with MyTable do
> begin
> DatabaseName := 'DBDemos';
> TableName := 'Test.DB';
> OnCalcFields := TaxAmountCalc;
> with FieldDefs do
> begin
> Add('ItemsTotal', ftCurrency, 0, false);
> FieldDefs[0].CreateField(MyTable);
> Add('TaxRate', ftFloat, 0, false);
> FieldDefs[1].CreateField(MyTable);
> TFloatField(Fields[1]).DisplayFormat := '##.0%';
> TaxAmount := TFloatField.Create(MyTable);
> with TaxAmount do
> begin
> FieldName := 'TaxAmount';
> Calculated := True;
> Currency := True;
> DataSet := MyTable;
> Name := MyTable.Name + FieldName;
> MyTable.FieldDefs.Add(Name, ftFloat, 0, false);
> end;
> end;
> MyTable.CreateTable;
> end;
> MyDataSource := TDataSource.Create(Self);
> MyDataSource.DataSet := MyTable;
> MyGrid := TDBGrid.Create(Self);
> with MyGrid do
> begin
>Parent := Self;
> Align := alClient;
> DataSource := MyDataSource;
> end;
> MyTable.Active := True;
> Caption := 'Новая таблица ' + MyTable.TableName;
>end;
>end.
Проблема с AddIndex
Delphi 1
Я использую таблицу paradox на своей локальной машине.
Я использую следующие команды:
>Table.DatabaseName := 'ABC';
>Table.TableName := 'TEST';
>Table.CreateTable;
>Table.AddIndex('Primary','ID',[ixPrimary]); (работает как часы)
>Table.AddIndex('Number_IDX','NUMBER',[ixUnique]); (здесь я получаю ошибку времени выполнения)
ID – LongInt поле
NUMBER – поле типа char[15]
Как создать БД в кодировке CP1251?
Nomadic отвечает:
Вот такая конструкция проходит на DB2 2.1.2/NT и UDB5/NT…
>CREATE DATABASE Efes2
>USING CODESET 1251 TERRITORY RU
>COLLATE USING IDENTITY;