PDA

Ver la Versión Completa : Actualiza Base de datos datos desde un pen drive


Oscar Guzmán
17-12-2013, 04:20:49
Hola a todos en el foro y feliz navidad

Necesito apoyo en lo siguiente agradeciendo vuestra ayuda de antemano

Una persona tiene dos pequeñas tiendas, con un programa de facturación en Delphi 7,pero ninguna de las tiendas tiene internet. El me dice que necesita un módulo que le permita crear los productos que necesite desde su oficina, la cual está lejos de sus tiendas y que una vez que haga eso pueda envíar los productos junto con un pendrive o un cd para que se actualicen las bases de datos en cada una.

Tengo una idea de lo que voy a hacer a nivel de sistema, pero lo que no veo es como puedo hacer un backup de sql de una base de datos y que después en la tienda pueda descargarse la base de datos y actualizar solamente las tablas que están relacionadas con el inventario desde un medio removible como un pen drive o cd.

Agradezco vuestro apoyo.

newtron
17-12-2013, 09:53:10
Hola.

Yo creo que lo más sano es que exportes las tablas que te interesen en formato ascii para después poder leerlas desde otro punto y hacer las operaciones que necesites.

Saludos

Oscar Guzmán
17-12-2013, 15:18:58
Hola Newtron,

Pero como podría hacer eso, por lo menos saber como empezar, además es preciso tener en cuenta que no quiero actualizar tablas completas sino anexar información a tablas que ya existen, es decir, cuando el pendrive llegue a la tienda el mismo solo debe actualizar la información que se creó en la oficina

Casimiro Notevi
17-12-2013, 16:33:47
Metes el pendrive y le das a una opción "Exportar", que la debes crear tú, obviamente, con los datos que necesites traspasar.
Luego en el otro sitio, metes el pendrive y en el programa le das a una opción "Importar", que también, obviamente, debes crearla tú para extraer los datos del pendrive y almacenarlos en la BD.

Oscar Guzmán
18-12-2013, 01:05:35
Hola Casimiro,

Obviamente el problema no es meter ni sacar el pendrive ni tampoco colocar la opción exportar ni importar, sino como pasar la información creada en la oficina a un formato o algo similar que después pueda ser anexada en las tablas que manejan los registros de productos y otras tablas relacionadas en la tienda, sin que eso signifique reemplazar una tabla, sino anexar la información que lleva el pendrive.

Nunca había tenido la necesidad de hacer eso, por eso estoy preguntando, pero ten la absoluta seguridad de que sé como meter y sacar un pendrive de una computadora

Casimiro Notevi
18-12-2013, 01:24:41
No he puesto en duda que sepas poner el pendrive en su sitio :confused:

Lo de traspasar los datos tienes muchas formas de hacerlo, lo más simple es un fichero de texto, por ejemplo, si tienes que pasar los artículos, mediante un "sql" los exportas y luego los lees en el otro equipo:
Es que tu pregunta es muy genérica, no queda claro exactamente qué es lo que quieres saber, ¿cómo exportar?, ¿cómo grabar los datos?, ¿cómo definir qué datos exportar?, ¿cómo elegir el formato de los mismos?, etc.
Lo normal es un simple: "select codigo, nombre, precio, etc... from tbArticulos where .... lo que sea".
Lo exportas a un fichero de texto:
while not query.eof do
campo1 = query.fields[0].asinteger;
campo2 = query.fields[1].asstring;
campo3 = etc...
end;
Después puedes comprimirlo en un .zip para que ocupe menos.
Después vas al otro equipo y haces justo lo contrario: descomprimes el zip, y lees el fichero de texto, insertándolo en la base de datos.

Debes especificar claramente qué es lo que quieres saber para que se te pueda ayudar.

Oscar Guzmán
18-12-2013, 01:52:48
Perfecto Casimiro

Tienes razón, es que no sabía como abordar el tema, tal vez por eso fui un tanto genérico, pero lo más importante es que ahora si me has dado luz con el asunto de exportar en formato texto. Voy a investigar como pasar información entonces de sql a un archivo de texto y después como pasar información del archivo de texto a una tabla, siendo en este caso (me imagino) un archivo de texto por cada tabla a actualizar

Espero tus comentarios

Muchas gracias Casimiro
Saludos

Casimiro Notevi
18-12-2013, 03:01:45
Haz una búsqueda por los foros, se ha tratado varias veces y encontrarás ejemplos.
Y no olvides que lo primero de todo es tener muy claro, exactamente, los datos que necesitas traspasar.
Y controlar que no se repitan y que solamente se traspasen los que se necesitan y nada más.

mamcx
18-12-2013, 03:37:43
Que BD usas? Si usas sqlite o firebird podrías literalmente copiar la BD y ya.

En el caso de sqlite, puedes hacer un attach http://www.sqlite.org/lang_attach.html y corres sql directamente.

Si no tienes ni idea, te digo que sqlite es una excelente opción (es lo que uso en mis apps de iOS).

Tambien con delphi, puedes cargar los datos en un clientdataset. Son exportables: http://docwiki.embarcadero.com/Libraries/XE2/en/Datasnap.DBClient.TCustomClientDataSet.SaveToFile.

Eso es lo que hacia en el 2000. En el 2000, lo pillas? en serio, que tan "cheap bastard" es tu cliente que no pone internet? Aun una tarjeta de prepago? Y que tal si pone un red wifi "larga" (http://www.amazon.com/s/ref=nb_sb_ss_c_0_8?url=search-alias%3Delectronics&field-keywords=wifi%20long%20range&sprefix=wifi+lon%2Caps%2C250) si las oficinas estan a unos cuantos metros entre si? Esa es una cosa que hizo un cliente para tener su intranet - aunque esto puede implicar permisos-.

Oscar Guzmán
18-12-2013, 05:37:15
Hola mamcx

La base datos que uso es sql server 2005 express, tanto en la ofc como en la tienda

Con lo que me indicó Casimiro ya logró guardar una tabla en un txt a través de una instrucción llamada en cbp pero sólo lo pude hacer en ms-dos y lo que necesito es hacerlo directamente en delphi y que el archivo sea separado por comas y algo muy importante, la exportación al txt va a ser siempre de algunas registros de algunas tablas y no de tablas

Combat-F2D
18-12-2013, 08:19:18
para no complicarte mucho la vida, por decir algo, en las jedi existe un componente CSV (texto separado por comas), que

.CopyFromDataset...
.SaveToFile...

.LoadFromFile
........

conectado al dataset correspondiente
hace milagros, y ojo, funciona

newtron
18-12-2013, 10:20:56
Hola de nuevo.

A ver.... imagino que SQL Server tendrá la opción de exportar/importar desde ficheros de texto, lo único que tendrías que hacer es mantener un campo de la tabla que se marque cuando se exporten los registros de manera que podrías hacer un "EXPORT TABLE ..." (o con la sintaxis que use la base de datos) de los registros que no tengan esa marca y luego marcarlos como exportados, para importar te bastaría con hacer un "IMPORT TABLE..." directamente a la tabla donde los quieras añadir.

Si quieres rizar el rizo ese campo de exportación podría ser un número que identificara el grupo de registros que has exportado por si se pierde el fichero poder regenerarlo de nuevo sin temor a duplicar datos.

No sé si "mexplico".

Saludos

Oscar Guzmán
18-12-2013, 14:44:12
Combat y Newton

Gracias por responder y me parecen interesantes ambas ideas y ya las voy a poner en práctica.

Una vez que haga las pruebas pertinentes les confirmo como me fue con las opciones que me plantean

Gracias