PDA

Ver la Versión Completa : Problemas con archivos bloqueados


javicho_villa
23-10-2006, 15:53:17
Hola a todos:
Muchas gracias por la atención, tengo un problema que me esta causando muchos incovenientes, bueno el problema es el siguiente:

Tengo una aplicación desarrolada en Delphi 6 con Pardox, donde trabajan un promedio de 10 maquinas en RED, es una fabrica de telas (bastante pelusa) donde 4 maquinas trabajan las 24 horas del dia los 365 dias del año.

Bueno en algunos momentos el sistema no responde y hay que salir todos del sistema borrar los archivos *.lck y *.net y se soluciona el problema el asunto es de que esto esta sucediendo casi a diario y aveces de madrugada (un caos total por que no saben q hacer hasta q llegue yo).

Cuando sucede este problema normalemente una de las maquinas se encuentra colgada, entro a ver q sucede y veo que el ejecutable (Textil.exe) se esta ejecutando varias veces (Como lo veo? en el administrador de tareas de windows), cuando logro encontrar que maquina se esta trabando basta con apagar esas maquina o cerrar todos los ejecutables abiertos y se soluciona el problema.

En general cuando una maquina bloquea algun archivo el sistema no funciona en ninguna maquina de la red.

Por favor, si alguien me podria ayudar se lo voy agradecer muchisimo, estoy casi al borde del colapso total.

saludos,

Javier Villa.

dec
23-10-2006, 16:04:05
Hola,

Lo mismo es que hay "alguien" que ejecuta más de una vez el programa y de ahí el lío... acaso es que el programa no debería ejecutarse más de una vez por cada máquina, es decir, no debería haber más de una instancia del programa en ejecución.

Una buena solución para evitar que un programa mantenga dos instancias en ejecución la proporciona el compañero Román en su página Web (http://www.romansg.net/) con el componente UIApp (http://www.romansg.net/index.php?pg=uiapp).

Claro que no sé si en tu caso bastaría con algo así o habría que mirar por otra solución o soluciones...

javicho_villa
23-10-2006, 16:11:50
Si esta permitido tener mas de 1 instancia del programa, solo que cuando sucede el problema descubro que haty varios ejecutables de la aplicacion en el adminstrador de windows pero solo se ve una sola instancia en el escritorio de windows, es decir es como si le ubiran dado varios clicks al icono y solo se abrio una sola vez.

ahora la mayoria trabaja con dos o tres instancias del problema para realizar varias operaciones, y hasta dos semanas atras nunca hubo problema alguno.

que opinan ??

dec
23-10-2006, 16:15:52
Hola,

Pues a mí se me ocurre que el problema puede estar al cerrarse tu programa. Me explico. No es tanto que alguien haga varias veces "clic" para ejecutar el programa sino que cuando cierran una instancia del programa esta no lo hace en condiciones y se queda en memoria...

Tal vez por ahí pueden ir los tiros, pienso yo, vamos, tal vez convenía revisar qué ocurre cuando se cierra el programa, si te aseguras de "cerrar" todo lo que sea menester, etc. No sé... es lo que pienso, lo mismo estoy equivocándome, ¿eh? ;)

javicho_villa
23-10-2006, 16:22:53
Hola:
creo q tienes razon, pero creo q solo es uno de los problemas que causa el incoveniente, te pongo el codigo de inicio del programa.


