Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
acceso al unisono en access

Hola y buenos días,

tengo algún problemilla con un programa cliente servidor que estoy desarrollando creo que el problema realmente lo tengo con la bbdd, uso access y la pregunta es ¿que sucedería en el acaso de que dos o mas clientes intentasen acceder a la misma tabla para insertar un dato al mismo tiempo?.

Opción 1: No pasa nada y access es capaz de guardar los datos de todos los clientes que se conecten sin problemas.
Opción 2: Access solo permite que uno y solo uno pueda insertar los datos.

El caso es que la aplicación al principio ni por asomo contemplaba el tener cliente pero las cosas se han truncado y ahora si se exige y lo que me temo es que access no cumpla como bbdd para trabajar como multihilo.

Espero sus comentarios y sugerencias gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 04-09-2015
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Si estas actualizando una tabla no te dará error pero se quedarán guardados los cambios que hizo el último que pulso aceptar.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #3  
Antiguo 04-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Gracias ElDioni por tu comentario;

El caso como comente antes es que esto desarrollando una aplicación la cual tiene clientes android y las comunicaciones las hago mediante IdTCPClient1.IOHandler pero lo curioso del asunto es cuando y por casualidad, dos clientes conectan al mismo tiempo al servidor en alguno de los clientes aparece el mensaje "Connection Closed Gracefully".

Las pruebas las hago con dos móviles, intento provocar que pasaría cuando los clientes coincidan mas de uno a la vez. En las pruebas la mayor parte de ellas no suele pasar nada, es mas si miro en los registros de la tabla los dos se han guardado correctamente coincidiendo además en hora, min y seg

Estado leyendo que los componentes en los INDY el servidor crea un hilo automáticamente por cada cliente que se conecta lo que me hace pensar que el problema no este en la comunicación entre los clientes y el servidor por no poder manejar éste a los clientes si no quizás en la bbdd que uso que quizás este "ralentizando" las comunicaciones y por ello pienso que access no permita o es capaz de auto gestionar la inserción de varias peticiones a la vez.

El tema me tiene frito por que como comento de 50 pruebas no "falla" ni una pero otras de 50 me ha "fallado" 3 y mi intención que no suceda nunca.
Responder Con Cita
  #4  
Antiguo 08-09-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No comentas cómo estás accediendo (componentes).
Si estás utilizando ADO, puedes usar transacciones sin problemas para solvantar problemas de concurrencia.

Tengo aplicaciones con Access y trabajando con 5 puestos que funcionan perfectamente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 08-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Gracias por comentar Neftali;

Como componente uso ADO y en cuanto a clientes llegare a tener 20 pero claro si ya con dos a veces coinciden con mas ....
En cuanto a la configuración del ADOConnection uso la normal es decir por ejemplo:

Código Delphi [-]
CursorLocation := clUseClient 
ConnectOption := coConnectUnspecified

En lo referente a las conexiones uso INDY IdTCPServer y el IdTCPCLient.

El problema podría solucionarlo de cara a la galería haciendo que el cliente cuando es rechazado volviese a intentarlo varias veces pero me gustaría averiguar el porque no esta funcionando como debiera si es que Access es capaz de trabajar con concurrencia.
Responder Con Cita
  #6  
Antiguo 08-09-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Perdona, pero me he perdido.
Estábamos hablando de aplicaciones Windows que acceden a una Base de Datos Access utilizando ADO.
Te iba a preguntar en qué momento y qué error te daba al acceder más de un cliente...

Y ahora veo tu otro mensaje (fallo mio no haberlo leído antes) y la respuesta, donde hablas de TCP/IP y móviles que corren Android.
?¿?¿?¿?

Me he perdido. ¿Qué tiene que ver eso con lo que hablábamos?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 08-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Perdona por no explicarme bien, suelo tener ese problema;

Haciendo historia...
Tenia creada una aplicaron la cual inserta registros localmente sin problemas, recientemente se pidió que los datos se introdujesen además desde otros puestos de trabajo, ok comparto la bd que es access y no hay problema.
Posteriormente se decidió que poner varios pc's no era óptimo y se pensó en la idea de utilizar clientes móviles aprovechando que la aplicaron para pc se utilizo con Firemonkey por lo que compilando para android estará listo.

¿Como funciona el tema de la inserción de datos remotos? sencillo, añado un componente IdTCPServer al programa original, digamos el "servidor" y a los clientes el componente IdTCPCLient por lo que cuando un cliente envía un dato este llega al "servidor", este comprueba que todo es correcto y de ser así usando componentes ADO guarda en access el dato posteriormente el "servidor" de vuelve al cliente el mensaje de que todo fue ok o no ok.

Pues bien aveces cuando, por probar la aplicaron con dos clientes android, envío un dato a la cuenta de tres "1...2...3... click! " aveces me de volvía el mensaje "Connection Closed Gracefully" el cual sustituí por "Por favor vuelva a intentarlo de nuevo".
Por eso mi duda es si access es capar de soportar varias operaciones de insertado sobre la misma tabla. Cada nuevo registro que se introduce en la tabla lleva un numero de id diferente el cual consigo, mediante consulta averiguar cual fue el ultimo numero id guardado y a este le sumo uno.

