Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2010
Franinho Franinho is offline
Registrado
 
Registrado: ago 2010
Posts: 5
Poder: 0
Franinho Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 08-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #3  
Antiguo 08-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿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.
Responder Con Cita
  #4  
Antiguo 08-11-2010
Franinho Franinho is offline
Registrado
 
Registrado: ago 2010
Posts: 5
Poder: 0
Franinho Va por buen camino
Lo controlo desde la BD con un trigger.

Buena aportación, me has dado una idea!

Voy a probar!
Responder Con Cita
  #5  
Antiguo 08-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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).
Responder Con Cita
  #6  
Antiguo 08-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Franinho Ver Mensaje
Lo controlo desde la BD con un trigger.
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.
Responder Con Cita
  #7  
Antiguo 08-11-2010
Franinho Franinho is offline
Registrado
 
Registrado: ago 2010
Posts: 5
Poder: 0
Franinho Va por buen camino
Cita:
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... ).
Ya había pensado en hacer esto...de echo me parece la solución más sencilla...pero a mi jefe le va la marcha...e intentaré buscar otra solución mas compleja y elegante.

De momento...sigo perdido de como hacerlo :S
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
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


La franja horaria es GMT +2. Ahora son las 23:19:28.


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