2007-10-08 08:05:23 +00:00
|
|
|
|
unit uEditorDBBase;
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
|
|
|
|
uEditorItem, ImgList, PngImageList, StdActns, ActnList, TBX,
|
|
|
|
|
|
TB2Item, TB2Dock, TB2Toolbar, ComCtrls, JvExControls, JvComponent,
|
|
|
|
|
|
JvNavigationPane, DB, uDADataTable, uEditorBase, JvFormAutoSize,
|
|
|
|
|
|
uDAScriptingProvider, uDACDSDataTable, AppEvnts, uCustomView, uViewBase,
|
|
|
|
|
|
JvAppStorage, JvAppRegistryStorage, JvFormPlacement,
|
|
|
|
|
|
pngimage, ExtCtrls, dxLayoutLookAndFeels, JvComponentBase, TBXStatusBars,
|
|
|
|
|
|
JvExComCtrls, JvStatusBar, uDAInterfaces;
|
|
|
|
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
IEditorDBBase = interface(IEditorBase)
|
|
|
|
|
|
['{1F5B318F-F700-4C78-ABCE-E2329AD876B8}']
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
TfEditorDBBase = class(TfEditorBase, IEditorDBBase)
|
|
|
|
|
|
dsDataTable: TDADataSource;
|
|
|
|
|
|
procedure actAnteriorExecute(Sender: TObject);
|
|
|
|
|
|
procedure actSiguienteExecute(Sender: TObject);
|
|
|
|
|
|
procedure actAnteriorUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actSiguienteUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actRefrescarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); virtual;
|
|
|
|
|
|
procedure actEliminarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actModificarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actPrevisualizarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actImprimirUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actGuardarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure actGuardarCerrarUpdate(Sender: TObject);
|
|
|
|
|
|
procedure dsDataTableDataChange(Sender: TObject; Field: TField);
|
|
|
|
|
|
protected
|
|
|
|
|
|
function HayDatos: Boolean;
|
2009-11-24 11:10:50 +00:00
|
|
|
|
function PuedoImprimir: Boolean; virtual;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
function GetModified: Boolean; override;
|
|
|
|
|
|
procedure RefrescarInterno; override;
|
|
|
|
|
|
procedure CancelarCambiosInterno; override;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
|
|
uses
|
|
|
|
|
|
uDataTableUtils, cxControls, uCustomEditor;
|
|
|
|
|
|
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actAnteriorExecute(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if Assigned(dsDataTable.DataTable) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
if (not ModifiedQuery) then
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
|
|
|
|
|
|
dsDataTable.DataTable.Prior;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actSiguienteExecute(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if Assigned(dsDataTable.DataTable) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
if (not ModifiedQuery) then
|
|
|
|
|
|
Exit;
|
|
|
|
|
|
|
|
|
|
|
|
dsDataTable.DataTable.Next;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actAnteriorUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if HayDatos then
|
|
|
|
|
|
(Sender as TAction).Enabled := not dsDataTable.DataTable.BOF
|
|
|
|
|
|
else
|
|
|
|
|
|
(Sender as TAction).Enabled := False;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actSiguienteUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if HayDatos then
|
|
|
|
|
|
(Sender as TAction).Enabled := not dsDataTable.DataTable.EOF
|
|
|
|
|
|
else
|
|
|
|
|
|
(Sender as TAction).Enabled := False;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.CancelarCambiosInterno;
|
|
|
|
|
|
var
|
|
|
|
|
|
dtDetails : TList;
|
|
|
|
|
|
i : integer;
|
|
|
|
|
|
ABookmark : TBookmark;
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
|
|
|
|
|
|
if Assigned(dsDataTable.DataTable) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
ABookmark := dsDataTable.DataTable.GetBookMark;
|
|
|
|
|
|
dsDataTable.DataTable.DisableControls;
|
|
|
|
|
|
// dsDataTable.DataTable.DisableEventHandlers; <- No descomentar
|
|
|
|
|
|
|
|
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
{ No lo pongo en try..finally para ver posibles errores }
|
|
|
|
|
|
//try
|
|
|
|
|
|
dsDataTable.DataTable.Cancel;
|
|
|
|
|
|
|
|
|
|
|
|
dtDetails := dsDataTable.DataTable.GetDetailDataTables;
|
|
|
|
|
|
for i := 0 to dtDetails.Count - 1 do
|
|
|
|
|
|
begin
|
|
|
|
|
|
(TDADataTable(dtDetails.Items[i])).Cancel;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
dsDataTable.DataTable.CancelUpdates;
|
|
|
|
|
|
|
2008-05-26 14:57:35 +00:00
|
|
|
|
//Forzamos el cancel update de los detalles porque falla si se lo dejamos por ser maestro-detalle
|
|
|
|
|
|
dtDetails := dsDataTable.DataTable.GetDetailDataTables;
|
|
|
|
|
|
for i := 0 to dtDetails.Count - 1 do
|
|
|
|
|
|
begin
|
|
|
|
|
|
(TDADataTable(dtDetails.Items[i])).CancelUpdates;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-10-08 08:05:23 +00:00
|
|
|
|
{ Comprobar si el bookmark no es v<EFBFBD>lido cuando estamos cancelando la
|
|
|
|
|
|
inserci<EFBFBD>n de una fila nueva.
|
|
|
|
|
|
CUIDADO!! Si no es v<EFBFBD>lido salta una excepci<EFBFBD>n. NO devuelve false!!!}
|
|
|
|
|
|
try
|
|
|
|
|
|
if (Assigned(ABookmark)) and
|
|
|
|
|
|
(dsDataTable.DataTable.Dataset.BookmarkValid(ABookmark)) then
|
|
|
|
|
|
dsDataTable.DataTable.GotoBookmark(ABookmark);
|
|
|
|
|
|
except
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
//finally
|
|
|
|
|
|
dsDataTable.DataTable.EnableControls;
|
|
|
|
|
|
dsDataTable.DataTable.FreeBookmark(ABookmark);
|
|
|
|
|
|
// dsDataTable.DataTable.EnableEventHandlers; <- No descomentar
|
|
|
|
|
|
HideHourglassCursor
|
|
|
|
|
|
//end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.dsDataTableDataChange(Sender: TObject; Field: TField);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
2008-10-27 19:03:34 +00:00
|
|
|
|
if not (Sender as TDADataSource).DataTable.Opening and
|
|
|
|
|
|
not (Sender as TDADataSource).DataTable.Closing and
|
|
|
|
|
|
not (Sender as TDADataSource).DataTable.Fetching then
|
2008-05-30 18:21:30 +00:00
|
|
|
|
ActualizarEstadoEditor;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actRefrescarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if HayDatos then
|
|
|
|
|
|
(Sender as TAction).Enabled := (not dsDataTable.DataTable.Fetching) and
|
|
|
|
|
|
(not dsDataTable.DataTable.Opening) and
|
|
|
|
|
|
(not dsDataTable.DataTable.Closing) and
|
|
|
|
|
|
(dsDataTable.DataTable.State <> dsInsert)
|
|
|
|
|
|
else
|
|
|
|
|
|
(Sender as TAction).Enabled := False;
|
|
|
|
|
|
|
|
|
|
|
|
//MODO CONSULTAR ITEM
|
|
|
|
|
|
if (Sender as TAction).Enabled
|
|
|
|
|
|
and Assigned(dsDataTable.DataTable) then
|
|
|
|
|
|
(Sender as TAction).Enabled := not dsDataTable.DataTable.ReadOnly;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TfEditorDBBase.GetModified: Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
if ReadOnly then
|
|
|
|
|
|
Result := False
|
|
|
|
|
|
else
|
|
|
|
|
|
Result := DataTableModified(dsDataTable.DataTable) or inherited GetModified;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
function TfEditorDBBase.HayDatos: Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := Assigned(dsDataTable.DataTable) and (dsDataTable.DataTable.State <> dsInactive)
|
|
|
|
|
|
and (not dsDataTable.DataTable.IsEmpty);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2009-11-24 11:10:50 +00:00
|
|
|
|
function TfEditorDBBase.PuedoImprimir: Boolean;
|
|
|
|
|
|
begin
|
|
|
|
|
|
Result := True;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2007-10-08 08:05:23 +00:00
|
|
|
|
procedure TfEditorDBBase.RefrescarInterno;
|
|
|
|
|
|
var
|
2008-05-30 18:21:30 +00:00
|
|
|
|
AID: Integer;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if Assigned(dsDataTable.DataTable) then
|
|
|
|
|
|
begin
|
|
|
|
|
|
if (dsDataTable.DataTable.IsEmpty) or (not ModifiedQuery) then
|
|
|
|
|
|
Exit; // No continuar con el refresco
|
|
|
|
|
|
|
2008-05-30 18:21:30 +00:00
|
|
|
|
with dsDataTable.DataTable do
|
|
|
|
|
|
begin
|
|
|
|
|
|
AID := RecIDValue;
|
|
|
|
|
|
DisableControls; //<- No descomentar
|
2008-06-04 11:52:13 +00:00
|
|
|
|
dsDataTable.OnStateChange := NIL;
|
2008-05-30 18:21:30 +00:00
|
|
|
|
ShowHourglassCursor;
|
|
|
|
|
|
try
|
|
|
|
|
|
Refresh;
|
|
|
|
|
|
Locate(RecIDField.FieldName, AID, []);
|
|
|
|
|
|
finally
|
2008-06-04 11:52:13 +00:00
|
|
|
|
dsDataTable.OnDataChange := dsDataTableDataChange;
|
2008-05-30 18:21:30 +00:00
|
|
|
|
EnableControls; //<- No descomentar
|
|
|
|
|
|
HideHourglassCursor;
|
|
|
|
|
|
end;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
|
|
|
|
begin
|
|
|
|
|
|
{ Para resetear el estado de la tabla en el caso de hacer un insert
|
|
|
|
|
|
sin meter ning<EFBFBD>n dato. }
|
|
|
|
|
|
if Assigned(dsDataTable.DataTable) and (not Modified) then
|
|
|
|
|
|
dsDataTable.DataTable.Cancel;
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actEliminarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if (Sender as TAction).Enabled then
|
|
|
|
|
|
(Sender as TAction).Enabled := HayDatos and (dsDataTable.DataTable.State <> dsInsert)
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actGuardarCerrarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if (Sender as TAction).Enabled then
|
|
|
|
|
|
(Sender as TAction).Enabled := HayDatos;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actGuardarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if (Sender as TAction).Enabled then
|
|
|
|
|
|
(Sender as TAction).Enabled := HayDatos;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actModificarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
|
|
|
|
|
if (Sender as TAction).Enabled then
|
|
|
|
|
|
(Sender as TAction).Enabled := HayDatos;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actPrevisualizarUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
2009-11-24 11:10:50 +00:00
|
|
|
|
(Sender as TAction).Enabled := HayDatos and PuedoImprimir;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TfEditorDBBase.actImprimirUpdate(Sender: TObject);
|
|
|
|
|
|
begin
|
|
|
|
|
|
inherited;
|
2009-11-24 11:10:50 +00:00
|
|
|
|
(Sender as TAction).Enabled := HayDatos and PuedoImprimir;
|
2007-10-08 08:05:23 +00:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
initialization
|
|
|
|
|
|
RegisterClass(TfEditorDBBase);
|
|
|
|
|
|
|
|
|
|
|
|
finalization
|
|
|
|
|
|
UnRegisterClass(TfEditorDBBase);
|
|
|
|
|
|
|
|
|
|
|
|
end.
|