git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.SDAC@3 6f543ec7-021b-7e4c-98c9-62eafc7fb9a8
232 lines
5.4 KiB
ObjectPascal
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.
|