![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
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 |
|
#2
|
|||
|
|||
|
Hola
Que componentes estas usando? Yo trabajé con los ibx y dbx. Saludos TJose |
|
#3
|
|||
|
|||
|
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 |
|
#4
|
|||
|
|||
|
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:
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);
}
}
//---------------------------------------------------------------------------
TJose |
|
#5
|
|||
|
|||
|
Voy a probarlo a ver si consigo hacerlo funcionar y te cuento.
Muchísimas gracias. Alberto |
|
#6
|
|||
|
|||
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 |
|
#7
|
|||
|
|||
|
Hola
Cita:
Saludos TJose |
|
#8
|
|||
|
|||
|
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 ![]() |
![]() |
|
|
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 |
|