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
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
  #4  
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
  #5  
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
  #6  
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.043
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
  #7  
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
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 13:16:23.


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