program Textil;
uses
Forms,
PTipoParametro in 'PTipoParametro.pas' {PTipoParametroForm},
Negocio in 'Negocio.pas' {DM: TDataModule},
PTipoParametroDato in 'PTipoParametroDato.pas' {PTipoParametroDatoForm},
PParametro in 'PParametro.pas' {PParametroForm},
PParametroDato in 'PParametroDato.pas' {PParametroDatoForm},
Producto in 'Producto.pas' {ProductoForm},
ProductoDato in 'ProductoDato.pas' {ProductoDatoForm},
Kardex in 'Kardex.pas' {KardexForm},
KardexDato in 'KardexDato.pas' {KardexDatoForm},
Principal in 'Principal.pas' {PrincipalForm},
ProductoConsulta in 'ProductoConsulta.pas' {ProductoConsultaForm},
Calculadora in 'Calculadora.pas' {CalculadoraForm},
GuiaDato in 'GuiaDato.pas' {GuiaDatoForm},
Transportista in 'Transportista.pas' {TransportistaForm},
TransportistaDato in 'TransportistaDato.pas' {TransportistaDatoForm},
TransportistaConsulta in 'TransportistaConsulta.pas' {TransportistaConsultaForm},
Rollo in 'Rollo.pas' {RolloForm},
RolloDato in 'RolloDato.pas' {RolloDatoForm},
TrabajadorConsulta in 'TrabajadorConsulta.pas' {TrabajadorConsultaForm},
Pedido in 'Pedido.pas' {PedidoForm},
PedidoDato in 'PedidoDato.pas' {PedidoDatoForm},
Orden in 'Orden.pas' {OrdenForm},
OrdenDato in 'OrdenDato.pas' {OrdenDatoForm},
MaquinaConsulta in 'MaquinaConsulta.pas' {MaquinaConsultaForm},
PedidoConsulta in 'PedidoConsulta.pas' {PedidoConsultaForm},
LoteConsulta in 'LoteConsulta.pas' {LoteConsultaForm},
ControlCalidad in 'ControlCalidad.pas' {ControlCalidadDatoForm},
Guia in 'Guia.pas' {GuiaForm},
OrdenConsulta in 'OrdenConsulta.pas' {OrdenConsultaForm},
OrdenReporte in 'OrdenReporte.pas' {OrdenQuickReport: TQuickRep},
ProduccionConsulta in 'ProduccionConsulta.pas' {ProduccionConsultaForm},
ProduccionReporte in 'ProduccionReporte.pas' {ProduccionReport: TQuickRep},
GuiaReporte in 'GuiaReporte.pas' {GuiaReport: TQuickRep},
Proveedor in 'Proveedor.pas' {ProveedorForm},
ProveedorDato in 'ProveedorDato.pas' {ProveedorDatoForm},
CalidadReporte in 'CalidadReporte.pas' {CalidadReport: TQuickRep},
DocumentoPedido in 'DocumentoPedido.pas' {DocumentoPedidoForm},
KardexConsulta in 'KardexConsulta.pas' {KardexConsultaForm},
KardexDatoMasivo in 'KardexDatoMasivo.pas' {KardexDatoMasivoForm},
KardexReporte in 'KardexReporte.pas' {KardexReport: TQuickRep},
kardexHiloConsulta in 'kardexHiloConsulta.pas' {KardexHiloConsultaForm},
KardexReporteClasico in 'KardexReporteClasico.pas' {KardexClasicoReport: TQuickRep},
KardexReporteSaldos in 'KardexReporteSaldos.pas' {KardexSaldosReport: TQuickRep},
GuiaLoteConsulta in 'GuiaLoteConsulta.pas' {GuiaLoteConsultaForm},
ProduccionReporteResumen in 'ProduccionReporteResumen.pas' {ProduccionResumenReport: TQuickRep},
ProduccionReporteResumenPorMaquina in 'ProduccionReporteResumenPorMaquina.pas' {ProduccionResumenPorMaquinaQuickReport: TQuickRep},
ProduccionReporteResumenPorCliente in 'ProduccionReporteResumenPorCliente.pas' {ProduccionResumenPorClienteReport: TQuickRep},
Cuadre in 'Cuadre.pas' {CuadreForm},
CuadreReporte in 'CuadreReporte.pas' {CuadreReport: TQuickRep},
KardexSaldoHiloPlanta in 'KardexSaldoHiloPlanta.pas' {KardexSaldoHiloPlantaForm},
KardexSaldoHiloPlantaReporte in 'KardexSaldoHiloPlantaReporte.pas' {KardexSaldoHiloPlantaReport: TQuickRep},
KardexSaldoHiloPlantaResumenReporte in 'KardexSaldoHiloPlantaResumenReporte.pas' {KardexSaldoHiloPlantaResumenReport: TQuickRep},
Liquidacion in 'Liquidacion.pas' {LiquidiacionForm},
LiquidacionDato in 'LiquidacionDato.pas' {LiquidacionDatoForm},
LiquidacionDato2 in 'LiquidacionDato2.pas' {LiquidacionDato2Form},
KardexSaldoHiloPlantaPorOrden in 'KardexSaldoHiloPlantaPorOrden.pas' {KardexSaldoHiloPlantaPorOrdenReport: TQuickRep},
Galga in 'Galga.pas' {GalgaForm},
GalgaDato in 'GalgaDato.pas' {GalgaDatoForm},
GalgaConsulta in 'GalgaConsulta.pas' {GalgaConsultaForm},
Espere in 'Espere.pas' {EspereForm},
ProgramaDato in 'ProgramaDato.pas' {ProgramaDatoForm},
ConfigXls in 'ConfigXls.pas' {ConfigXlsForm},
GuiaListaReporte in 'GuiaListaReporte.pas' {ListadoQuickReport: TQuickRep},
TemporalesMantenimiento in 'TemporalesMantenimiento.pas' {TemporalesMantenimientoForm},
PartidaConsulta in 'PartidaConsulta.pas' {PartidaConsultaForm},
PartidaReporte in 'PartidaReporte.pas' {PartidaReport: TQuickRep},
ProgramaReporte in 'ProgramaReporte.pas' {ProgramaReport: TQuickRep},
Paquete in 'Paquete.pas' {PaqueteForm},
PaqueteDato in 'PaqueteDato.pas' {PaqueteDatoForm},
OPRDato in 'OPRDato.pas' {OPRDatoForm},
OPRReporte in 'OPRReporte.pas' {OPRReport: TQuickRep},
Login in 'Login.pas' {LoginForm},
PartidaBusca in 'PartidaBusca.pas' {PatidaBuscaForm},
FTecnica in 'FTecnica.pas' {FTecnicaForm},
FTecnicaDato in 'FTecnicaDato.pas' {FTecnicaDatoForm},
FTecnicaConsulta in 'FTecnicaConsulta.pas' {FTecnicaConsultaForm},
ProgramaDato2 in 'ProgramaDato2.pas' {ProgramaDato2Form},
ConfigXls2 in 'ConfigXls2.pas' {ConfigXls2Form},
Guia2Reporte in 'Guia2Reporte.pas' {Guia2Report: TQuickRep},
PaqueteDato2 in 'PaqueteDato2.pas' {PaqueteDato2Form},
ProduccionRectiConsulta in 'ProduccionRectiConsulta.pas' {ProduccionRectiConsultaForm},
KardexDato2 in 'KardexDato2.pas' {KardexDato2Form},
RectiProdDiariaReporte in 'RectiProdDiariaReporte.pas' {RectiProdDiariaReport: TQuickRep},
AvanceDato in 'AvanceDato.pas' {AvanceDatoForm},
RectiProdResPorMaquinaReporte in 'RectiProdResPorMaquinaReporte.pas' {RectiProdResPorMaquinaReport: TQuickRep},
RectiProdResSimple in 'RectiProdResSimple.pas' {RectiProdResSimpleReport: TQuickRep},
RectiProdResPorClienteReporte in 'RectiProdResPorClienteReporte.pas' {RectiProdResPorClienteReport: TQuickRep},
Opr in 'Opr.pas' {OprForm},
RectiProdDiaria2Reporte in 'RectiProdDiaria2Reporte.pas' {RectiProdDiaria2Report: TQuickRep},
PartidaConsulta2 in 'PartidaConsulta2.pas' {PartidaConsulta2Form},
PartidaReporteF1 in 'PartidaReporteF1.pas' {PartidaReportF1: TQuickRep},
PartidaReporteF2 in 'PartidaReporteF2.pas' {PartidaReportF2: TQuickRep},
PedidoOrden in 'PedidoOrden.pas' {PedidoOrdenForm},
PedidoDato2 in 'PedidoDato2.pas' {PedidoDato2Form},
DetallePedidoDato in 'DetallePedidoDato.pas' {DetallePedidoDatoForm},
GuiaConsulta in 'GuiaConsulta.pas' {GuiaConsultaForm},
PedidoFiltro in 'PedidoFiltro.pas' {PedidoFiltroForm},
OTDato in 'OTDato.pas' {OTDatoForm},
OT in 'OT.pas' {OTForm},
RolloOT in 'RolloOT.pas' {RolloOTForm},
RolloOTDato in 'RolloOTDato.pas' {RolloOTDatoForm},
OTReporte in 'OTReporte.pas' {OTReport: TQuickRep},
ProveedorConsulta in 'ProveedorConsulta.pas' {ProveedorConsultaForm},
OrdenReporte2 in 'OrdenReporte2.pas' {OrdenReport2: TQuickRep};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Sistema de Produccion ';
Application.CreateForm(TDM, DM);
Application.CreateForm(TPrincipalForm, PrincipalForm);
Application.CreateForm(TOrdenReport2, OrdenReport2);
Application.Run;
end.

