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-11-2012
Sapiem Sapiem is offline
Miembro
 
Registrado: abr 2007
Posts: 24
Poder: 0
Sapiem Va por buen camino
Necesidad de ayuda para proteger registros SQLite

Saludos:

Trabajo con SQLite3 y de verdad que me he quedado sorprendido con lo "lite" y buena que es esa estructura de base de datos.

Ahora bien, he recibido varios pedidos de que es necesario proteger algunos records mientras que se está trabajando, principalmente en red, para evitar que se modifiquen o eliminen los mismos sin saber un cliente que el otro lo está haciendo.

En ese sentido me han propuesto variantes, y es por eso que desearía saber si alguien tiene una propuesta o código de ejemplo que sea simple y pueda ajustar a mi necesidad. Necesito que cuando la base de datos se cargue por dos clientes en red, me proteja un registro mientras que cliente1 me lo esté actualizando y cliente2 solo puede ver lo que tiene ese registro, pero no modificarlo ni mucho menos eliminarlo, hasta que cliente1 termine de actuar sobre él.

Sería fácil con un campo adicional, pero tenemos que tener en cuenta las fallas eléctricas, etc, que me puedan dejar permanente la marca de "lock" y realmente no lo es.

Les agradecería una ayuda con el tema antes de probar mi suerte por inventos propios.

Gracias
Responder Con Cita
  #2  
Antiguo 13-11-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
SQLite no está pensado para trabajos multiusuario. Es una base de datos cuyo funcionamiento se fundamenta en tener todas la bondades de SQL pero en una sola pc sin ser un servidor de datos. Es decir, un SQL monousuario. Por eso no soporta muchas funciones que no son necesarias en ese entorno, pero si proporciona la versatilidad de poder hacer consultas rapidísimas y utilizando el viejo y conocido SQL. SQLite se usa principalmente en desarrollos donde sabes que solo un usuario tendra acceso a los datos a la vez ya que incluso funciona desde CD-ROMS y memorias USB sin tener que instalar nada.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 14-11-2012
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Question

Cita:
Empezado por Sapiem Ver Mensaje

cuando la base de datos se cargue por dos clientes en red,

eso es imposible. es una base de datos embebida o incrustada dentro del proceso del ejecutable.
es decir solo 1 aplicacion pueda hacer uso de la base de datos. a la vez no hay acceso concurrente. como con las
demas bases de datos.

usa firebird en su version no embeded
o cualquier otro mysql, postgresql
Responder Con Cita
  #4  
Antiguo 14-11-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Yo recomiendo como JXJ que te olvides de SQLite puesto que no te sirve para lo que seguramente estás trabajando. Ve por Firebird o bien MySQL, pero en ambos casos tendras por fuerza que instalar un servidor, aunque sin problemas puedes instalar uno en la misma pc con la que trabajas.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 15-11-2012
Sapiem Sapiem is offline
Miembro
 
Registrado: abr 2007
Posts: 24
Poder: 0
Sapiem Va por buen camino
Sobre proteger

Gracias por las respuestas. me sorprende que algunos dicen "imposible" y siento decir que está equivocado. Mi sistema trabaja en red, cargando la base de datos por red desde una carpeta central compartida. Cinco aplicaciones utilizan la misma base de datos al mismo tiempo, sin dificultad. Ya logré proteger los registros, no dentro de la base de datos, pero si a través de código donde cada aplicación sabrá que registro está bloqueado por cualquier otra instancia de la misma ya sea en la propia red o local.

Mi pregunta era por si existía la posibilidad de crear por ejemplo tablas temporales globales dentro de la base de datos, pues cuando antes intentaba usar esa variante de código, es decir, una instancia del sistema accedía a un registro, creaba una tabla temporal dentro de la base de datos de forma tal que si otra instancia trataba de hacer lo mismo no podía porque ya la tabla estaba creada y por lo tanto significaba que estaba en uso. Quise hacerlo con tablas temporales con toda la intención de que si terminaba de usar el registro, fallaba el sistema por corriente por ejemplo, las tablas temporales desaparecen automáticamente ("drop") y eso no me obligaba a vigilar que tiempo de bloqueo tenía alguna instancia sobre el registro.

Que hice:

Cuando comienzo a usar un registro, creo un file en el directorio de la base de datos y lo mantengo abierto hasta que termine la modificación del registro.
Cualquier otra instancia que quiera modificar el mismo registro, tratará de crear también el mismo archivo y le dará error porque ya existe y está siendo utilizado por otra instancia.
Si la instancia primaria termina de usar el registro, pues entonces cierra el archivo creado y lo elimina, dando así posibilidad a otras instancias de hacer lo mismo.
Si la instancia primaria falla por algún motivo (eléctrico por ejemplo), pues el archivo permanece creado como es lógico, pero ya "nadie" lo tiene abierto como tal, por lo que cualquier otra instancia tratará de crearlo y lo sobreescribirá sin generar error.

