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 15-03-2007
Albertuni Albertuni is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
Albertuni Va por buen camino
InterBase, c++ Builder y campos Blob

Estoy haciendo una aplicación en Borland C++Builder, y manejo una Base de datos de InterBase. En ella necesito guardar videos. (Para que no surga la discusión, son pequeños y ya está evaluada la opción de guardarlos fuera y guardar sólo una referencia al fichero.) Bueno, los videos los guardo en campos Blob. Ahí va mi problema: al guardarlos parece que se guardan bien, porque la base de datos incrementa lo mismo que ocupa el fichero, (para ello utilizo el método loadFromFile(), y luego a la hora de sacarlos, utilizando SaveToFile(), me crea el nuevo fichero pero vacío (0Kb).
No tengo ni idea de porque es.

Si alguien sabe algo del tema, porfavor me ayude.

Saludos
Responder Con Cita
  #2  
Antiguo 16-03-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

Que componentes estas usando?
Yo trabajé con los ibx y dbx.

Saludos
TJose
Responder Con Cita
  #3  
Antiguo 17-03-2007
Albertuni Albertuni is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
Albertuni Va por buen camino
Hola Jose, gracias por responder.
Yo utilizo los componentes ibx.
En concreto ahora creo que el problema es al guardarlo en la base de datos. He probado a ver el tamaño del campo blob en el que supuestamente está el video, y me dice que su tamaño es 0. Eso explicaría que lo leo bien, y por eso me crea el fichero vacío. Espero que me puedas contar como insertarlo a ver si van por ahí los tiros.

Muchas gracias por todo
Responder Con Cita
  #4  
Antiguo 18-03-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

dstDocumentacion es un TIBDataSet con un select que incluye el campo Documento

El ejemplo muestra como guardar y recuperar el documento (exportar - importar). Recuerdo haberlo probado con archivo muy grandes y funcionaba.

La definición del campo documento está dada por:

Código SQL [-]
CREATE DOMAIN DARCHIVOBINARIO AS
BLOB SUB_TYPE 0 SEGMENT SIZE 100;

Código:
void __fastcall TfrmPrincipal::aclImportarExecute(TObject *Sender)
{
   dlgAbrir->Filter = "Documentos de Word (*.doc)|*.DOC|Archivos RTF (*.rtf)|*.RTF|Archivos de texto (*.txt)|*.TXT|Todos los archivos (*.*)|*.*";
   if(dlgAbrir->Execute()){
      AnsiString Archivo;
      Archivo = dlgAbrir->FileName;
      TBlobField *Documento = (TBlobField *) datDocumentacion->dstDocumentacion->FieldByName("Documento");
      Documento->Clear();
      Documento->LoadFromFile(Archivo);
      edtArchivo->Text = ExtractFileName(Archivo);
   }   
}
//---------------------------------------------------------------------------

void __fastcall TfrmPrincipal::aclExportarExecute(TObject *Sender)
{
   dlgGuardar->Filter = "Documentos de Word (*.doc)|*.DOC|Archivos RTF (*.rtf)|*.RTF|Archivos de texto (*.txt)|*.TXT|Todos los archivos (*.*)|*.*";
   dlgGuardar->FileName = edtArchivo->Text;
   if(dlgGuardar->Execute()){
      AnsiString Archivo;
      Archivo = dlgGuardar->FileName;
      TBlobField *Documento = (TBlobField *) datDocumentacion->dstDocumentacion->FieldByName("Documento");
      Documento->SaveToFile(Archivo);
   }
}
//---------------------------------------------------------------------------
Saludos
TJose
Responder Con Cita
  #5  
Antiguo 18-03-2007
Albertuni Albertuni is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
Albertuni Va por buen camino
Voy a probarlo a ver si consigo hacerlo funcionar y te cuento.
Muchísimas gracias.
Alberto
Responder Con Cita
  #6  
Antiguo 26-03-2007
Albertuni Albertuni is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
Albertuni Va por buen camino
Smile Problema resuelto


Hola Jose,
la verdad es que al principio no conseguía hacerlo funcionar. Pero me diste algunas pistas para solucionarlo. contigo y con la ayuda de un programa que desde aquí hago publicidad, ya que me ha parecido algo cojonudo.
Si utilizais InterBase, olvidaros de IBConsole y utilizad IBExpert, os ayudará mucho más.
Bueno, el problema era que se me guardaba en la bbdd pero no se guardaba la referencia a él dentro del campo blob, pero todavía no se porque, así que la obtengo después de hacer loadfromfile, y se la guardo en el campo.

Ahora bien, me surge otro problemilla, creo que similar. A la hora de borrar, me ocurre que se me borra aparentemente bien, pero el tamaño de la bbdd no decrementa. Imagino que unicamente borro la referencia, y no lo que ocupa verdaderamente el fichero.
A ver si alguien sabe como puedo hacerlo.

Muchas gracias

Saludos, Alberto
Responder Con Cita
  #7  
Antiguo 27-03-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

Cita:
Ahora bien, me surge otro problemilla, creo que similar. A la hora de borrar, me ocurre que se me borra aparentemente bien, pero el tamaño de la bbdd no decrementa. Imagino que unicamente borro la referencia, y no lo que ocupa verdaderamente el fichero.
A ver si alguien sabe como puedo hacerlo.
Esto no es un problema. Es normal este funcionamiento. Si deseas recuperar el espacio producido por la eliminacion de registros con backup/restore se consigue. Salvo que el espacio en disco fuera un problema, yo ni me preocuparía por recuperar el espacio.

Saludos
TJose
Responder Con Cita
  #8  
Antiguo 27-03-2007
Albertuni Albertuni is offline
Registrado
 
Registrado: mar 2007
Posts: 9
Poder: 0
Albertuni Va por buen camino
muchas gracias, es un gran alivio.
la base de datos podría crecer mucho, pero no creo que se borren muchos, asi que podría pasar de ello, y si no pues probaré el backup/restore.

gracce per tutto
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
C++ Builder, Interbase y los campos Blob Albertuni C++ Builder 1 27-03-2007 13:35:35
error, Interbase y delphi, edicion campos Blob athos Conexión con bases de datos 0 16-07-2004 21:51:09
Interbase, edicion de campos tipos Blob athos Conexión con bases de datos 0 16-07-2004 16:31:15
Campos Blob Huer Varios 1 11-06-2003 10:39:06
Campos Blob Kafu Firebird e Interbase 2 08-05-2003 18:07:54


La franja horaria es GMT +2. Ahora son las 10:59:17.


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