![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Sentencias SQL con BLOBS
Buenos días,
Haber si alguien me puede echar una mano. Os comento: Tengo varias bases de datos. Todas ellas deben estar sincronizadas. Para ello controlo todos los eventos (insert, update, delete) que se hacen sobre la base de datos MASTER y guardo estas sentencias en una tabla auxiliar. Luego ejecuto todas estas sentencias en las otras bases de datos y estas quedan totalmente sincronizadas. Pero tengo el problema, de que si la tabla sobre la que controlo los eventos, contiene blobs, no se como generar las distintas sentencias. He echo un export into file, para ver como lo hace la máquina para exportar una tabla con blobs y luego hacer el insert. Genera una variable de memoria (creo..) que contiene la imagen. Pero no tengo ni idea de como la genera... Alguien me puede echar una mano? Un cordial saludo ![]() |
#2
|
||||
|
||||
Supongo que sería igual que con el resto de campos salvo que tendrás que guardar el fichero que tienes en el blob (imagen, pdf, video, etc.) para luego cargarlo y guardarlo en la BD destino.
Con estos campos puedes hacer un .savetofile y .loadfromfile para ayudarte en el proceso. Puedes hacer una búsqueda por clubdelphi, son cosas que se han tratado en diversas ocasiones. Por si acaso te sirve de algo, aquí tienes un documento pdf explicando la forma de trabajar con campos blob. Si tienes alguna duda, ya sabes... aquí estamos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
¿Desde dónde haces ese control de Insert/delete/update?
¿Desde la Base de Datos o desde programa? Si es desde B.D., tal vez deberías crear una tabla temporal para guardar los Blobs mientras replicas las sentencias en las otras B.D.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
|||
|
|||
Lo controlo desde la BD con un trigger.
Buena aportación, me has dado una idea! Voy a probar! |
#5
|
||||
|
||||
Eso me había parecido, pero no estaba seguro.
Al hacer el INSERT se trataría de guardar la sentencia SQl (eso ya lo haces) y guardar el BLOB en una tabla de BLOBs con una referencia a esa sentencia. Después al replicar en las otras Bases de Datos, podrías hacerlo en 2 pasos: (1) Ejecutar la sentencia. (2) Actualizar el BLOB. Si hay algun BLOB que es obligatorio (NOT NULL) deberás "inventarte" algun truco para poder hacer la inserción (que ahora mismo no tengo claro cual... ![]()
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Cita:
De momento...sigo perdido de como hacerlo :S |
#7
|
||||
|
||||
Esta difícil lo que quieres hacer. A menos que sean campos BLOB de texto, no puedes escribir una sentencia SQL que modifique su contenido (para los campos BLOB de texto no hay que hacer nada especial, se pueden tratar como un campo de texto cualquiera).
Hay adaptaciones en los Scripts de Firebird que permiten crear sentencias SQL que modifiquen campos BLOB, pero son extensiones propias de programas como IBExpert, y no son estándar (solo funcionan dentro de IBExpert, on con su IBEScript.exe). Además sueles tener que guardar el campo BLOB en un archivo independiente, por lo que dificilmente lo podrás integrar en tu mecanismo actual, ni en tus tablas de modificaciones. Normalmente este problema se solventa con la Replicación de datos, en ella se guarda en una tabla auxiliar la clave ID de los registros a sincronizar (y no las sentencias SQL que se han usado), y en el momento de sincronizar los datos, se lee la información y se copia a la otra base de datos. Este es el documento "clásico" para la replicación entre bases de datos Interbase/Firebird (verás como probablemente con tu mecanismo ya tienes medio trabajo hecho). http://www.ibphoenix.com/main.nfs?a=...ge=ibp_howto10 No hace mucho hablamos del tema en el Foro, creo que te seria útil leerte este hilo. http://www.clubdelphi.com/foros/showthread.php?t=69827 Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Urgente Comparar dos blobs | Leto_Atreides | Firebird e Interbase | 11 | 23-07-2007 08:58:09 |
problemas con blobs con formato | lazar | PHP | 8 | 15-02-2007 10:19:25 |
Importando BLOBs con IBEASY+ | kurroman | Firebird e Interbase | 0 | 22-01-2007 15:38:27 |
Blobs | trabuc | SQL | 1 | 06-09-2004 19:33:09 |
Campos Blobs y recors | frankmch | Conexión con bases de datos | 0 | 05-09-2003 00:13:51 |
![]() |
|