Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   BD sin conexion a internet (https://www.clubdelphi.com/foros/showthread.php?t=86127)

giulichajari 20-06-2014 18:32:07

BD sin conexion a internet
 
Queria saber que opciones hay para cuando se corta la conexion a internet, porque estoy modelando un webservice, y quiero saber si se corta la conexion a internet, como guardo en el servidor local. Son 3 sucursales con varias pc.

Habia pensado:

1- Poner en LAN las maquinas(una servidor y el resto clientes) dentro de cada sucursal, y a su vez montar el webservice, y si se corta la conexion tener una bd auxiliar en la pc serviodor de cada sucursal.

2- Dejar sin lan y cada maquina con su base de datos, porque por ejemplo los empleados que venden articulos, solo necesitan precios y clientes por ej. Y solo un administrativo de la casa central necesita el acceso a proveedores.

Me parece mejor la opcion 2, porque pienso no hay muchos problemas de concurrencia entre las sucursales, porque tiene pocos usuarios, y al reestablecer internet se cargan los datos de vuelta, que es otra cosa que quiero aprender.

Es decir: se puede dejar una porcion de una bd en una maquina cliente? y cargar en el servidor?

newtron 20-06-2014 19:51:03

Hola.

No sé la base de datos que usas, algunas bases de datos admiten una cosa que se llama replicación que es una especie de sincronización entre dos bases de datos pero eso para lo que comentas puede no ser lo adecuado.

Lo suyo sería que crearas una base de datos local y con procesos de importación y exportación enviaras y recibieras los datos que necesites pero claro, tendrías que montar ese proceso manualmente.

Saludos

giulichajari 20-06-2014 20:12:45

Gracias
 
Bueno en principio gracias por responder.

tu dices una base de datos distribuida y centralizada a la vez, osea la base de datos local con importcion y exportacion a una central? Bueno eso no me parece adecuado porque es una carga mas en cuanto a procesos, ya que cada maquina debe guardar datos y a la vez comunicarse y enviarlos, osea serian mas transacciones.

Lo unico que quiero si se corta la conexion a internet guardar los datos y cuando vuelve internet cargarlos, pero despuesd e estos seguir con la base de datos central ubicada en el servidor. Una base de datos distribuida es muy complejo.

Saludos.

Casimiro Notevi 20-06-2014 21:18:57

Lo comentado por Newtron soluciona tu problema.

Cita:

Empezado por giulichajari (Mensaje 478112)
Lo unico que quiero si se corta la conexion a internet guardar los datos y cuando vuelve internet cargarlos

Bien, pues entonces hazlo así, guardas los datos en local si no hay conexión, y cuando haya conexión los envías.

giulichajari 20-06-2014 21:26:25

Cita:

Empezado por Casimiro Notevi (Mensaje 478121)
Lo comentado por Newtron soluciona tu problema.


Bien, pues entonces hazlo así, guardas los datos en local si no hay conexión, y cuando haya conexión los envías.

Exacto pero como hago eso?

Necesito el sql server, es decir correr el servicio de sql en todas las maquinas, entonces si se corta trabaja con la base en local? Y al renovarse vacio en local y lo cargo en la central?

Casimiro Notevi 20-06-2014 21:36:58

No, no, no... eso es algo que debes programar tú.
Ignoro si ¿MS sql server? puede hacer algo como lo que dices.

giulichajari 20-06-2014 22:01:43

gracias
 
Cita:

Empezado por Casimiro Notevi (Mensaje 478125)
No, no, no... eso es algo que debes programar tú.
Ignoro si ¿MS sql server? puede hacer algo como lo que dices.

Por ejemplo, el cajero utiliza la tabla productos y clientes y luego registra una compra, entonces debo generar mediante uns cript o como sea, una bd con esas 3 tablas por ejemplo, luego cada maquina de los cajeros que son varias deben tener esa base de datos, si no es imposible.¿Es asi?
Ademas:
¿con que componente puedo conocer si el servidor esta online y en base a eso redirigir al local o esperar?

y para pasar de la bd local al servidor al recuperarse la conexion, simplemente programo una funcion que pase datos con un insert.
ok buscare mas info y ejemplos

Casimiro Notevi 20-06-2014 22:11:33

Ese es un tema muy serio y hay que tener mucho cuidado con lo que se hace. Hay que sopesar mucho todos los pros y los contras para encontrar la mejor solución a cada caso.
Piensa bien todo el proceso que realmente necesitas, las distintas opciones, las maneras de implementarlos, etc. y luego decides.
Después toca programarlo, pero eso es lo último, cuando se tengan las cosas totalmente claras, planificadas y por escrito.

giulichajari 20-06-2014 23:00:48

Cita:

Empezado por Casimiro Notevi (Mensaje 478129)
Ese es un tema muy serio y hay que tener mucho cuidado con lo que se hace. Hay que sopesar mucho todos los pros y los contras para encontrar la mejor solución a cada caso.
Piensa bien todo el proceso que realmente necesitas, las distintas opciones, las maneras de implementarlos, etc. y luego decides.
Después toca programarlo, pero eso es lo último, cuando se tengan las cosas totalmente claras, planificadas y por escrito.

Entiendo lo que dices, el dueño de la empresa lo quiere si o si, y tiene razon porque si se corta internet no puede dejar de atender a la gente que va a comprar, simplemente pregunto como se hace, o donde puedo encontrar informacion al respecto

Igual muchas gracias

giulichajari 20-06-2014 23:17:47

otra cosa
 
ademas porque no serviria hacerlo de esta forma por si se corta internet?

Casimiro Notevi 20-06-2014 23:21:42

Creo que no entiendes lo que digo, en esto no tiene nada que ver lo que quiera el dueño de la empresa, es tu elección y tu decisión, como encargado del sistema informático, el decidir la mejor manera que puede implementarse dependiendo del negocio, del equipamiento, del lugar, de las conexiones, del presupuesto, de las necesidades en todos los aspectos, etc.

Esto no es buscar un componente y un código encontrado por internet y pegarlo a tu programa. Salvo que quieras ir directo al desastre.

giulichajari 20-06-2014 23:56:33

ok, pero el cliente siempre tiene la razon, ajajjaja, aparte no se puede prescindir del sistema solo porque no hay internet.

Y no quiero un codigo copiado, lo que pasa e sque nunca lo hice y queria que me recomendaran algo..
Saludos

Casimiro Notevi 21-06-2014 01:06:14

Pero eso no tiene nada que ver con lo que he comentado :)