Está probado y funciona 100% sin problemas.

Saludos

Muchas gracias.
Responder Con Cita
  #6  
Antiguo 15-11-2012
Sapiem Sapiem is offline
Miembro
 
Registrado: abr 2007
Posts: 24
Poder: 0
Sapiem Va por buen camino
Adicional

Ya una vez me dijeron que por qué no usaba un sistema de cliente/servidor. Es verdad, pero para tener un cliente/servidor, no hay que tener acceso igual a una red? Pues entonces para mi sistema es mejor permanecer portable, con una base SQLite3 que se pueda cargar desde cualquier carpeta en red compartida y no dependo de un administrador ni una conexión a red que tenga que instalar todo un sistema como MySQL, Firebird, Postgres, etc.

Se que es absurdo pensar así, pero no creo que esté totalmente equivocado. Llego con mi sistema y sin necesidad de nada, lo pongo en una carpeta en cada cliente que lo necesite o se vaya a usar, y carga sin problemas.

Ah, el sistema es para Salud, automatizando todo un servicio de salud, con 5 años de uso, sin pérdida de datos, y solo pesa 5Mb, con más de 20mil pacientes registrados.

Saludos

Muchas gracias.
Responder Con Cita
  #7  
Antiguo 15-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Llegas con un problema inherente al sistema que estás usando.
Te explican el problema y la solución.
Contestas que el sistema es perfecto para lo que quieres.
Pues no será tan perfecto si tienes un problema que no puedes/sabes resolver.
El multiusuario es algo inherente a los RDBMS como firebird, postgresql, mysql, etc. pero sqlite... no.
¿Que funciona?, sí, funcionar, funciona, pero también puedes viajar de Portugal a Corea en bicicleta, pero seguramente preferirás el avión.
Responder Con Cita
  #8  
Antiguo 15-11-2012
Sapiem Sapiem is offline
Miembro
 
Registrado: abr 2007
Posts: 24
Poder: 0
Sapiem Va por buen camino
Respuesta

Disculpen, no quiero que mi respuesta se sienta mal, como siento esta última que me han dado. No quise molestar a nadie, simplemente quise preguntar una duda, porque el problema existía, y si lo solucioné de la manera que lo cité hace un rato, fue después de preguntar en el foro.

Es que a veces no nos damos cuenta que todos no tenemos los recursos como poder ir en avión en vez de bicicleta. Y sin embargo todos llegamos. Si ese servidor que me lleva en avión, deja de ser accesible por algún momento, pues se pararían los servicios por los registros, y entonces habría que escribir a mano, que sería entonces ir a pie, ni siquiera en bicicleta. Sin embargo, si el servidor falla, el sistema sigue funcionando localmente y luego se integrarían las bases de datos.

Quizás es la costumbre de nosotros los médicos de que frases como "imposible" no existen, y por eso respondí, y no creo que haya sido ofensivo. Al contrario, consulté con los que más saben, porque soy del criterio de que "Al César, lo que es del César", pero al ver que me niegan algo que ya he implementado hace años, pues quise citarlo, no por nada, sino porque quizás pueda ayudar a otros que como yo, no puedan darse el lujo de pensar en montar un servidor. Si fuese así como mencionan de que aparentemente soy oídos sordos a lo que me explican, ni siquiera me tomo el tiempo de entrar al foro, si creyera que me la se todas. Absurdo completamente el que piense así, al contrario, rico es el que tiene un poco de conocimiento de cada persona.

Una vez más, disculpen si molesté a alguien como parece que ha ocurrido, pero hay que ver también como se responden las réplicas. Llevo años en este foro y siempre he encontrado soluciones y ayudas, no respuestas así.

Gracias.
Responder Con Cita
  #9  
Antiguo 15-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, siento haberte molestado, no era mi intención, sólo intentaba hacer entender que si un producto no tiene una característica que necesitas, entonces debes usar otro producto.
Por lo que dices, te puedes "apañar" con él, pero tienes un problema que no puedes resolver con el mismo. Pero el problema es el producto que no está pensado para hacer lo que necesitas. ¿Que puedes hacer algún "invento" para solucionarlo?, hombre, sí, algo se podrá, pero no quita que si es monousuario... es monousuario.
Si mal no recuerdo, cuando un usuario está usándolo, este se bloquea y espera a terminar para que otro usuario pueda usarlo. Así que, en teoría, lo que pides es algo que ya lo hace sqlite.
Ahora bien, lo que no he entendido es qué problema tendrías en usar firebird, por ejemplo.

