{ =============================================================================== 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 unidades de medida con misma descripcion), arreglo de el boton cancelar de el mensaje "esta seguro que desea eliminar" =============================================================================== } unit UnidadesMedida; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RDXDBFRAME, RdxBotones, ExtCtrls, RdxPaneles, RdxBarras, RdxTitulos, Grids, DBGrids, RXDBCtrl, IBCustomDataSet, Db, StdCtrls, DBTables, IBDatabase, dxCntner, dxTL, dxDBCtrl, dxDBGrid; type TfrUnidadesMedida = class(TRdxDBFrame) BarraUnidadesMedida: TRdxBarraSuperior; dsBancos: TDataSource; brDoble: TRdxBarraInferior; bAceptar: TRdxBoton; bCancelar: TRdxBoton; pnlCuerpo: TRdxPanel; pnlGrid: TRdxPanel; pnlBotones: TRdxPanel; bAnadir: TRdxBoton; bEliminar: TRdxBoton; gridUnidadesMedida: TdxDBGrid; procedure bAnadirClick(Sender: TObject); procedure bEliminarClick(Sender: TObject); procedure bAceptarClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); private TablaUnidadesMedida : 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 frUnidadesMedida: TfrUnidadesMedida; implementation {$R *.DFM} { TfrUnidadesMedida } uses Tipos, BaseDatos, TablaUnidadesMedida, IB, Mensajes, StrFunc, IBErrorCodes, Excepciones, Configuracion, Literales; constructor TfrUnidadesMedida.Create(AOwner: TComponent); begin inherited Create(AOwner); Application.OnException := AppException; Entidad := entUnidadesMedida; ConfigurarFrame(Self, Self.Entidad); BaseDatos := dmBaseDatos.BD; Transaccion := dmBaseDatos.Transaccion; TablaUnidadesMedida := TIBDataSet.Create(Self); TablaUnidadesMedida.AfterInsert := BancosAfterInsert; dsBancos.DataSet := TablaUnidadesMedida; with TablaUnidadesMedida do begin Database := BaseDatos; Transaction := Transaccion; InsertSQL.Assign(dmTablaUnidadesMedida.sqlInsertar); ModifySQL.Assign(dmTablaUnidadesMedida.sqlModificar); DeleteSQL.Assign(dmTablaUnidadesMedida.sqlEliminar); SelectSQL.Assign(dmTablaUnidadesMedida.sqlConsultar); end; end; destructor TfrUnidadesMedida.Destroy; begin Application.OnException := NIL; TablaUnidadesMedida.Close; TablaUnidadesMedida.UnPrepare; TablaUnidadesMedida.Free; inherited; end; procedure TfrUnidadesMedida.bAnadirClick(Sender: TObject); begin TablaUnidadesMedida.Append; gridUnidadesMedida.SetFocus; end; procedure TfrUnidadesMedida.bEliminarClick(Sender: TObject); begin if (VerMensajePregunta(msgDeseaBorrar) <> IDYES) then Exit; try if TablaUnidadesMedida.RecordCount = 0 { Hacemos un cancel de la tabla por si el registro actual estuviera recien creado } then TablaUnidadesMedida.Cancel else TablaUnidadesMedida.Delete; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrUnidadesMedida.bAceptarClick(Sender: TObject); begin if TablaUnidadesMedida.State in [dsEdit, dsInsert] then TablaUnidadesMedida.Post; Commit; CloseFrame; end; procedure TfrUnidadesMedida.bCancelarClick(Sender: TObject); begin try Rollback; CloseFrame; except on E : EIBError do TratarExcepcion(E); on E : Exception do TratarExcepcion(E); end; end; procedure TfrUnidadesMedida.BancosAfterInsert(DataSet: TDataSet); begin DataSet.FieldByName('DB_KEY').AsString := '-'; end; procedure TfrUnidadesMedida.AppException(Sender: TObject; E: Exception); begin if E.Message = 'Field ''DESCRIPCION'' must have a value' then begin VerMensaje(msgUniMedFaltaDes); TablaUnidadesMedida.Edit; end else if E.Message = 'violation of PRIMARY or UNIQUE KEY constraint "PK_UNIDADESMEDIDA" on table "UNIDADESMEDIDA"' then begin VerMensajeFmt(msgUniMedRepetida, [UpperCase(TablaUnidadesMedida.FieldByName('DESCRIPCION').AsString)]); TablaUnidadesMedida.Edit; end else VerMensaje(E.Message); end; procedure TfrUnidadesMedida.ActualizarBotones; begin if BaseDatos.IsReadOnly then begin bAnadir.Enabled := False; bEliminar.Enabled := False; gridUnidadesMedida.Enabled := False; end else begin bAnadir.Enabled := True; bEliminar.Enabled := True; gridUnidadesMedida.Enabled := True; end; end; procedure TfrUnidadesMedida.ActivarModoAnadir; begin try with TablaUnidadesMedida do begin Prepare; Open; ActualizarBotones; if RecordCount = 0 then begin Edit; FieldByName('DESCRIPCION').AsString := ' '; Post; Delete end else begin Edit; Post; end; end; dmTablaUnidadesMedida.InicializarGridUnidadesMedida(gridUnidadesMedida); except on E : EIBError do begin case E.IBErrorCode of isc_lock_conflict : begin Rollback; VerMensaje(msgUniMedTablaBloq); CloseFrame; end else begin Rollback; TratarExcepcion(E); end; end; end; on E : Exception do begin Rollback; TratarExcepcion(E); end; end; end; end.