Форум: "Базы";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизКак динамически создать вычисляемое или lookup поле ? Найти похожие ветки
← →
Пастор (2002-07-18 18:46) [0]Как динамически создать вычисляемое или lookup поле ?
← →
kaif (2002-07-18 20:56) [1]Банально. Через Create. Например,
sf := TStringField.Create(Form1);
Почитай Help. Там все написано.
← →
Пастор (2002-07-18 22:57) [2]Пишу
procedure TForm1.Button1Click(Sender: TObject);
var TF: TField;
begin
TF:=TField.Create(Query1);
TF.SetFieldType(ftInteger);
TF.FieldName:="NID";
TF.FieldKind:=fkCalculated;
Database1.Open;
TF.DataSet:=Query1;
Query1.Open;
Query1.Fields.Add(TF);
end;
Не работает - пишет поле не может быть вычислимым.
← →
Пастор (2002-07-19 10:50) [3]нашел рабочий примерчик ! мож кому пригодиться..
unit Unit1;
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
{ Private declarations }
TaxAmount: TFloatField;
public
{ Public declarations }
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
{ Создаем компонент TTable -- связанная таблица базы данных будет создана ниже. }
MyTable := TTable.Create(Self);
with MyTable do
begin
{ Определяем основную базу данных и таблицу.
Примечание: Test.DB пока не существует. }
DatabaseName := "DBDemos";
TableName := "Test.DB";
{ Назначаем TaxAmountCalc обработчиком события,
чтобы использовать его при наступлении события
OnCalcFields в MyTable. }
OnCalcFields := TaxAmountCalc;
{ Создаем и добавляем определения полей к массиву TTable
FieldDefs, затем создаем 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;
end.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c