224 lines
5.0 KiB
ObjectPascal
224 lines
5.0 KiB
ObjectPascal
|
|
//////////////////////////////////////////////////
|
|||
|
|
// DB Access Components
|
|||
|
|
// Copyright <20> 1998-2007 Core Lab. All right reserved.
|
|||
|
|
// Base Component Editor
|
|||
|
|
//////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
{$IFNDEF CLR}
|
|||
|
|
|
|||
|
|
{$I Dac.inc}
|
|||
|
|
|
|||
|
|
unit VTDataEditor;
|
|||
|
|
{$ENDIF}
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
uses
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, DBGrids, Dialogs,
|
|||
|
|
StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, DBCtrls,
|
|||
|
|
{$ENDIF}
|
|||
|
|
{$IFDEF LINUX}
|
|||
|
|
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDBGrids, QDialogs, QStdCtrls,
|
|||
|
|
QExtCtrls, QButtons, QDBCtrls, QComCtrls, QGrids,
|
|||
|
|
{$ENDIF}
|
|||
|
|
DB, CRDataEditor, DADesignUtils, VirtualTable;
|
|||
|
|
|
|||
|
|
type
|
|||
|
|
TVTDataEditorForm = class(TCRDataEditorForm)
|
|||
|
|
btSave: TSpeedButton;
|
|||
|
|
btClear: TSpeedButton;
|
|||
|
|
btLoadFromFile: TSpeedButton;
|
|||
|
|
btSaveToFile: TSpeedButton;
|
|||
|
|
OpenDialog: TOpenDialog;
|
|||
|
|
SaveDialog: TSaveDialog;
|
|||
|
|
procedure btLoadFromFileClick(Sender: TObject);
|
|||
|
|
procedure btSaveToFileClick(Sender: TObject);
|
|||
|
|
procedure btClearClick(Sender: TObject);
|
|||
|
|
procedure DataSourceDataChange(Sender: TObject; Field: TField);
|
|||
|
|
private
|
|||
|
|
LocalDataSet: TVirtualTable;
|
|||
|
|
|
|||
|
|
procedure AfterPost(DataSet: TDataSet);
|
|||
|
|
procedure AfterDelete(DataSet: TDataSet);
|
|||
|
|
|
|||
|
|
function LoadDefaultExt: integer;
|
|||
|
|
procedure SaveDefaultExt(Value: integer);
|
|||
|
|
protected
|
|||
|
|
procedure DoInit; override;
|
|||
|
|
procedure DoSave; override;
|
|||
|
|
procedure DoFinish; override;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
{$IFDEF IDE}
|
|||
|
|
{$R *.dfm}
|
|||
|
|
{$ENDIF}
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
{$R VTDataEditor.dfm}
|
|||
|
|
{$ENDIF}
|
|||
|
|
{$IFDEF LINUX}
|
|||
|
|
{$R *.xfm}
|
|||
|
|
{$ENDIF}
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
{$IFDEF CLR}
|
|||
|
|
Variants,
|
|||
|
|
{$ENDIF}
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
Registry,
|
|||
|
|
{$ENDIF}
|
|||
|
|
TypInfo;
|
|||
|
|
|
|||
|
|
{ TDADataEditorForm }
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.DoInit;
|
|||
|
|
var
|
|||
|
|
Filtered: boolean;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
|
|||
|
|
DataSource.DataSet := nil;
|
|||
|
|
|
|||
|
|
LocalDataSet:= TVirtualTable.Create(Self);
|
|||
|
|
Filtered := FDataSet.Filtered;
|
|||
|
|
try
|
|||
|
|
FDataSet.Filtered := False;
|
|||
|
|
LocalDataSet.Assign(FDataSet);
|
|||
|
|
finally
|
|||
|
|
FDataSet.Filtered := Filtered;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
LocalDataSet.Filter := FDataSet.Filter;
|
|||
|
|
LocalDataSet.Filtered := Filtered;
|
|||
|
|
Caption := FDataSet.Owner.Name + '.' + FDataSet.Name;
|
|||
|
|
|
|||
|
|
DataSource.DataSet:= LocalDataSet;
|
|||
|
|
LocalDataSet.Open;
|
|||
|
|
LocalDataSet.AfterPost := AfterPost;
|
|||
|
|
LocalDataSet.AfterDelete:= AfterDelete;
|
|||
|
|
|
|||
|
|
Modified:= False;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.DoSave;
|
|||
|
|
var
|
|||
|
|
OldFiltered: boolean;
|
|||
|
|
begin
|
|||
|
|
OldFiltered := LocalDataSet.Filtered;
|
|||
|
|
try
|
|||
|
|
LocalDataSet.Filtered := False;
|
|||
|
|
FDataSet.Assign(LocalDataSet);
|
|||
|
|
LocalDataSet.Close;
|
|||
|
|
finally
|
|||
|
|
LocalDataSet.Filtered := OldFiltered;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.DoFinish;
|
|||
|
|
begin
|
|||
|
|
LocalDataSet.Free;
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.AfterDelete(DataSet: TDataSet);
|
|||
|
|
begin
|
|||
|
|
Modified := True;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.AfterPost(DataSet: TDataSet);
|
|||
|
|
begin
|
|||
|
|
Modified := True;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TVTDataEditorForm.LoadDefaultExt: integer;
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
var
|
|||
|
|
Registry: TRegistry;
|
|||
|
|
{$ENDIF}
|
|||
|
|
begin
|
|||
|
|
Result := 1;
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
Registry := TRegistry.Create;
|
|||
|
|
try
|
|||
|
|
with Registry do begin
|
|||
|
|
OpenKey(KeyPath + '\' + FolderName, True);
|
|||
|
|
if ValueExists('DefaultExt') then
|
|||
|
|
Result := ReadInteger('DefaultExt');
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
Registry.Free;
|
|||
|
|
end;
|
|||
|
|
{$ENDIF}
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.SaveDefaultExt(Value: integer);
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
var
|
|||
|
|
Registry: TRegistry;
|
|||
|
|
{$ENDIF}
|
|||
|
|
begin
|
|||
|
|
{$IFDEF MSWINDOWS}
|
|||
|
|
Registry := TRegistry.Create;
|
|||
|
|
try
|
|||
|
|
with Registry do begin
|
|||
|
|
OpenKey(KeyPath + '\' + FolderName, True);
|
|||
|
|
WriteInteger('DefaultExt', Value);
|
|||
|
|
end;
|
|||
|
|
finally
|
|||
|
|
Registry.Free;
|
|||
|
|
end;
|
|||
|
|
{$ENDIF}
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.btLoadFromFileClick(Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
OpenDialog.FilterIndex := LoadDefaultExt;
|
|||
|
|
if OpenDialog.Execute then
|
|||
|
|
LocalDataSet.LoadFromFile(OpenDialog.FileName);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.btSaveToFileClick(Sender: TObject);
|
|||
|
|
var
|
|||
|
|
FileName: string;
|
|||
|
|
begin
|
|||
|
|
SaveDialog.FilterIndex := LoadDefaultExt;
|
|||
|
|
if SaveDialog.Execute then begin
|
|||
|
|
FileName := SaveDialog.FileName;
|
|||
|
|
SaveDefaultExt(SaveDialog.FilterIndex);
|
|||
|
|
if ExtractFileExt(FileName) = '' then
|
|||
|
|
case SaveDialog.FilterIndex of
|
|||
|
|
1: FileName := FileName + '.vtd';
|
|||
|
|
2: FileName := FileName + '.xml';
|
|||
|
|
end;
|
|||
|
|
case SaveDialog.FilterIndex of
|
|||
|
|
1: LocalDataSet.SaveToFile(FileName);
|
|||
|
|
2: LocalDataSet.SaveToXML(FileName);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.btClearClick(Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
LocalDataSet.Clear;
|
|||
|
|
Modified:= True;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure TVTDataEditorForm.DataSourceDataChange(Sender: TObject;
|
|||
|
|
Field: TField);
|
|||
|
|
begin
|
|||
|
|
if LocalDataSet <> nil then begin // event first occurs before assigning value to LocalDataSet
|
|||
|
|
StatusBar.Panels[0].Text := 'RecordCount: ' + IntToStr(LocalDataSet.RecordCount);
|
|||
|
|
StatusBar.Panels[1].Text := 'RecordNo: ' + IntToStr(LocalDataSet.RecNo);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
{$IFDEF CLR}
|
|||
|
|
|
|||
|
|
initialization
|
|||
|
|
|
|||
|
|
RegisterClass(TDBGrid);
|
|||
|
|
{$ENDIF}
|
|||
|
|
|
|||
|
|
end.
|