{ =============================================================================== Copyright (©) 2002. 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: 07-12-2002 Versión actual: 1.0.1 Fecha versión actual: 18-06-2003 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- 18-06-2003 La descripción de la propiedad no se guarda en la tabla en mayúsculas si no tal y como lo ha escrito el usuario. =============================================================================== } unit TablaPropiedades; interface uses //Generales SysUtils, Classes, Controls, IBSQL, cxGridDBTableView, cxCustomData, DB, //Particulares //Aplicacion Framework, StrFunc, Entidades, Constantes, BaseDatos; type TDatosPropiedad = class(TObjeto) protected procedure AssignTo(Dest: TPersistent); override; public NumPropiedad : Integer; Seccion : String; CodigoPropiedad : Integer; Valor : String; end; TListaPropiedades = class(TListaObjetos) private function GetPropiedad(Index: Integer): TDatosPropiedad; public property Items[Index: Integer] : TDatosPropiedad read GetPropiedad; end; TdmTablaPropiedades = class(TDataModule) private procedure IniciarSQL; public sqlInsertar : TStrings; sqlModificar : TStrings; sqlConsultar : TStrings; sqlEliminar : TStrings; sqlGrid : TStrings; sqlListaPropiedades : TStrings; constructor Create (AOwner : TComponent); override; destructor Destroy; override; procedure InicializarGridPropiedades(var vGrid: TcxGridDBTableView); function darPropiedades: TStrings; overload; function darContadorPropiedad: Integer; procedure darPropiedades(var PropiedadCodigo, CodigoPropiedad: TStringList); overload; function darPropiedadRelacionada(Codigo : String): Integer; procedure asignarNullCopiaPropiedad(Codigo : Integer); procedure asignarCopiaPropiedad(Codigo: Integer; Copia : Integer); end; var dmTablaPropiedades : TdmTablaPropiedades; implementation {$R *.DFM} constructor TdmTablaPropiedades.Create (AOwner : TComponent); begin inherited; sqlGrid := TStringList.Create; sqlInsertar := TStringList.Create; sqlModificar := TStringList.Create; sqlConsultar := TStringList.Create; sqlEliminar := TStringList.Create; sqlListaPropiedades := TStringList.Create; IniciarSQL; end; destructor TdmTablaPropiedades.Destroy; begin sqlGrid.Free; sqlInsertar.Free; sqlModificar.Free; sqlConsultar.Free; sqlEliminar.Free; sqlListaPropiedades.Free; inherited; end; procedure TdmTablaPropiedades.IniciarSQL; begin with sqlInsertar do begin Add('insert into PROPIEDADES (CODIGO, DESCRIPCION, COPIA) '); Add('values (:CODIGO, :DESCRIPCION, :COPIA)'); end; with sqlModificar do begin Add('update PROPIEDADES set '); Add('DESCRIPCION = :DESCRIPCION, '); Add('COPIA = :COPIA '); Add('where CODIGO = :CODIGO'); end; with sqlEliminar do begin Add('delete from PROPIEDADES '); Add('where CODIGO = :CODIGO'); end; with sqlConsultar do begin Add('select CODIGO, DESCRIPCION, COPIA '); Add('from PROPIEDADES '); end; with sqlListaPropiedades do begin Add('select * from PROPIEDADES '); Add('order by DESCRIPCION '); end; end; procedure TdmTablaPropiedades.InicializarGridPropiedades(var vGrid: TcxGridDBTableView); var Columna : TcxGridDBColumn; begin with vGrid do begin OptionsView.Footer := True; {Columna CODIGO} Columna := CreateColumn; Columna.DataBinding.FieldName := 'CODIGO'; Columna.Caption := 'Código de la propiedad'; Columna.Options.Filtering := False; Columna.Visible := False; {Columna DESCRIPCION} Columna := CreateColumn; Columna.DataBinding.FieldName := 'DESCRIPCION'; Columna.Caption := 'Lista de propiedades'; Columna.Options.Filtering := False; Columna.SortOrder := soAscending; with TcxGridDBTableSummaryItem(DataController.Summary.FooterSummaryItems.Add) do try try BeginUpdate; Column := Columna; FieldName := Columna.DataBinding.FieldName; Format := 'Total: 0 propiedades'; Kind := skCount; finally EndUpdate; end; except DataController.Summary.FooterSummaryItems.Delete(DataController.Summary.FooterSummaryItems.Count-1); end; end; end; function TdmTablaPropiedades.darPropiedades: TStrings; var oSQL : TIBSQL; Lista : TStringList; begin oSQL := TIBSQL.Create(Self); Lista := TStringList.Create; with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select DESCRIPCION from PROPIEDADES order by DESCRIPCION'); try Prepare; ExecQuery; while not EOF do begin Lista.Append(Fields[0].AsString); Next; end; Result := Lista; finally Close; Transaction := NIL; Free; end; end; end; { TDatosPropiedad } procedure TDatosPropiedad.AssignTo(Dest: TPersistent); begin if not (Dest is TDatosPropiedad) then AssignError(Dest); (Dest as TDatosPropiedad).CodigoPropiedad := CodigoPropiedad; (Dest as TDatosPropiedad).Valor := Valor; end; function TdmTablaPropiedades.darContadorPropiedad: Integer; var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select MAX(CODIGO) from PROPIEDADES'); try Prepare; ExecQuery; Result := (Fields[0].AsInteger + 1); finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPropiedades.darPropiedades(var PropiedadCodigo, CodigoPropiedad: TStringList); var oSQL : TIBSQL; begin if (PropiedadCodigo = nil) or (CodigoPropiedad = nil) then Exit; //Limpiamos los valores que tubieran antes (por si acaso) PropiedadCodigo.Clear; CodigoPropiedad.Clear; oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select CODIGO, DESCRIPCION from PROPIEDADES '); SQL.Add('order by CODIGO'); try Prepare; ExecQuery; while not EOF do begin PropiedadCodigo.Values[FieldByName('DESCRIPCION').AsString] := FieldByName('CODIGO').AsString; CodigoPropiedad.Values[FieldByName('CODIGO').AsString] := FieldByName('DESCRIPCION').AsString; Next; end; finally Close; Transaction := NIL; Free; end; end; end; function TdmTablaPropiedades.darPropiedadRelacionada(Codigo : String): Integer; var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('select COPIA from PROPIEDADES '); SQL.Add('where CODIGO = :CODIGO'); try ParamByName('CODIGO').AsString := Codigo; Prepare; ExecQuery; // Compruebo si se han recuperado datos if (RecordCount > 0) then begin if (esCadenaVacia(Fields[0].AsString)) then Result := -1 else Result := Fields[0].AsInteger; end else Result := -1; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPropiedades.asignarNullCopiaPropiedad(Codigo: Integer); var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PROPIEDADES '); SQL.Add('set COPIA = NULL '); SQL.Add('where CODIGO = :CODIGO'); try ParamByName('CODIGO').AsInteger := Codigo; Prepare; ExecQuery; finally Close; Transaction := NIL; Free; end; end; end; procedure TdmTablaPropiedades.AsignarCopiaPropiedad(Codigo: Integer; Copia: Integer); var oSQL : TIBSQL; begin oSQL := TIBSQL.Create(Self); with oSQL do begin Database := dmBaseDatos.BD; Transaction := dmBaseDatos.Transaccion; SQL.Add('update PROPIEDADES '); SQL.Add('set COPIA = :COPIA '); SQL.Add('where CODIGO = :CODIGO'); try ParamByName('COPIA').AsInteger := Copia; ParamByName('CODIGO').AsInteger := Codigo; Prepare; ExecQuery; finally Close; Transaction := NIL; Free; end; end; end; { TListaPropiedades } function TListaPropiedades.GetPropiedad(Index: Integer): TDatosPropiedad; begin Result := TDatosPropiedad(FLista.Items[Index]); end; end.