{ =============================================================================== Copyright (©) 2001. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 01-10-2001 Versión actual: 1.0.4 Fecha versión actual: 28-12-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 03-10-2001 Quitar refresco del grid, ordenación por click en titulo 05-11-2001 Quitar la cacheUpdates, y hacer bloqueo para los demás usuarios 07-04-2002 Se ha adaptado a una unica transacción. 09-05-2002 Cambio de grid en lugar de utilizar UltimDBGrid, utilizaremos dxDBGrid. 28-12-2002 Se establece el campo DESCRIPCION como clave primaria y se captura la excepcion (no se permitirán bancos con misma descripcion), arreglo de el boton cancelar de el mensaje "esta seguro que desea eliminar" =============================================================================== } unit Bancos; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RDXDBFRAME, RdxBotones, ExtCtrls, RdxPaneles, RdxBarras, RdxTitulos, Grids, DBGrids, RXDBCtrl, IBCustomDataSet, Db, StdCtrls, DBTables, dxCntner, dxTL, dxDBCtrl, dxDBGrid; type TfrBancos = class(TRdxDBFrame) BarraBancos: TRdxBarraSuperior; dsBancos: TDataSource; brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelar: TRdxBoton; pnlCuerpo: TRdxPanel; pnlGrid: TRdxPanel; pnlBotones: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; gridBancos: TdxDBGrid; procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); private TablaBancos : TIBDataSet; procedure ActualizarBotones; protected procedure ActivarModoAnadir; override; public constructor Create (AOwner : TComponent); override; destructor Destroy; override; published procedure AppException(Sender: TObject; E: Exception); procedure BancosAfterInsert(DataSet: TDataSet); property BaseDatos; property Transaccion; end; var frBancos: TfrBancos; implementation {$R *.DFM} { TfrBancos } uses Tipos, BaseDatos, TablaBancos, IB, Mensajes, StrFunc, Excepciones, IBErrorCodes, Configuracion, Literales; constructor TfrBancos.Create(AOwner: TComponent); begin inherited Create(AOwner); Application.OnException := AppException; Entidad := entBancos; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaBancos := TIBDataSet.Create(Self); TablaBancos.AfterInsert := BancosAfterInsert; dsBancos.DataSet := TablaBancos; with TablaBancos do begin Database := BaseDatos; Transaction := Transaccion; InsertSQL.Assign(dmTablaBancos.sqlInsertar); ModifySQL.Assign(dmTablaBancos.sqlModificar); DeleteSQL.Assign(dmTablaBancos.sqlEliminar); SelectSQL.Assign(dmTablaBancos.sqlConsultar); end; end; destructor TfrBancos.Destroy; begin Application.OnException := NIL; TablaBancos.Close; TablaBancos.UnPrepare; TablaBancos.Free; inherited; end; procedure TfrBancos.bAnadirClick(Sender: TObject); begin TablaBancos.Append; gridBancos.SetFocus; end; procedure TfrBancos.bEliminarClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; try if TablaBancos.RecordCount = 0 { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } then TablaBancos.Cancel else TablaBancos.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrBancos.bAceptarClick(Sender: TObject); begin if TablaBancos.State in [dsEdit, dsInsert] then TablaBancos.Post; Commit; CloseFrame; end; procedure TfrBancos.bCancelarClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrBancos.BancosAfterInsert(DataSet: TDataSet); begin DataSet.FieldByName('DB_KEY').AsString := '-'; end; procedure TfrBancos.AppException(Sender: TObject; E: Exception); begin if E.Message = 'Field ''DESCRIPCION'' must have a value' then begin VerMensaje(msgDatBancoFaltaDes); TablaBancos.Edit; end else if E.Message = 'violation of PRIMARY or UNIQUE KEY constraint "PK_BANCOS" on table "BANCOS"' then begin VerMensajeFmt(msgDatBancoRepetido, [UpperCase(TablaBancos.FieldByName('DESCRIPCION').AsString)]); TablaBancos.Edit; end else VerMensaje(E.Message); end; procedure TfrBancos.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bEliminar.Enabled := False; gridBancos.Enabled := False; end else begin bAnadir.Enabled := True; bEliminar.Enabled := True; gridBancos.Enabled := True; end; end; procedure TfrBancos.ActivarModoAnadir; begin try with TablaBancos do begin Prepare; Open; ActualizarBotones; if RecordCount = 0 then begin Edit; FieldByName('DESCRIPCION').AsString := ' '; Post; Delete end else begin Edit; Post end; end; dmTablaBancos.InicializarGridBancos(gridBancos); except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin Rollback; VerMensaje(msgDatBancoTablaBloq); CloseFrame; end else begin Rollback; TratarExcepcion(E); end; end; end; on E : Exception do begin Rollback; TratarExcepcion(E); end; end; end; end.