[modo broma]
En fin, es como recetar a alguien un somnífero muy fuerte para que pueda dormir, cuando el problema es que el vecino de encima se pasa la noche tocando el tambor. La solución no es el somnífero, es denunciar al vecino... o ponerse unos buenos tapones en los oidos.
[/modo broma]
Responder Con Cita
  #10  
Antiguo 15-11-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues no será tan perfecto si tienes un problema que no puedes/sabes resolver.
Casimiro, lo que yo entendí, es que sí lo pudo y supo resolver.

Yo le doy la razón al compañero Sapiem. Es cierto que SQLite quizá no sea lo mejor para un entorno multiusuario pero -y esto ya lo hemos discutido anteriormente- no es cierto que sólo sea monousuario y si alguien hace buen uso de él y le funciona, pues, tampoco hay que ser más papistas que el papa.

// Saludos
Responder Con Cita
  #11  
Antiguo 15-11-2012
Sapiem Sapiem is offline
Miembro
 
Registrado: abr 2007
Posts: 24
Poder: 0
Sapiem Va por buen camino
Alternativas

Usar el firebird, lo intenté una vez e incluso "embed" pero no me entendí bien con él, por decirlo de alguna forma. Además, me gusta crear sistemas que no dependan de nada externo a ellos, y FireBird (hasta donde conozco) hay que instalarlo, aunque lo pueda distribuir con el paquete nuestro. Luego encontré SQLite3, con Zeos y fue la solución para todo. Desde entonces, todo lo hago con esa unión de maravilla. Antes usaba Absolute Database, pero la pérdida de registros fue enorme que ni ellos mismos, con los códigos que incluso les mandé, supieron justificar. Por lo tanto, no era fiel.

No insistí en firebird, por eso, pero seguro estoy que hubiese sido más útil, pero a la larga, tendría que usar un server, no? Quizás es por falta de tiempo o de algunos ejemplos que me ayuden a analizarlo y encontrarle la utilidad. Lamentablemente no tengo tiempo para dedicarme a la programación para tanto, mis pacientes son prioridad siempre.

Bueno, con respecto a monousuario. Esa duda siempre la tuve desde el primer día que usé SQLite3, pero no le vi esta dificultad, o al menos no se nota al usarse. Por ejemplo, para comprobar esto, inicié a propósito 3 sistemas a la vez con la misma base de datos cargada y le mandé a los 3 a hacer un informe completo con todos los pacientes (20mil) y me lo generaron los tres sistemas al mismo tiempo, en solo 2,7 seg. Eso no es demora, y no fue en mi laptop que es un avión, sino en las PC del instituto. Por eso, sería quizás prudente migrar en un futuro a firebird por ejemplo si fuese necesario, pero me siento cómodo con SQLite3 y me ha sido muy útil, con encriptamiento y todo. Solo me faltaba esto de proteger los registros.

Por cierto, incluso una vez me comentaron que usando MySQL, para lograr proteger un registro, debería, crear un campo en la tabla que llevaría por ejemplo la hora del bloqueo, y en dependencia del tiempo desde que se bloqueó hasta el nuevo intento de modificación, era loq ue me determinaba si estaba en uso o no. Eso no lo creí "práctico" pues yo puedo estar escribiendo los datos de un pte x min, incluso, levantarme y asistirlo de urgencia mientras que estaba escribiendo sus datos, por lo que aún debe permanecer ese registro bloqueado. Por eso es que traté de indagar otras variantes, y al no poder resolver, intenté hacerlo con archivos externos como expliqué, incluso puedo poner el código para compartirlo.

Gracias por la comprensión y siempre ayuda..

Dónde puedo encontrar ayudas párcticas de Firebird y sus variantes de server o embed (principalmente esta última)?
Responder Con Cita
  #12  
Antiguo 15-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Casimiro, lo que yo entendí, es que sí lo pudo y supo resolver.
No lo había entendido así

Cita:
Empezado por Sapiem Ver Mensaje
..
Me alegro de que lo hayas resuelto.
Lo que comentas sobre mysql, evidentemente, no te informaron correctamente.
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
ayuda con problem para determinar cuales son los registros con menor descuento microbiano SQL 9 29-10-2011 21:09:31
Ayuda a proteger tu libertad... Pascalizado Noticias 0 20-12-2007 15:45:33
manual para conectar con sqlite Greco Conexión con bases de datos 2 20-07-2007 16:45:45
necesito ayuda para pasar registros a otra tabla ddd_ddd Conexión con bases de datos 2 09-09-2005 20:33:41
necesidad de orientacion para aplicativo clinica dental FNADALO Varios 2 30-12-2003 16:19:10


La franja horaria es GMT +2. Ahora son las 07:53:27.


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