Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Paradox en Red

Hola a todos.

Antes de nada, os pido disculpas por volver sobre un tema tan tratado en estos foros.

He estado leyendo muchas y buenas soluciones en los foros. Pero cada caso es particular, y no me dan luz sobre mi problema. Aparte de exigirme importantes cambios en la aplicación ya definida.

Intentaré ser breve:
Disculpad si digo alguna obviedad o barbaridad, pero soy muy novato en esto de las bases de datos.

Tengo un programa con dos bases de datos Maestro/Detalle, originalmente pensado para correr en monopuesto.
La implementación de las bases es manual, con lo que quiero decir que no he utilizado el DataModule.
Tengo dos TTable, dos TDataSource y un TDataBase, no utilizo alias, sino el propio directorio dondo están ubicadas.
Utilizo el siguiente código para abrirlas:

Código Delphi [-]
try
Fclien.database1.Session.NetFileDir:=DirActual;
FClien.ClienDB.DatabaseName:=DirActual;
FClien.ActosDB.DatabaseName:=DirActual;
FClien.ClienDB.Open;
FClien.ActosDB.Open;
except
begin
Application.MessageBox('Error en alguna Base de Datos. Utilice la opción "Reindexar Bases de Datos" del Menú Contextual, '+
                            '( Pulse el botón derecho del ratón en la pantalla principal del programa. )'+#13+
                            'Si ésto no resuelve el problema, póngase en contaco con el Servicio Técnico del programa.',
                            'Mensaje de Error',mb_OK + mb_IconError);
Exit;
end;
end; //try


Ahora necesito correrlo en Red.
No desearía tener que implantar una copia del programa en cada PC, dado que, aparte de las tablas, el programa usa distintos archivos que deben ser comunes a todos los usuarios y que deben estar accesibles en un mismo PC.

Lo he probado en una red local, llamando al programa desde otro PC de la misma red.
Aparentemente se abren los dos programas y funcionan independientemente, pero hay un problema de actualización de datos. Este problema consiste en que las modificaciones que realizo en un PC no aparecen en el otro, a pesar de que tengo puesto en el evento AfterPost:

Código Delphi [-]
ClienDB.FlushBuffers;
ActosDB.FlushBuffers;


He observado que cuando salgo del programa y vuelvo a entrar, los cambios sí están ahí. Llegando a la conclusión de que cuando cierro y abro las bases tengo acceso a las modificaciones realizadas.

Por lo tanto, he incluído en el formulario una bótón para realizar esta labor: cierrra las bases y las vuelve a abrir y así actualizo los datos.

Como entiendo que esto es una auténtica "chapuza", apelo a vuestra buena fe, y vuestros conocimientos, para que me iluminéis con una solución más elegante y práctica. Con los mínimos cambios posibles en el código, pues lo tengo muy repartido en varios formularios.

Anticipadamente os agradezco vuestro tiempo y vuestro esfuerzo.

Última edición por Casimiro Notevi fecha: 12-02-2012 a las 20:54:34.
Responder Con Cita
  #2  
Antiguo 12-02-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Siento que el código no haya salido enmarcado, pero en la vista previa salía bien.
Responder Con Cita
  #3  
Antiguo 12-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jhonalone Ver Mensaje
Siento que el código no haya salido enmarcado, pero en la vista previa salía bien.
Algunas veces ocurre si se se da 'vista previa' antes de enviar.
Si se envía primero entonces queda bien, luego ya se puede corregir, no hay problema.
Responder Con Cita
  #4  
Antiguo 12-02-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El problema viene dado porque tienes abierta una instancia de la tabla en otro Pc y hasta que la cierres y la abras o hagas un Refresh de la tabla no leerá los cambios que se han producido.

Lo lógico sería proceder al revés, tener la tabla o tablas cerradas y cuando abrás el formulario abrir las tablas que por otra parte sería mejor alojarlas en un DataModule y así tenerlas centralizadas.

Aún así si tienes una rejilla abierta con los datos no verá los cambios hasta que salgas del formulario y vuelvas a entrar, para estos casos se suele poner un timer y pasado un x tiempo lanzar un refresh sobre la tabla sin tener que cerrar el formulario para estos menesteres.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 13-02-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias Marcos.
Creo que me has dado una magnífica solución.
Lo del timer no creo que lo haga, lo tengo que pensar mejor, pues tendría que actualizar tambien la rejilla para que fuera efectivo y podría interferir algún cambio que esté haciendo un usuario.
Creo que es mejor tener controlado cuándo se refresca, por ejemplo antes de leer un registro y antes de hacer un Post. También tengo que revisar el control de concurrencia... Veré cómo lo hago.
¿Que te parece?
Voy a probarlo y te cuento.
Un Saludo.
Responder Con Cita
  #6  
Antiguo 13-02-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Ahora me está surgiendo una duda...

¿Por qué tengo que refrescar explícitamente, si tengo la propiedad ClienDB.AutoRefresh=True?

Gracias.
Responder Con Cita
  #7  
Antiguo 13-02-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Bueno.

Llevo toda la tarde haciendo pruebas y os comento los resultados.

1.- Refrescar las bases no sirve de nada.
2.- Cerrar y abrir las bases actualiza los datos.
3.- Una vez me ha dado el error de Index out o date al iniciar el programa, y estoy intentando averiguar por qué.
4.- He leido por ahí que el archivo PDOXUSRS,NET no conviene que esté en el mismo directorio de las bases y voy a intentar cambiarlo a ver si se resuelve.
5.- ¡Estoy hasta el gorro del BDE!, pero no puedo hacer otra cosa, pues no conozco otro sistema de bases de datos y me da miedo meterme a estudiarlo, por el tiempo que me puede hacer perder.

Perdonar mi pesadez, acepto sugerencias.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Paradox En Red Y Bde NEOALEX00016 Conexión con bases de datos 15 28-03-2007 02:42:01
paradox en red Fabricio Conexión con bases de datos 4 17-03-2007 17:27:28
Paradox en Red Mariana Conexión con bases de datos 7 03-12-2004 20:03:45
SQL y Paradox Sick boy Tablas planas 4 22-10-2003 21:50:37
Paradox e Interbase, como hago para transportar todo lo de paradox a Interbase Fatima Gonzalez Firebird e Interbase 2 05-05-2003 18:02:30


La franja horaria es GMT +2. Ahora son las 20:28:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi