PDA

Ver la Versión Completa : Refresh d tb n red con Timer. Si ay cualkier xcepcion se repit el message sin parar


images
25-08-2004, 10:24:50
Hola, soy nuevo. Saludos a todo el Club Delphi :)

Llevo unos dias buscando informacion aqui en el club acerca del problema q voy a contar y otros que he resuelto. Pero no consigo resolver este:

Acabo de empezar en esto de PARADOX EN RED y he seguido el articulo q hay aqui en el foro y otros hilos y me ha ido genial. Pero me ocurre lo siguiente:

Para actualizar la red utilizo un timer. He leido aqui otro sistema el cual dice q es mejor por que consume menos CPU q el timer pero de momento me apaño con el timer, no me da problemas. Ademas otro sistema explica q es para delphi 3 y yo tengo 6 y me daria problemas con el tipo iClientData.

Bueno, el problema lo tengo en que cuando hago cualquier operacion de insert o edit, las pongo en un TRY EXCEPT. No se mucho de excepciones (mas bien nada) pero lo unico que hago es si hay excepcion muestro una ventana donde muestro un texto que dice "NO HA SIDO POSIBLE COMPLETAR LA OPERACION, POSIBLEMENTE EL REGISTRO ESTA SIENDO UTILIZADO POR OTRO USUARIO. INTENTOLO OTRA VEZ". Ya se que es cutre pero hasta que no sepa mas de excepciones no se q mas se puede hacer.

Entonces llega el problema cuando ocurre alguna excepcion: sale mi ventanita, la cierras y..........DESASTRE!! sale un message "key violation" uno detras de otro sin parar. Supongo que es el timer de refresco que esta configurado a 1 segundo. Y asi se queda la aplicacion, no puedo hace nada, solo ver como se va llenando la pantalla de message y esperar tal vez a que el sistema se sobrecarge o Ctrl+Alt+Supr, pero no creo q esto le haga gracia a mi cliente.

Tal vez exista otra manera de Actualizar tablas en Delphi 6 Paradox. Aunque creo q todo pasa por usar un timer, por que el otro sistema q se explica aqui en el foro al final tambien hace uso de un timer y supongo q me pasaria igual.

Todo lo demas lo tengo configurado correctamente y va bien, gracias al articulo de PARADOX EN RED, por que no tenia ni pajolera idea.

Otro cosa q me complica es que el progama lo desarrollo en un solo PC con Windows XP y los ejecutables y demas van a ir a parar a dos PC en red con Windows 98

Por favor, ¿podeis ayudarme?, Gracias :)

marto
25-08-2004, 10:41:07
Wop!

Bueno, antes de nada darte la bienbenida al club, ¡esperamos verte a menudo por aquí!

Bien, sobre tu problema, a mi me huele a que en el timer, de manera directa o indirecta estás probocando un post sobre la tabla que produce el error. ¿Por qué no nos pegas el código que tienes en el evento del timer? (recuerda usar la etiqueta [delphi] ;))

images
25-08-2004, 11:36:22
Gracias por responder :)

En el timer no tengo otra cosa mas que refresh a una tabla detras de otra.


Tabla1.Refresh
Tabla2.Refresh


etc.... hasta un total de 20 tablas.

Otra cosa q no me funciona (en mi PC, solo sin red y XP) es lo de los paths con UNC \\NombreEquipo\Datos.....

buff!! se me esta haciendo muy cuesta arriba esto de trabajar en red. Solo llevo en ello un par de semanas, ya, pero....

De nuevo, muchas gracias. Espero q podais seguir ayudandome en esto

...y bueno, espero tambien poder ayudaros yo en algo ;)

Saludos! :)

marto
25-08-2004, 11:49:30
Wop!


En el timer no tengo otra cosa mas que refresh a una tabla detras de otra.


Es lo que me imaginaba ;) El refresh provoca un Post en la tabla si esta está en edición. Si cuando tú hacias el post a mano se producía un error (como un key violation) éste se te reproducirá al hacer el Refresh.