dec
23-10-2006, 16:29:23
Hola,

Pues hombre, ahí se ven un montón de formularios y demás que no se crean desde un principio, lo cual es lo suyo, me parece. Claro que sí se crean ciertos formularios y "Data modules" al comenzar...

Yo me refería más bien al cierre de tu programa... yo no estoy muy puesto en estas cosas, pero, ¿es seguro que cuando se abre una conexión con la base de datos es cerrada cuando deja de usarse? ¿Todos los formularios que se crean en tiempo de ejecución son liberados convenientemente?

Es por ahí por donde creo que está el problema, claro que... no sé decirte una manera "óptima" de depurar el programa... más bien me parece que te costará cierto tiempo ponerte con ello y averiguar cuál puede ser la causa del problema.

A lo mejor algún compañero más versado que yo puede darte algunos pasos para tratar, concretamente, con este tipo de problemas. Comprendo que decir "tendrás que revisar que los recursos que ocupe tu programa sean liberados" es no decir mucho... me disculpo por ello, pero, no se me ocurre otra cosa ahora mismo. ;)

javicho_villa
23-10-2006, 16:57:06
Gracias de todas maneras voy a revisar bien el programa, la verdad q si tengo cuidado creo y destruyo objetos como formularios , etc, pero por alguna razon se esta quedando trabado, tambien me parece q es por que las 4 maquinas que siempre estan prendidas, son maquinas viejitas y estan con la corriente de la planta y esa corriente no es buena y no tienen estabilzidores y UPS.