La solución "fácil" es: si ocurre un error de conexión, guardar los datos con una marca indicadora de que no ha sido actualizado en la central.
Testear cada xx minutos para ver si hay ya conexión a la central.
En cuanto hay conexión a la central, buscar todos los registros con la marca "no actualizado" y pasarlos a la central.

No se puede explicar mucho más porque tu pregunta es muy genérica.

newtron 21-06-2014 09:56:27

Hola.

Yo veo algo engorroso mantener una conexión directa con el servidor y que en caso de un posible fallo de internet pase a modo local.

Te pongo un ejemplo simple de lo que yo hago en estos casos (obviando tablas como formas de pago, vendedores, etc):

Base de datos Central:

Tabla de artículos
Tabla de clientes
Tabla de cabeceras de ventas
Tabla de lineas de ventas
..etc. (o sea, todas las tablas)

Base de datos Local (en cada delegación remota):

Tabla de artículos
Tabla de clientes
Tabla de cabeceras de ventas
Tabla de lineas de ventas

Como ves tienes las bases de datos duplicadas, una en cada delegación. Tendrías que tener un proceso inicial de importación de los datos maestros desde la central hacia las delegaciones, esto lo puedes hacer exportando los datos maestros de clientes, artículos, etc. a un sitio FTP y un proceso en las delegaciones que integre esa información con su base de datos, es decir, que lea lo que le envía la central y, por ejemplo, en el caso de los artículos que no existan los crea y los que existan actualice sus datos como nombre, precios, códigos de barras o algún dato más que pueda variar.

A partir de ahí puedes empezar a vender en la delegación y almacenando los datos en su base de datos local. Cuando acabe el día tendrás que hacer el proceso inverso, es decir, enviar un fichero al sitio FTP con las ventas realizadas y en el ordenador centrar integrarlas en su base de datos junto con las del resto de delegaciones. Una vez enviados los datos de la delegación puedes marcarlos como enviados para no duplicar los envios o borrarlos para comenzar un nuevo día, eso ya depende del cliente y el tipo de negocio.

Tendrás que tener en cuenta cosas como que la numeración de cada delegación sea independiente para no duplicar números de venta y cosas por el estilo.

Esto tiene sus ventajas y sus inconvenientes, la ventaja es que no necesitas tener conexión directa con la central y el inconveniente es que los datos no están actualizados hasta que hagas los envíos central-delegación-central.

Espero haberte aclarado algo el asunto.

Saludos

giulichajari 21-06-2014 11:26:00

Gracias
 
Bueno entiendo tu propuesta newtron pero la idea es tener un servidor para como dices tu asegurar la concurrencia, y tener todos los datos actualizados.

Inicie este tema nada mas que para saber en donde puedo encontrar ejemplos o como hacer para comprobar el servidor, y para pasar a la central al recuperarse la conexion, y como se instala la base de datos en local aunque sea con algunas tablas.

Casimiro Notevi 21-06-2014 12:10:43

http://www.clubdelphi.com/foros/show...=replicaci%F3n
http://www.clubdelphi.com/foros/show...=replicaci%F3n


La franja horaria es GMT +2. Ahora son las 03:03:47.

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