A parte de eso, veo un error conceptual en tu estrategia: ¿Crees que es buena idea refrescar una tabla si esta está siendo editada por el usuario? Yo creo que no.

En mi [humilde]opinión creo que deberías comprobar que las tablas no se estén editando antes de hacer el Refresh en el Timer, algo así:

if Table1.Active and not (Table1.State in [dsEdit, dsInsert]) then
Table1.Refresh;


De esta manera, creo que solucionarías los dos problemas ;)

images
25-08-2004, 12:08:46
Muchiiiiiiiiiiiiisimas gracias :) :) :) :)

Funciona perfectamente!!!

Pero todavia hay otra cosa, y que me tiene ya desquiciado. Y es que cada vez que tengo una excepcion debo cerrar delphi y volver a abrir por el dicho so "directory is busy".

He encontrado sobre el tema aqui en el foro. He probado borrando a mano los archivos .NET y .LCK pero nada de nada. Solo esta mañana he tenido q cerrar y abrir otra vez el Delphi 40.000 veces.

Tambien he ledio aqui q conviene q el directorio de trabajo del Database DeskTop y el de la aplicacion sean distinto. ¿no sera al reves? Porque al tener abierta mi aplicacion (sola o en delphi) y abrir el Database Desktop, al abrir este, me daba el error de que la tabla esta "busy" tambien. Pues bien, le puesto al BDE, en Drivers-Native-Paradox el mismo directorio NET q mi aplicacion y se ha resuelto. Puedo tener dos instancias de mi aplicacion y el DBD todo abierto sin problemas y actualizado :)

¿Se puede hacer lo mismo con el IDE de Delphi?

images
25-08-2004, 12:11:25
Ah! se me olvidaba

Lo que comento en el primer mensaje:
Lo de los path UNC \\ ¿por que no me funciona?

Lo pongo asi:

\\NombreEquipo\CarpetaPrograma\Servidor

marto
25-08-2004, 12:18:42
Lo de los path UNC \\ ¿por que no me funciona?

Lo pongo asi:

\\NombreEquipo\CarpetaPrograma\Servidor
Pues no lo sé :confused: yo trabajo siempre con unidades de red capturadas sin problemas ;)

images
25-08-2004, 12:31:38
je je, esto parece casi un chat. De nuevo mil gracias por responderme y tan pronto ;)

Aqui sigo explorando el Club, porque hay tela y mucho q aprender ( y espero colaborar en ello)

Esto es mejor q el tocho de libro q me acabo de comprar de Francisco Charte "Delphi 6 y Kylix"

Saludos !!! :)

marto
25-08-2004, 12:41:24
Esto es mejor q el tocho de libro q me acabo de comprar de Francisco Charte "Delphi 6 y Kylix"


Yo no estaría tan seguro de eso!!!!!! Tengo muy buenas referencias de ese libro, aunque no lo he leido.

Si estas empezando, tambien te recomiendo que te leas "La Cara Oculta de Delphi 4", te lo puedes descargar gratis en pdf de www.marteens.com Aunque sea de la versión 4, los conceptos son totalmente aplicables a la 6, especialmente si trabajas con Paradox (más propio de aquellos tiempos :D)

images
25-08-2004, 13:27:36
Cuanto te agradezco tu ayuda Marto, sinceramente.

La verdad es que lo de hacer el Refresh sin comprobar si esta en edit o insert era una chapuza. Algo tan vital y tan sencillo y no se me ocurrio. A veces lo mas sencillo no lo ves o se te escapa. Tambien es verdad que hace 4 dias q estoy en esto.

Creo que me va a gustar formar parte de este Club :)

Ah, lo del Libro de Charte, ha sido una reaccion al ver como mola y lo que hay en este Club.

Tambien me he descargado la Cara Oculta De Delphi 4. Lo voy a imprimir. ¿estoy loco?!!!! son mas de 900 paginas. Pues no se si estoy loco pero ahora mismo voy a por un par de paquetes de 500 folios y un par de cartuchos de tinta negra.

Saludos !