in ieder geval kan je kijken bij Delphitricks. Je kan ook dit gebruiken.
delphi Code:
unit Unit7;
interface
uses windows, classes, ADODB;
type TMyTable = class
FTable : TADOQuery;
FConnection : TAdoConnection;
FQuery : string;
FOnCalcFields : TDataSetNotifyEvent;
private
procedure SetQuery(const Value: string);
protected
public
constructor Create; virtual;
destructor Destroy; override;
procedure CalulatedField(value: string; Ftype : TDataType);
procedure open;
procedure close;
property Query : string read Fquery write SetQuery;
property OnMyCalcField : TDataSetNotifyEvent read FOncalcFields write FOnCalcFields;
end;
implementation
{ TMyTable }
constructor TMyTable.Create;
begin
inherited;
FConnection := TAdoConnection.create(nil);
//vul hier je connectionstring naar de database in
FConnection.ConnectionString := 'bla bla';
FTable := TAdoQuery.create(nil);
FTable.Connection := FConnection;
FTable.OnCalcFields := OnMyCalcField;
end;
destructor TMyTable.Destroy;
begin
if FTable.Active then FTable.ActiveClassGroup := false;
Ftable.Free;
FConnection.Close;
FConnection.Free;
inherited;
end;
procedure TMyTable.open;
begin
FTable.Active := true;
end;
procedure TMyTable.SetQuery(const Value: string);
begin
Fquery := Value;
FTable.SQL.Text := FQuery;
end;
procedure TMyTable.FOnCalcFields(DataSet: TDataSet);
begin
if Assigned(FNewRecord) then
FNewRecord(Dataset);
end;
procedure TMyTable.CalulatedField(value: string; Ftype: TDataType);
var
Field: TField;
i: Integer;
begin
if Ftype = ftInteger then Field:=TIntegerField.Create(FTable) else
if Ftype = ftFloat then Field:=TFloatField.Create(FTable) else
Field:=TStringField.Create(FTable);
with Field do
begin
FieldName:= value;
Calculated:=True;
DataSet:=FTable;
end;
end;
procedure TMyTable.close;
begin
FTable.Active := false;
end;
end.
Is maar een voorbeeld hoe je het in code kan doen.
Je kan ook de code los in het component neerzetten, maar dan kom al snel in d global section te zitten van je project.
Bookmarks