Componentes.Terceros.RemObj.../internal/5.0.23.613/1/Data Abstract for Delphi/Source/uDADataTableReferenceCollection.pas
david 2824855ea7 - Modificación del paquete RemObjects_Core_D10 para que sea un paquete de runtime/designtime (antes era designtime sólo)
- Recompilación en Delphi10 de todos los paquetes de RO para generar las DCU's en Lib\D10
- Recompilación en Delphi10 de todos los paquetes de DA para generar las DCU's en Lib\D10

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@9 b6239004-a887-0f4b-9937-50029ccdca16
2007-09-10 14:06:19 +00:00

202 lines
5.8 KiB
ObjectPascal

unit uDADataTableReferenceCollection;
{----------------------------------------------------------------------------}
{ Data Abstract Library - Core Library }
{ }
{ compiler: Delphi 6 and up, Kylix 3 and up }
{ platform: Win32, Linux }
{ }
{ (c)opyright RemObjects Software. all rights reserved. }
{ }
{ Using this code requires a valid license of the Data Abstract }
{ which can be obtained at http://www.remobjects.com. }
{----------------------------------------------------------------------------}
{$I DataAbstract.inc}
interface
uses
Classes,
uDAInterfaces,uDADataTable;
type
{ TDADataTableReference }
TDADataTableReferenceCollection = class;
TDADataTableReference = class(TCollectionItem)
private
fDataTable: TComponent;
FDataset: IDADataset;
FLogicalName: string; // fro Tdataset
function GetIsValidReference: boolean;
procedure SetDataTable(const Value: TComponent);
function GetReferenceCollection: TDADataTableReferenceCollection;
function GetDataset: IDADataset;
function GetLogicalName: string;
procedure SetLogicalName(const Value: string);
protected
function GetDisplayName : string; override;
public
constructor Create(aCollection : TDADataTableReferenceCollection); reintroduce;
property IsValidReference : boolean read GetIsValidReference;
property ReferenceCollection : TDADataTableReferenceCollection read GetReferenceCollection;
property Dataset: IDADataset read GetDataset;
destructor Destroy; override;
published
property DataTable : TComponent read fDataTable write SetDataTable;
property LogicalName: string read GetLogicalName write SetLogicalName;
end;
{ TDADataTableReferenceCollection }
TDADataTableReferenceCollection = class(TCollection)
private
fOwner: TComponent;
function GetItems(Index: integer): TDADataTableReference;
protected
public
constructor Create(aOwner: TComponent);
destructor Destroy; override;
function FindByDataTable(aDataTable : TComponent) : TDADataTableReference;
function FindByName(const aLogicalName : string) : TDADataTableReference;
property Items[Index : integer] : TDADataTableReference read GetItems; default;
property OwnerService: TComponent read fOwner;
end;
implementation
uses
SysUtils,DB,
uROClasses, uDADatasetWrapper;
{ TDADataTableReferenceCollection }
constructor TDADataTableReferenceCollection.Create(aOwner: TComponent);
begin
inherited Create(TDADataTableReference);
fOwner := aOwner;
end;
destructor TDADataTableReferenceCollection.Destroy;
begin
inherited;
end;
function TDADataTableReferenceCollection.FindByDataTable(aDataTable: TComponent): TDADataTableReference;
var i : integer;
begin
result := NIL;
if (aDataTable=NIL) then Exit;
for i := 0 to (Count-1) do
if (Items[i].DataTable=aDataTable) then begin
result := Items[i];
Exit;
end;
end;
function TDADataTableReferenceCollection.FindByName(const aLogicalName: string): TDADataTableReference;
var i : integer;
begin
result := NIL;
for i := 0 to (Count-1) do
if Items[i].IsValidReference and SameText(Items[i].Dataset.LogicalName, aLogicalName) then begin
result := Items[i];
Exit;
end;
end;
function TDADataTableReferenceCollection.GetItems(
Index: integer): TDADataTableReference;
begin
result := TDADataTableReference(inherited Items[Index]);
end;
{ TDADataTableReference }
constructor TDADataTableReference.Create(aCollection : TDADataTableReferenceCollection);
begin
inherited Create(aCollection);
end;
function TDADataTableReference.GetDataset: IDADataset;
begin
Result := FDataset;
if (Result = nil) and (fDataTable is TDADataTable) then
Result := fDataTable as IDADataset;
end;
procedure TDADataTableReference.SetDataTable(const Value: TComponent);
begin
if (fDataTable=Value) then Exit;
if Value is TDataSet then begin
FDataset := TDatasetWrapper.Create(TDataSet(Value));
FDataset.LogicalName := FLogicalName;
end
else
FDataset := nil;
if (Value is TDataSet) or (Value is TDADataTable) then
fDataTable := Value
else
// don't supported other types
fDataTable := nil;
if (fDataTable<>NIL)
then fDataTable.FreeNotification(ReferenceCollection.OwnerService);
end;
function TDADataTableReference.GetDisplayName: string;
var F_logicalname : string;
begin
if (fDataTable<>NIL) then begin
F_logicalname := LogicalName;
if (F_logicalname='') then F_logicalname := '???';
result := Format('%s (%s)', [F_logicalname, fDataTable.Name])
end
else result := '<No Reference>';
end;
function TDADataTableReference.GetIsValidReference: boolean;
begin
result := fDataTable<>NIL
end;
function TDADataTableReference.GetReferenceCollection: TDADataTableReferenceCollection;
begin
result := TDADataTableReferenceCollection(inherited Collection);
end;
function TDADataTableReference.GetLogicalName: string;
begin
if (fDataTable<>NIL) then begin
Result := Dataset.LogicalName;
if fDataTable is TDataset then Result:= FLogicalName;
end
else
result := '';
end;
procedure TDADataTableReference.SetLogicalName(const Value: string);
begin
FLogicalName := Value;
if (Dataset <> nil) then Dataset.LogicalName := Value;
end;
destructor TDADataTableReference.Destroy;
begin
FDataset:=nil;
inherited;
end;
end.