Tengo que decir que no tengo problemas de que los datos se guarden mal o se corrompan, me da la impresion que es un problema de velocidad, mientras no finalice la operación de guarda mantendrá la tabla bloqueada.

Muchas gracias por intentar ayudarme, agradezco toda sugerencia.
Responder Con Cita
  #8  
Antiguo 09-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Se me ocurre una idea;
en tu web Neftali veo que tienes el ejemplos de como utilizar ADO con Threads, ¿y si a cada cliente que conecta lo mando mediante un hilo a insertar el dato en access?

Última edición por barakuda fecha: 09-09-2015 a las 06:31:19.
Responder Con Cita
  #9  
Antiguo 09-09-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por barakuda Ver Mensaje
Pues bien aveces cuando, por probar la aplicaron con dos clientes android, envío un dato a la cuenta de tres "1...2...3... click! " aveces me de volvía el mensaje "Connection Closed Gracefully" el cual sustituí por "Por favor vuelva a intentarlo de nuevo".
Por eso mi duda es si access es capar de soportar varias operaciones de insertado sobre la misma tabla. Cada nuevo registro que se introduce en la tabla lleva un numero de id diferente el cual consigo, mediante consulta averiguar cual fue el ultimo numero id guardado y a este le sumo uno.
Hola.
Creo que el problema está en un sitio diferente a donde estás mirando.
Tienes 2 pasos:
1) La conexión por TCP/IP desde el móvil al ordenador remoto.
2) Desde el ordenador remoto insertar en la BD.

El error que estás comentando creo que se refiere a problemas en la conexión por TCP/IP, no tiene nada que ver con ADO.

¿Porqué para la conexión desde los dispositivos móviles, no utilizas DataSnap o un webservice?

Échale un vistazo a este video o a esta serie de artículos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 09-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Nas ...

Problema por la conexión lo descarto ya que en la oficina estoy a escasos 4m del router, además también echo pruebas en casa, si ya se soy masoca pero me mola XD, y también me a pasado por lo cual no lo creo.

Las opciones de atacar directamente a la bd ya las contemple y de echo creo que seria la mejor opción, el problema es que el programa tiene también una parte que sirve de monitorizado y de ajuste.

Dicha parte ofrece la posibilidad de ver al momento en una Stringtable los datos que se recibe del cliente es decir una vez se ha guardado el dato en la bd también el programa añade un nuevo registro a la Stringtable.
El usuario desde la Stringtable puede alterar el orden en el que se procesaran los datos, subiendo o bajando filas de la Stringtable, una vez el usuario satisfecho con los cambios puede guardar los datos en la bd.
Se puede pensar que, "si el problema esta en que la Stringtable no se refresca con el nuevo dato, pues que cada x tiempo la tabla se auto refresque", eso seria coherente pero al refrescar la tabla cualquier modificación echa por el usuario en la alteración de los registros se perdería por lo cual no me sirve.

Es por eso básicamente que el flujo del dato lo canalizo a través del programa.
Responder Con Cita
  #11  
Antiguo 09-09-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Lo que está claro es que este error, "Connection Closed Gracefully" puedes buscarlo por internet y verás que está asociado a INDY (que es lo que usas para la conexión) y no a ADO ni conexión con Base de Datos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 09-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Si eso es cierto, ya leí que el mismo error dependiendo si es cliente o servidor, puede ser una excepcion o un error, en mi caso al ser en el cliente según cuentan en la web de INDY
Cita:
When is it an error?
When EIdConnClosedGracefully is raised in a client, it is an error and you should trap and handle this exception.
El caso es averiguar el ¿porque? , internet esta lleno de preguntas sobre lo mismo ¿porque sale ese mensaje? pero la respuesta no suele ser suficientemente concreta para poder llegar a una solución, encuentras soluciones para capturar el mensaje de echo en este mismo foro se muestra la manera de como hacerlo.

Sigo peleándome a ver si consigo ganar algún asalto
Responder Con Cita
  #13  
Antiguo 10-09-2015
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Buenas, de nuevo!

aveces uno sigue una dinámica que se convierte en cinética la cual sin pensarlo te atrapa ... en fin pues que tengo la "mala costumbre" que para probar los programas simplemente compilo pero no en modo debugging (F9), hoy me a dado por hacerlo he obtenido dos bonitas capturar de error:





Cita:
Según en la web de embarcadero:

EDatabaseError is raised when a component detects a database error. Use EDatabaseError in an exception handling block or to create a database exception.
EDatabaseError se plantea cuando un componente detecta un error de base de datos. Utilice EDatabaseError en un bloque de manejo de excepciones o para crear una excepción de base de datos.
Cada vez lo tengo mas claro en hacer un reenvío mediante intentos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Problema de acceso a base de datos Access Ulnaju Tablas planas 6 15-08-2007 02:53:13
acceso a tablas access con bde joanajj Conexión con bases de datos 2 03-07-2006 23:08:34
duda de como bajarse un archivo y leerlo al unisono jacofl Internet 0 09-09-2005 16:34:04
Acceso a una bd de access Anibalcast Conexión con bases de datos 3 12-05-2005 03:56:48
Problemas acceso a BD de Access coquycu Conexión con bases de datos 2 10-04-2005 14:51:43


La franja horaria es GMT +2. Ahora son las 17:05:58.


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