Componentes.Terceros.SDAC/internal/4.10.0.10/1/Source/Design/DATableEditor.pas
2007-10-05 14:48:18 +00:00

232 lines
5.4 KiB
ObjectPascal

//////////////////////////////////////////////////
// Data Access Components
// Copyright © 1998-2005 Core Lab. All right reserved.
// Table Editor
//////////////////////////////////////////////////
{$IFNDEF CLR}
{$I Dac.inc}
unit DATableEditor;
{$ENDIF}
interface
uses
{$IFDEF MSWINDOWS}
Windows, Messages, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, Buttons,
{$ENDIF}
{$IFDEF LINUX}
Types, QGraphics, QControls, QForms, QDialogs, QStdCtrls,
QExtCtrls, QComCtrls, QButtons,
{$ENDIF}
SysUtils, DB, Classes,
DBAccess, MemUtils, CREditor;
type
TDATableEditorForm = class(TCREditorForm)
Label2: TLabel;
Label4: TLabel;
Label1: TLabel;
edFilter: TEdit;
meSQL: TMemo;
cbTableName: TComboBox;
edOrderFields: TEdit;
Panel1: TPanel;
btnDataEditor: TBitBtn;
procedure cbTableNameDropDown(Sender: TObject);
procedure cbTableNameExit(Sender: TObject);
procedure edOrderFieldsExit(Sender: TObject);
procedure edFilterExit(Sender: TObject);
procedure btnDataEditorClick(Sender: TObject);
protected
FListGot: boolean;
FLocalTable, FTable: TCustomDADataSet;
procedure DoInit; override;
procedure DoFinish; override;
procedure DoSave; override;
procedure InitSQL;
function GetComponent: TComponent; override;
procedure SetComponent(Value: TComponent); override;
function GetLocalComponent: TComponent; override;
procedure GetTableNames(Connection: TCustomDAConnection; Items: TStrings); virtual;
public
property Table: TCustomDADataSet read FTable write FTable;
end;
implementation
uses
DADesignUtils, DADataEditor;
{$IFDEF IDE}
{$R *.dfm}
{$ENDIF}
{$IFDEF MSWINDOWS}
{$R DATableEditor.dfm}
{$ENDIF}
{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}
procedure TDATableEditorForm.DoInit;
begin
inherited;
FLocalTable := TComponentClass(Table.ClassType).Create(nil) as TCustomDADataSet;
FLocalTable.Assign(Table);
TDBAccessUtils.SetDesignCreate(FLocalTable, True);
InitSQL;
FListGot := False;
{$IFDEF LINUX}
cbTableName.Items.Text := ' '; // bug in TComboBox
meSQL.Height := meSQL.Parent.ClientHeight - meSQL.Top - cbTableName.Top;
{$ENDIF}
cbTableName.Text := FDADesignUtilsClass.GetTableName(FLocalTable);
edFilter.Text := FLocalTable.FilterSQL;
edOrderFields.Text := FDADesignUtilsClass.GetOrderFields(FLocalTable);
end;
procedure TDATableEditorForm.DoFinish;
begin
FLocalTable.Free;
FLocalTable := nil;
inherited;
end;
procedure TDATableEditorForm.DoSave;
var
OldActive: boolean;
OldDebug: boolean;
begin
OldActive := Table.Active;
OldDebug := Table.Debug;
try
Table.Assign(FLocalTable);
inherited;
Table.Debug := False;
try
Table.Active := OldActive;
except
end;
finally
Table.Debug := OldDebug;
end;
end;
procedure TDATableEditorForm.InitSQL;
begin
meSQL.Lines.Text := '';
try
if FDADesignUtilsClass.GetTableName(FLocalTable) <> '' then begin
FDADesignUtilsClass.PrepareSQL(FLocalTable);
meSQL.Lines.Text := FLocalTable.FinalSQL;
end;
except
on E: Exception do
if not (E is EOutOfResources) then
raise; // TMemo bug (see TMemoStrings.Insert)
end;
end;
procedure TDATableEditorForm.GetTableNames(Connection: TCustomDAConnection;
Items: TStrings);
begin
Connection.GetTableNames(Items);
end;
procedure TDATableEditorForm.cbTableNameDropDown(Sender: TObject);
var
UsedConnection: TCustomDAConnection;
begin
UsedConnection := TDBAccessUtils.UsedConnection(Table);
if TDBAccessUtils.UsedConnection(Table) = nil then
Exit;
try
if not FListGot then begin
GetTableNames(UsedConnection, cbTableName.Items);
FListGot := True;
end;
except
Application.HandleException(Self);
end;
end;
procedure TDATableEditorForm.cbTableNameExit(Sender: TObject);
var
s: string;
begin
try
s := TDBAccessUtils.UnQuoteName(FLocalTable, Trim(cbTableName.Text));
if s <> FDADesignUtilsClass.GetTableName(FLocalTable) then begin
FDADesignUtilsClass.SetTableName(FLocalTable, cbTableName.Text);
InitSQL;
Modified:= True;
end;
except
cbTableName.SetFocus;
raise;
end;
end;
procedure TDATableEditorForm.edOrderFieldsExit(Sender: TObject);
begin
if edOrderFields.Text <> FDADesignUtilsClass.GetOrderFields(FLocalTable) then begin
FDADesignUtilsClass.SetOrderFields(FLocalTable, edOrderFields.Text);
InitSQL;
Modified:= True;
end;
end;
procedure TDATableEditorForm.edFilterExit(Sender: TObject);
begin
if edFilter.Text <> FLocalTable.FilterSQL then begin
FLocalTable.FilterSQL:= edFilter.Text;
InitSQL;
Modified:= True;
end;
end;
function TDATableEditorForm.GetComponent: TComponent;
begin
Result := Table;
end;
procedure TDATableEditorForm.SetComponent(Value: TComponent);
begin
Table := Value as TCustomDADataSet;
end;
function TDATableEditorForm.GetLocalComponent: TComponent;
begin
Result := FLocalTable;
end;
procedure TDATableEditorForm.btnDataEditorClick(Sender: TObject);
begin
inherited;
SaveControlData;
DoSave;
with TDADataEditorForm.Create(nil, FDADesignUtilsClass) do
try
Component := Self.FLocalTable;
ShowModal;
finally
Free;
end;
end;
end.