mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-05 18:53:00 +02:00

1. Fix AV on set frPrinGrid.Font property 2. Fix set Visible in script for dialog controls 3. Fix show frDataSet in object inspector after delete it from DialogPage 4. In Object Inspector sort compnent names in combobox 5. Fix string with '''' char git-svn-id: trunk@43162 -
207 lines
4.8 KiB
ObjectPascal
207 lines
4.8 KiB
ObjectPascal
unit LR_DBComponent;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, DB, LR_Class, LR_DBSet;
|
|
|
|
type
|
|
{ TLRDataSetControl }
|
|
|
|
TLRDataSetControl = class(TfrNonVisualControl)
|
|
private
|
|
FFilter: string;
|
|
FlrDBDataSet:TfrDBDataSet;
|
|
FlrDataSource:TDataSource;
|
|
FDS:TDataSet;
|
|
FDataSource: string;
|
|
function GetFieldCount: integer;
|
|
function GetActive: boolean;
|
|
function GetEOF: boolean;
|
|
function GetRecordCount: integer;
|
|
procedure SetActive(AValue: boolean);
|
|
procedure SetDataSet(AValue: TDataSet);
|
|
procedure SetFilter(AValue: string);
|
|
protected
|
|
FActive:boolean;
|
|
procedure SetName(const AValue: string); override;
|
|
procedure SetDataSource(AValue: string); virtual;
|
|
procedure AfterLoad;override;
|
|
function ExecMetod(const AName: String; p1, p2, p3: Variant; var Val: Variant):boolean;override;
|
|
public
|
|
constructor Create(AOwnerPage:TfrPage); override;
|
|
destructor Destroy; override;
|
|
|
|
procedure LoadFromXML(XML: TLrXMLConfig; const Path: String); override;
|
|
procedure SaveToXML(XML: TLrXMLConfig; const Path: String); override;
|
|
property DataSet:TDataSet read FDS write SetDataSet;
|
|
published
|
|
property Active:boolean read GetActive write SetActive;
|
|
property EOF:boolean read GetEOF;
|
|
property RecordCount:integer read GetRecordCount;
|
|
property FieldCount:integer read GetFieldCount;
|
|
property Filter:string read FFilter write SetFilter;
|
|
property DataSource:string read FDataSource write SetDataSource;
|
|
end;
|
|
|
|
implementation
|
|
uses DBPropEdits, PropEdits, LazarusPackageIntf, types, LR_Utils;
|
|
|
|
{ TLRDataSetControl }
|
|
|
|
function TLRDataSetControl.GetFieldCount: integer;
|
|
begin
|
|
if FDS.Active then
|
|
Result:=FDS.RecordCount
|
|
else
|
|
Result:=0;
|
|
end;
|
|
|
|
function TLRDataSetControl.GetActive: boolean;
|
|
begin
|
|
Result:=FDS.Active
|
|
end;
|
|
|
|
function TLRDataSetControl.GetEOF: boolean;
|
|
begin
|
|
if FDS.Active then
|
|
Result:=FDS.EOF
|
|
else
|
|
Result:=true;
|
|
end;
|
|
|
|
function TLRDataSetControl.GetRecordCount: integer;
|
|
begin
|
|
if FDS.Active then
|
|
Result:=FDS.RecordCount
|
|
else
|
|
Result:=0;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SetActive(AValue: boolean);
|
|
begin
|
|
{ FActive:=AValue;
|
|
if Assigned(FDS.Connection) then}
|
|
FDS.Active:=AValue;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SetDataSet(AValue: TDataSet);
|
|
begin
|
|
if FDS=AValue then Exit;
|
|
FDS:=AValue;
|
|
FlrDBDataSet.DataSet:=FDS;
|
|
FlrDataSource.DataSet:=FDS;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SetDataSource(AValue: string);
|
|
begin
|
|
if FDataSource=AValue then Exit;
|
|
FDataSource:=AValue;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SetFilter(AValue: string);
|
|
begin
|
|
if FFilter=AValue then Exit;
|
|
FFilter:=AValue;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SetName(const AValue: string);
|
|
begin
|
|
inherited SetName(AValue);
|
|
FDS.Name:=Name;
|
|
FlrDBDataSet.Name:='_'+Name;
|
|
FlrDataSource.Name:='ds'+Name;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.AfterLoad;
|
|
begin
|
|
inherited AfterLoad;
|
|
DataSet.Active:=FActive;
|
|
end;
|
|
|
|
function TLRDataSetControl.ExecMetod(const AName: String; p1, p2, p3: Variant;
|
|
var Val: Variant): boolean;
|
|
begin
|
|
Result:=inherited ExecMetod(AName, p1, p2, p3, Val);
|
|
if Result then exit;
|
|
|
|
if AName = 'NEXT' then
|
|
FDS.Next
|
|
else
|
|
if AName = 'FIRST' then
|
|
FDS.First
|
|
else
|
|
if AName = 'LAST' then
|
|
FDS.Last
|
|
else
|
|
if AName = 'PRIOR' then
|
|
FDS.Prior
|
|
else
|
|
if AName = 'OPEN' then
|
|
FDS.Open
|
|
else
|
|
if AName = 'CLOSE' then
|
|
FDS.Close
|
|
else
|
|
exit;
|
|
Result:=true;
|
|
end;
|
|
|
|
constructor TLRDataSetControl.Create(AOwnerPage: TfrPage);
|
|
begin
|
|
inherited Create(AOwnerPage);
|
|
FDesignOptions:=FDesignOptions + [doUndoDisable];
|
|
FlrDBDataSet:=TfrDBDataSet.Create(OwnerForm);
|
|
FlrDataSource:=TDataSource.Create(OwnerForm);
|
|
end;
|
|
|
|
destructor TLRDataSetControl.Destroy;
|
|
begin
|
|
FreeAndNil(FDS);
|
|
FreeAndNil(FlrDBDataSet);
|
|
FreeAndNil(FlrDataSource);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TLRDataSetControl.LoadFromXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited LoadFromXML(XML, Path);
|
|
FActive := XML.GetValue(Path + 'Active/Value'{%H-}, false);
|
|
FDataSource := XML.GetValue(Path + 'DataSource/Value'{%H-}, '');
|
|
end;
|
|
|
|
procedure TLRDataSetControl.SaveToXML(XML: TLrXMLConfig; const Path: String);
|
|
begin
|
|
inherited SaveToXML(XML, Path);
|
|
XML.SetValue(Path+'Active/Value', Active);
|
|
XML.SetValue(Path + 'DataSource/Value'{%H-}, FDataSource);
|
|
end;
|
|
|
|
type
|
|
|
|
{ TLRDataSetControlDataSourceProperty }
|
|
|
|
TLRDataSetControlDataSourceProperty = class(TFieldProperty)
|
|
public
|
|
procedure FillValues(const Values: TStringList); override;
|
|
end;
|
|
|
|
{ TLRDataSetControlDataSourceProperty }
|
|
|
|
procedure TLRDataSetControlDataSourceProperty.FillValues(
|
|
const Values: TStringList);
|
|
begin
|
|
if (GetComponent(0) is TLRDataSetControl) then
|
|
frGetComponents(nil, TDataSource, Values, nil);
|
|
end;
|
|
|
|
initialization
|
|
RegisterPropertyEditor(TypeInfo(string), TLRDataSetControl, 'DataSource', TLRDataSetControlDataSourceProperty);
|
|
|
|
finalization
|
|
end.
|
|
|
|
|