FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema al ejecutar aplicacion cliente servidor
Hola amigos del foro antes que nada comentarles q trabajo con delphi 7 y firebird 1.5 decirles q gracias al foro pude solucionar un problema que tenia respecto a un sistema cliente servidor donde tenia q registrar el nombre de la PC que hacia de servidor, entonces lo que hice es los siguiente en el evento on create del modulo de la aplicacion hago el siguiente codigo:
aqui es donde llamo a un archivo txt que tendra el dato de la PC servidora y si no lo tiene llamo a otro form donde registro el nombre de la PC servidora para que luego directamente me llame al archivo txt y la coneccion sea directa el codigo en el onclick del boton del form es el siguiente: coloco tambien el codigo de la funcion guardar Ahora bien una vez ejecutado el sistema todo bien el problema es cuando cierro la aplicacion me sale el sgte mensaje Exception EAccessViolation in Module P_SAM at 001816E4 Read of Address luego me marcha el siguiente codigo de la unidad Classes La verdad nose como solucionarlo porfavor quisiera q me puedan dar sugerencias de como poder arreglar el problema q tengo puesto q cuando ejecuto desde delphi se detiene la aplicacion y tengo que resetearla y cuando ejecuto directamente el sistema me sale muchos informes de errores Creo q es por la utilizacion de ttringlist como pudiera arreglarlo??? que es lo q estoy haciendo mal?? muchas gracias por toda la ayuda q me brinden amigos del foro |
#2
|
|||
|
|||
sugerencias
Hola amigos del foro primeramente Feliz Navidad para todos
Pasando al problema q tengo no se si lo plantee bien o es q tengo q cambiarlo de seccion Nuevamente les explico lo que quiero hacer: tengo una maquina q trabaja de servidora y cliente entonces esta maquina y las otras q se conecten cuando se ejecute el sistema quiero obtener el nombre de la Pc servidora q este guardada en un archivo txt y si es la primera vez q se registre el nombre de la pc servidora y luego se guarde ese dato en un archivo txt asi para q las siguiente vez q se ingrese tome el nombre de la pc servidora del archivo txt Para eso el codigo q mostre lo hice en el evento oncreate del modulo donde estan mis componentes tmercurytools ¿Cual seria otra opcion para lograr lo q les mencione? ¿Donde estoy cometiendo el error? Espero porfavor que me colaboren o es que el hilo tendria q cambiarlo a otra seccion Muchas gracias por todas las respuestas q puedan brindarme |
#3
|
||||
|
||||
Quizás el problema es que desde otra Pc clente (distinta al servidor) no se puede acceder al archivo de texto, para ello debería estar compartida la carpeta donde está el archivo txt.
Quizás el error se produzca en otro sitio, por lo que dices de la unidad Classes, el error tiene toda la pinta de querer destruir un objeto 2 veces. Revisa en tu código si liberas objetos (Forms sobre todo) y cómo lo haces. Por regla general usa FreeAndNil cuando liberes un Form. Por otra parte creo que te has complicado la vida creando el fichero de texto un TIniFile (busca en el foro) sería mucho más fácil de manipular. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
|||
|
|||
Muchas gracias por responder
Como siempre gracias al foro pude utilizar los Tinifiles y todo bien pero ahora me sigue saliendo el error donde al ultimo me marca en :
este codigo esta dentro de la unidad Clases Ahora bien el codigo q hice es el siguiente tengo un modulo en el cual estan mis componentes mdobd,mdotransaction entonces en el evento on create del modulo tengo el siguiente codigo: ahora bien si el archivo no existe entonces se llama a otro formulario donde se registrara el nombre de la PC servidora entonces en el eventro onclick del boton del formulario f_conectar tengo el siguiente codigo:
donde es que cometo el error ??? o en que evento tendria q estar el codigo?? la verdad no me ubico en que evento tendria q destruir un objeto?? como siempre espero que me puedan brindar toda la ayuda posible indicarles q mas antes que haga este codigo todo iva bien Muchas gracias por toda la ayuda q puedan brindarme |
#5
|
||||
|
||||
¿cual es la filosofía que usas en creación de ventanas?
Normalmente se pueden crear con : - Application.Createform(TForm1, form1); - Form1 := TForm1.Create( ) el parámetro que lleva dentro de los paréntesis puede variar y quizás por ahí venga el problema. De hecho ese parámetro es el FOwner que te marca en el depurador. Quizás tengas suerte. cuando te marca ese error, mira la pila "Stack" con el depurador, ojalá venga algo que te suene (por ejemplo una ventana de clientes, un informe de Quickreport... no sé, algo de tu programa). Si todas las ventanas las creas de la misma forma, explica como lo haces y como se destruyen después. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
|||
|
|||
consultando nuevamente
Muchas gracias por responder Lepe y te muestro como esta la unidad principal del proyecto (disculpas por copiar todo el codigo de la unidad principal):
estaba utillizando un splahscreem pero por la ayuda q me brindaste lo puse como comentario y luego de eso al salir de la aplicacion me marca lo siguiente dentro de la unidad OleCtrls: por la ayuda q me brindaste puedo decir q el problema se causo por el splashcreen pero ahora como puedo solucionarlo ??? Nuevamente muchas gracias Lepe y amigos del foro por la ayuda q me brinden |
#7
|
||||
|
||||
En principio no es buena idea crear todas las ventanas desde el principio de la aplicación, es una sobrecarga innecesaria. Lo óptimo es crear dinámicamente las ventanas que vas abriendo y cuando se cierre, que se libere la memoria. Así aligeramos la carga de la aplicación y además no supone "esperas" cuando se crea una ventana determinada, (no tarda tanto como se suele suponer).
Pasando un poco de ese tema, vamos al grano. No se trata de esa ventana, sino de la filosofía que usas: En la primera línea estas diciendo que el objeto "Application" es el encargado de destruir la ventana Splash, sin embargo, en la última línea, te encargas tú de liberarla, por tanto, cuando la aplicación se cierre al completo, irá a destruir un objeto que ya fue liberado con el error que te da. Hay varias formas para solventar esto, te comento ambas porque te será necesario. Lo que no me gusta, pero funciona sin problemas: Aqui decimos que el objeto Application será el encargado de destruir el Splash, pero nosotros (que necesitamos liberarlo antes de que se cierre la aplicación), lo liberamos con FreeAndNil (mira la ayuda). De esta forma, cuando el objeto Application vaya a destruir a Splash, se "da cuenta" de que ya ha sido liberada y no hace nada (no provoca el error de antes). Lo que si me gusta y uso a menudo (me gusta tener el control de todo ):
Ahora en la primera línea le decimos a Delphi que nadie (nil) se encargará de destruir la ventana, porque yo mismo me encargo de ello. Además uso FreeAnNil como respaldo, es decir, si necesito mostrar el splashScreen en un momento dado, puedo preguntar si ha sido creado o no:
Tendrás que mirar estos detalles, por si liberas alguna forma / informe de quickreports / etc antes que el objeto Application. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#8
|
|||
|
|||
consultando nuevamente
Muchas gracias por la respuesta Lepe especialmente por tus sugerencias pero te comento que el codigo que puse estaba en el proyecto de la aplicacion, luego que para no tener problemas con el Splashscrenn lo puse como comentario para asi no me muestre y confirme si el causante del error es la creacion del Splashcreen y te comento q me sigue dando el error
Como puedo saber donde estoy cometiendo el error??pues me sigue marcando el error: Porfavor quisiera q me den una ayuda o sugerencia para poder encontrar el error pues cuando lo llevo a otras maquinas cuando cierro la aplicacion me sale un error de envio de error Y muchas gracias por el comentario que lo tendre muy encuenta Para que la aplicacion no sea pesada la creacion dinamica de forms como tendria q hacerla un pequeño ejemplo podria ser??? disculpa por lo novato de lo pregunto pero comentarles q recien me estoy iniciando en desarrollar aplicaciones |
#9
|
||||
|
||||
El error no está en el código, el error es de concepto. Lo dije para el SplashScreen, pero es aplicable a todas las ventanas / objetos que usas en tu aplicación.
Para la creación dinámica, puedes usar este hilo, como otros tantos que hay en el foro. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#10
|
|||
|
|||
gracias por responder
Muchas gracias por el comentario Lepe q lo tomare en cuenta de ahora en adelante, pero que truco o como puedo hacer para q ya no me salga ese error debido a q son muchas las formas y lo unico q faltaba a la aplicacion era lo de seleccionar el Servidor de base de datos.
El cambiar de concepto y las razones las comprendi pero lo quieren ya nomas y como lo puedo arreglar Muchas gracias por las sugerencias y ayuda q me brinden |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
aplicación cliente servidor? | Giniromero | Conexión con bases de datos | 12 | 25-10-2006 04:39:18 |
Aplicacion Cliente-Servidor | D-MO | Varios | 2 | 01-09-2005 00:37:42 |
Aplicación Cliente Servidor | NickName | Internet | 3 | 23-07-2004 15:07:22 |
Aplicacion cliente servidor | aguilot_21 | Internet | 3 | 26-12-2003 02:07:55 |
Aplicacion Cliente - Servidor | GIVO | Conexión con bases de datos | 0 | 30-07-2003 23:33:14 |
|