bueno de todas formas muchas gracias.

@-Soft
23-10-2006, 20:02:51
hola


es muy importante que no se puedan ejectuar varias instancias simultaneamente utilizando tablas planas en especial PARADOX, ya que cada vez que una instancia de estas se queda colgada quiere decir que hay algun dataset abierto el cual refencia a una tabla que automaticamente activa los archivos .lck y .net los cuales crean los bloqueo, yo te recomiendo que utilices la libreria que te recomendaron (UIApp). con agregarla en tu carpeta de fuentes y agregarla en el proyecto.

Saludos

javicho_villa
23-10-2006, 22:53:11
Creo que por ahi esta la solucion:
existen varios usuarios que necesitan tener varias instancias abiertas para poder reliazar su trabajo.
pero quisiera saber mas de lo q has mencionado, si no fuera molestia un poquito de codigo seria genial.
Muchas gracias me ha dado algunas ideas.
saludos,

gica1815
24-10-2006, 08:52:10
en el idapi de paradox en el apartado system init existe el parametro "local share", no se como lo tienes puesto pero si en los clientes esta a false engancha muchos menos los lck, para los problemas nocturnos puedes ejecutar un programita que despues de cerrar las tares los borre

javicho_villa
25-10-2006, 17:50:12
me podrias indicar un pequeño codigo de como seria el programa, te lo agradeceria.

Saludos,