FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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|| |
#3
|
||||
|
||||
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|| |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
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. |
#7
|
|||
|
|||
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 |
|
|
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 |
|