Diferencia entre revisiones de «TTfvsCatalogoRefrescarForm»
(Página creada con «=Descripción= El objeto '''TTfvsCatalogoRefrescarForm''' (Refrescar el catálogo) aplica las transacciones pendientes de: *Log de desarrollo (prxdevlog) es la cabecera de cada transacción. *Log de desarrollo, detalle (prxdevlogD) guarda el detalle de cada transacción. A la base de datos. =Identidad= Category:MANUAL/PROGRAMADOR Category:OBJETOS/REFRESCO *Ancestro: TfvsForm *Carpeta: C:\D…») |
Sin resumen de edición |
||
Línea 1: | Línea 1: | ||
=Descripción= | =Descripción= | ||
El objeto '''TTfvsCatalogoRefrescarForm''' (Refrescar el catálogo) aplica las transacciones pendientes de: | El objeto '''TTfvsCatalogoRefrescarForm''' (Refrescar el catálogo) aplica, a la base de datos, las transacciones pendientes de: | ||
*[[DEV REGISTRO|Log de desarrollo (prxdevlog)]] es la cabecera de cada transacción. | *[[DEV REGISTRO|Log de desarrollo (prxdevlog)]] es la cabecera de cada transacción. | ||
*[[DEV REGISTRO/DETALLE|Log de desarrollo, detalle (prxdevlogD)]] guarda el detalle de cada transacción. | *[[DEV REGISTRO/DETALLE|Log de desarrollo, detalle (prxdevlogD)]] guarda el detalle de cada transacción. | ||
Este form necesita una revisión completa ya que usa rutinas muy viejas y algunas ya no tienen sentido. | |||
=[[QUEESESTO/IDENTIDAD|Identidad]]= | =[[QUEESESTO/IDENTIDAD|Identidad]]= | ||
Línea 100: | Línea 100: | ||
===property RefreshScripts: TfvsClassScripts read FRefreshScripts write FRefreshScripts=== | ===property RefreshScripts: TfvsClassScripts read FRefreshScripts write FRefreshScripts=== | ||
Refresca los objetos de tipo [[:Category:DEV SCRIPTS|Scripts]]. | Refresca los objetos de tipo [[:Category:DEV SCRIPTS|Scripts]]. | ||
===property Refresh_pVISTA_implemented: TpVISTA_implemented read FRefresh_pVISTA_implemented write FRefresh_pVISTA_implemented=== | |||
No debería estar en este form (ni en ninguna otra parte). | |||
=Implementación= | |||
===procedure RefrescarEstructuraClick(Sender: TObject)=== | |||
Usa un SQL como el de abajo para traer una lista de transacciones de catálogo pendientes de aplicar: | |||
<pre> | |||
SELECT | |||
prxdevlog.Identificador | |||
, prxdevlog.Catalogo | |||
, prxdevlog.Tipo | |||
, prxdevlog.Codigo | |||
, prxdevlog.Subcodigo | |||
, prxdevlog.Operacion | |||
FROM prxdevlog, prxdevlog_clases WHERE | |||
prxdevlog_clases.clase = prxdevlog.Tipo | |||
AND NOT EXISTS (SELECT * FROM prxdevlogops WHERE prxdevlogops.Identificador = prxdevlog.Identificador) | |||
ORDER BY prxdevlog.Identificador | |||
</pre> | |||
Recorre esa lista y según el tipo de objeto a refrescar para cada transacción llama a algo así: | |||
<pre> | |||
if AnsiCompareText(vTipo, 'prxclases') = 0 then | |||
begin | |||
if Assigned(RefreshClases) = False then | |||
RefreshClases := TfvsClassClases.Create(Self); | |||
if ImportandoCatalogo = True then | |||
vOk := RefreshClases.devlog_AplicarComandos(vIdentificador, vCatalogo, vOperacion, True, False); | |||
if vOk then | |||
vOk := RefreshClases.devlog_RefrescarEstructuras(vIdentificador, vCatalogo, vTipo, vCodigo, vSubcodigo, vOperacion); | |||
if vOk then | |||
FIELDS_Flag := True; | |||
Inc(vCount); | |||
end | |||
</pre> | |||
Si el tipo es '''prxclases''' va a usar el objeto '''TfvsClassClases'''. | |||
Llama a su función '''devlog_AplicarComandos(vIdentificador, vCatalogo, vOperacion, True, False)''' usando como argumentos los valores del SQL de transacciones pendientes. | |||
Finalmente llama a su función '''devlog_RefrescarEstructuras(vIdentificador, vCatalogo, vTipo, vCodigo, vSubcodigo, vOperacion)''' para ver si hay que refrescar algo más luego de haber grabado la transacción. El caso típico sería el de recrear la estructura de una tabla una vez que, en el paso anterior, le hemos agregado un campo. | |||
===procedure RefrescarRuntimeClick(Sender: TObject)=== | |||
Finalmente, esta función hace un refresco de algunas tablas que la aplicación usa en runtime, aplica el siguiente SQL: | |||
<pre> | |||
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'prxcamposJER_TBL' DROP TABLE prxcamposJER_TBL | |||
SELECT * INTO prxcamposJER_TBL FROM prxcamposJER_VISTA | |||
GRANT SELECT, INSERT, UPDATE, DELETE ON prxcamposJER_TBL TO public | |||
GO | |||
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'prxSchemaFK_TBL' DROP TABLE prxSchemaFK_TBL | |||
SELECT * INTO prxSchemaFK_TBL FROM prxSchemaFK | |||
GRANT SELECT, INSERT, UPDATE, DELETE ON prxSchemaFK_TBL TO public | |||
GO | |||
</pre> | |||
=Uso= | |||
Este form es llamado desde [[TTfvsCatalogoImportarForm]].Button_APLICARClick. |
Revisión actual - 17:27 29 may 2025
Descripción
El objeto TTfvsCatalogoRefrescarForm (Refrescar el catálogo) aplica, a la base de datos, las transacciones pendientes de:
- Log de desarrollo (prxdevlog) es la cabecera de cada transacción.
- Log de desarrollo, detalle (prxdevlogD) guarda el detalle de cada transacción.
Este form necesita una revisión completa ya que usa rutinas muy viejas y algunas ya no tienen sentido.
Identidad
- Ancestro: TfvsForm
- Carpeta: C:\DevelopPrx\explorer
- Archivo: fvsCatalogoRefrescarForm.pas
Declaración
type TTfvsCatalogoRefrescarForm = class(TTfvsForm) Panel1: TPanel; Panel2: TPanel; fvsDBGrid1: TfvsDBGrid; ButtonCANCELAR: TButton; Timer1: TTimer; procedure FormShow(Sender: TObject); //override; procedure FormClose(Sender: TObject; var Action: TCloseAction); //override; procedure Timer1Timer(Sender: TObject); procedure RefrescarEstructuraClick(Sender: TObject); procedure ButtonCANCELARClick(Sender: TObject); private FRefreshClases: TfvsClassClases; FRefreshConsultas: TfvsClassConsultas; FRefreshEnumeraciones: TfvsClassEnumeraciones; FRefreshFrames: TfvsClassFrames; FRefreshFunciones: TfvsClassFunciones; FRefreshProcedimientos: TfvsClassProcedimientos; FRefreshVistas: TfvsClassVistas; FRefreshTriggers: TfvsClassTriggers; FRefreshIndexes: TfvsClassIndexes; FRefreshScripts: TfvsClassScripts; FRefresh_pVISTA_implemented: TpVISTA_implemented; FCancelarFlag: Boolean; FImportandoCatalogo: Boolean; FAUX_Flag: Boolean; FFIELDS_Flag: Boolean; protected procedure RefrescarRuntimeClick(Sender: TObject); property RefreshClases: TfvsClassClases read FRefreshClases write FRefreshClases; property RefreshConsultas: TfvsClassConsultas read FRefreshConsultas write FRefreshConsultas; property RefreshEnumeraciones: TfvsClassEnumeraciones read FRefreshEnumeraciones write FRefreshEnumeraciones; property RefreshFrames: TfvsClassFrames read FRefreshFrames write FRefreshFrames; property RefreshFunciones: TfvsClassFunciones read FRefreshFunciones write FRefreshFunciones; property RefreshProcedimientos: TfvsClassProcedimientos read FRefreshProcedimientos write FRefreshProcedimientos; property RefreshVistas: TfvsClassVistas read FRefreshVistas write FRefreshVistas; property RefreshTriggers: TfvsClassTriggers read FRefreshTriggers write FRefreshTriggers; property RefreshIndexes: TfvsClassIndexes read FRefreshIndexes write FRefreshIndexes; property RefreshScripts: TfvsClassScripts read FRefreshScripts write FRefreshScripts; property Refresh_pVISTA_implemented: TpVISTA_implemented read FRefresh_pVISTA_implemented write FRefresh_pVISTA_implemented; property CancelarFlag: Boolean read FCancelarFlag write FCancelarFlag; property AUX_Flag: Boolean read FAUX_Flag write FAUX_Flag; property FIELDS_Flag: Boolean read FFIELDS_Flag write FFIELDS_Flag; public property ImportandoCatalogo: Boolean read FImportandoCatalogo write FImportandoCatalogo; end;
property RefreshClases: TfvsClassClases read FRefreshClases write FRefreshClases
Refresca los objetos de tipo Clases.
property RefreshConsultas: TfvsClassConsultas read FRefreshConsultas write FRefreshConsultas
Refresca los objetos de tipo Consultas.
property RefreshEnumeraciones: TfvsClassEnumeraciones read FRefreshEnumeraciones write FRefeshEnumeraciones
Refresca los objetos de tipo Enumeraciones.
property RefreshFrames: TfvsClassFrames read FRefreshFrames write FRefreshFrames
Refresca los objetos de tipo Frames.
property RefreshFunciones: TfvsClassFunciones read FRefreshFunciones write FRefreshFunciones
Refresca los objetos de tipo Funciones.
property RefreshProcedimientos: TfvsClassProcedimientos read FRefreshProcedimientos write FRefreshProcedimientos
Refresca los objetos de tipo Procedimientos.
property RefreshVistas: TfvsClassVistas read FRefreshVistas write FRefreshVistas
Refresca los objetos de tipo Vistas.
property RefreshTriggers: TfvsClassTriggers read FRefreshTriggers write FRefreshTriggers
Refresca los objetos de tipo Clases, triggers (prxtriggers).
property RefreshIndexes: TfvsClassIndexes read FRefreshIndexes write FRefreshIndexes
Refresca los objetos de tipo Clases, índices adicionales (prxclases_indice).
property RefreshScripts: TfvsClassScripts read FRefreshScripts write FRefreshScripts
Refresca los objetos de tipo Scripts.
property Refresh_pVISTA_implemented: TpVISTA_implemented read FRefresh_pVISTA_implemented write FRefresh_pVISTA_implemented
No debería estar en este form (ni en ninguna otra parte).
Implementación
procedure RefrescarEstructuraClick(Sender: TObject)
Usa un SQL como el de abajo para traer una lista de transacciones de catálogo pendientes de aplicar:
SELECT prxdevlog.Identificador , prxdevlog.Catalogo , prxdevlog.Tipo , prxdevlog.Codigo , prxdevlog.Subcodigo , prxdevlog.Operacion FROM prxdevlog, prxdevlog_clases WHERE prxdevlog_clases.clase = prxdevlog.Tipo AND NOT EXISTS (SELECT * FROM prxdevlogops WHERE prxdevlogops.Identificador = prxdevlog.Identificador) ORDER BY prxdevlog.Identificador
Recorre esa lista y según el tipo de objeto a refrescar para cada transacción llama a algo así:
if AnsiCompareText(vTipo, 'prxclases') = 0 then begin if Assigned(RefreshClases) = False then RefreshClases := TfvsClassClases.Create(Self); if ImportandoCatalogo = True then vOk := RefreshClases.devlog_AplicarComandos(vIdentificador, vCatalogo, vOperacion, True, False); if vOk then vOk := RefreshClases.devlog_RefrescarEstructuras(vIdentificador, vCatalogo, vTipo, vCodigo, vSubcodigo, vOperacion); if vOk then FIELDS_Flag := True; Inc(vCount); end
Si el tipo es prxclases va a usar el objeto TfvsClassClases.
Llama a su función devlog_AplicarComandos(vIdentificador, vCatalogo, vOperacion, True, False) usando como argumentos los valores del SQL de transacciones pendientes.
Finalmente llama a su función devlog_RefrescarEstructuras(vIdentificador, vCatalogo, vTipo, vCodigo, vSubcodigo, vOperacion) para ver si hay que refrescar algo más luego de haber grabado la transacción. El caso típico sería el de recrear la estructura de una tabla una vez que, en el paso anterior, le hemos agregado un campo.
procedure RefrescarRuntimeClick(Sender: TObject)
Finalmente, esta función hace un refresco de algunas tablas que la aplicación usa en runtime, aplica el siguiente SQL:
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'prxcamposJER_TBL' DROP TABLE prxcamposJER_TBL SELECT * INTO prxcamposJER_TBL FROM prxcamposJER_VISTA GRANT SELECT, INSERT, UPDATE, DELETE ON prxcamposJER_TBL TO public GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'prxSchemaFK_TBL' DROP TABLE prxSchemaFK_TBL SELECT * INTO prxSchemaFK_TBL FROM prxSchemaFK GRANT SELECT, INSERT, UPDATE, DELETE ON prxSchemaFK_TBL TO public GO
Uso
Este form es llamado desde TTfvsCatalogoImportarForm.Button_APLICARClick.