www.pudn.com > Fr3ReportDLL.rar > frxADOEditor.pas


 
{******************************************} 
{                                          } 
{             FastReport v3.0              } 
{      ADO components design editors       } 
{                                          } 
{         Copyright (c) 1998-2004          } 
{         by Alexander Tzyganenko,         } 
{            Fast Reports Inc.             } 
{                                          } 
{******************************************} 
 
unit frxADOEditor; 
 
interface 
 
{$I frx.inc} 
 
implementation 
 
uses 
  Windows, Classes, SysUtils, Forms, frxADOComponents, frxCustomDB, 
  frxDsgnIntf, frxRes, DB, ADODB, ADOInt 
{$IFDEF Delphi6} 
, Variants 
{$ENDIF}; 
 
 
type 
  TfrxDatabaseNameProperty = class(TfrxStringProperty) 
  public 
    function GetAttributes: TfrxPropertyAttributes; override; 
    function Edit: Boolean; override; 
  end; 
 
  TfrxDatabaseProperty = class(TfrxComponentProperty) 
  public 
    function GetValue: String; override; 
  end; 
 
  TfrxTableNameProperty = class(TfrxStringProperty) 
  public 
    function GetAttributes: TfrxPropertyAttributes; override; 
    procedure GetValues; override; 
  end; 
 
  TfrxIndexNameProperty = class(TfrxStringProperty) 
  public 
    function GetAttributes: TfrxPropertyAttributes; override; 
    procedure GetValues; override; 
  end; 
 
 
{ TfrxDatabaseNameProperty } 
 
function TfrxDatabaseNameProperty.GetAttributes: TfrxPropertyAttributes; 
begin 
  Result := [paDialog]; 
end; 
 
function TfrxDatabaseNameProperty.Edit: Boolean; 
var 
  SaveConnected: Boolean; 
  db: TADOConnection; 
  fName: String; 
begin 
  db := TfrxADODatabase(Component).Database; 
 
  SaveConnected := db.Connected; 
  db.Connected := False; 
  fName := PromptDataLinkFile(Application.Handle, ''); 
  Result := fName <> ''; 
  if Result then 
    db.ConnectionString := CT_FILENAME + fName; 
  db.Connected := SaveConnected; 
end; 
 
 
{ TfrxDatabaseProperty } 
 
function TfrxDatabaseProperty.GetValue: String; 
var 
  db: TfrxADODatabase; 
begin 
  db := TfrxADODatabase(GetOrdValue); 
  if db = nil then 
  begin 
    if (ADOComponents <> nil) and (ADOComponents.DefaultDatabase <> nil) then 
      Result := ADOComponents.DefaultDatabase.Name 
    else 
      Result := frxResources.Get('prNotAssigned'); 
  end 
  else 
    Result := inherited GetValue; 
end; 
 
 
{ TfrxTableNameProperty } 
 
function TfrxTableNameProperty.GetAttributes: TfrxPropertyAttributes; 
begin 
  Result := [paMultiSelect, paValueList, paSortList]; 
end; 
 
procedure TfrxTableNameProperty.GetValues; 
begin 
  inherited; 
  with TfrxADOTable(Component).Table do 
    if Connection <> nil then 
      Connection.GetTableNames(Values, False); 
end; 
 
 
{ TfrxIndexProperty } 
 
function TfrxIndexNameProperty.GetAttributes: TfrxPropertyAttributes; 
begin 
  Result := [paMultiSelect, paValueList]; 
end; 
 
procedure TfrxIndexNameProperty.GetValues; 
var 
  i: Integer; 
begin 
  inherited; 
  try 
    with TfrxADOTable(Component).Table do 
      if (TableName <> '') and (IndexDefs <> nil) then 
      begin 
        IndexDefs.Update; 
        for i := 0 to IndexDefs.Count - 1 do 
          if IndexDefs[i].Name <> '' then 
            Values.Add(IndexDefs[i].Name); 
      end; 
  except 
  end; 
end; 
 
 
initialization 
  frxPropertyEditors.Register(TypeInfo(String), TfrxADODataBase, 'DatabaseName', 
    TfrxDataBaseNameProperty); 
  frxPropertyEditors.Register(TypeInfo(TfrxADODatabase), TfrxADOTable, 'Database', 
    TfrxDatabaseProperty); 
  frxPropertyEditors.Register(TypeInfo(TfrxADODatabase), TfrxADOQuery, 'Database', 
    TfrxDatabaseProperty); 
  frxPropertyEditors.Register(TypeInfo(String), TfrxADOTable, 'TableName', 
    TfrxTableNameProperty); 
  frxPropertyEditors.Register(TypeInfo(String), TfrxADOTable, 'IndexName', 
    TfrxIndexNameProperty); 
 
end.