Hola Al,
Por lo que e leído sobre la herencia insertada que hablas según yo eso lo puedes hacer con los class helpers, puedes ver este video para que veas como
Class Helpers: Friend or Foe
Este es un ejemplo de como yo las estoy aplicando
Código Delphi
[-]unit udtsHelper;
interface
uses
Classes, pFibDataSet;
type
TFibDatasetHelper = class helper for TpFibDataSet
public
function CampoNombreCadena(sCampo: String): String;
function CampoNombreEntero(sCampo: String): integer;
function CampoNombreFlotante(sCampo: String): double;
function CampoNombreFecha(sCampo: String): TDateTime;
function CampoCadena(iIndice: integer): String;
function CampoEntero(iIndice: integer): integer;
function CampoFlotante(iIndice: integer): double;
procedure CampoNombreBlob(sCampo: String; var strContenido: TMemoryStream);
procedure CampoNombre(sCampo, sValor: string); overload;
procedure CampoNombre(sCampo: string; iValor: Integer); overload;
procedure CampoNombre(sCampo: string; dValor: Double); overload;
procedure CampoNombre(sCampo: string; dtValor: TDateTime); overload;
procedure ParametroNombre(sCampo, sValor: string); overload;
procedure ParametroNombre(sCampo: string; iValor: Integer); overload;
procedure ParametroNombre(sCampo: string; dValor: Double); overload;
procedure ParametroNombre(sCampo: string; dtValor: TDateTime); overload;
end;
implementation
uses
DB;
function TFibDatasetHelper.CampoNombreCadena(sCampo: String): String;
begin
Result:= FieldByName(sCampo).AsString;
end;
function TFibDatasetHelper.CampoNombreEntero(sCampo: String): integer;
begin
Result:= FieldByName(sCampo).AsInteger;
end;
function TFibDatasetHelper.CampoNombreFlotante(sCampo: String): double;
begin
Result:= FieldByName(sCampo).AsFloat;
end;
function TFibDatasetHelper.CampoNombreFecha(sCampo: String): TDateTime;
begin
Result:= FieldByName(sCampo).AsDateTime;
end;
procedure TFibDatasetHelper.CampoNombre(sCampo: string; iValor: Integer);
begin
FieldByName(sCampo).AsInteger:= iValor
end;
procedure TFibDatasetHelper.CampoNombre(sCampo, sValor: string);
begin
FieldByName(sCampo).AsString:= sValor
end;
procedure TFibDatasetHelper.CampoNombre(sCampo: string; dtValor: TDateTime);
begin
FieldByName(sCampo).AsDateTime:= dtValor
end;
procedure TFibDatasetHelper.CampoNombre(sCampo: string; dValor: Double);
begin
FieldByName(sCampo).AsFloat:= dValor
end;
procedure TFibDatasetHelper.CampoNombreBlob(sCampo: String; var strContenido: TMemoryStream);
var
fldCampo: TField;
strStream: TStream;
begin
if(not FieldByName(sCampo).IsNull) then
begin
fldCampo:= FieldByName(sCampo);
strStream:= CreateBlobStream(fldCampo, bmRead);
strContenido.CopyFrom(strStream, strStream.Size);
end
else
strContenido.Clear;
end;
procedure TFibDatasetHelper.ParametroNombre(sCampo: string; iValor: Integer);
begin
ParamByName(sCampo).AsInteger:= iValor
end;
procedure TFibDatasetHelper.ParametroNombre(sCampo, sValor: string);
begin
ParamByName(sCampo).AsString:= sValor
end;
procedure TFibDatasetHelper.ParametroNombre(sCampo: string; dtValor: TDateTime);
begin
ParamByName(sCampo).AsDateTime:= dtValor
end;
procedure TFibDatasetHelper.ParametroNombre(sCampo: string; dValor: Double);
begin
ParamByName(sCampo).AsDouble:= dValor
end;
function TFibDatasetHelper.CampoCadena(iIndice: integer): String;
begin
Result:= Fields[iIndice].AsString;
end;
function TFibDatasetHelper.CampoEntero(iIndice: integer): integer;
begin
Result:= Fields[iIndice].AsInteger;
end;
function TFibDatasetHelper.CampoFlotante(iIndice: integer): double;
begin
Result:= Fields[iIndice].AsFloat;
end;
end.