Советы по 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;