Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Leer campo BLOB desde FireBird

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Leer campo BLOB desde FireBird Responder citando

Amigos,
Uso BCB XE
Usando ReadComponent y WriteComponent, grabo al destruir el formulario y leo al crear, un archivo donde almaceno, por ejemplo, un DBGRID.

AHORA quiero hacer lo mismo sobre una tabla FireBird.
He logrado almacenar los datos, asi ...
void __fastcall TfrmGrilla::GuardarEstados()
{
TFileStream *fstream;
try
{
AnsiString fname = dm->SV.MiPc
+ dm->SV.UserPc
+ dm->SV.Usuario
+ dm->SV.nroip
+ dm->SV.Formulario+ ".frm";

fstream = new TFileStream(fname, fmCreate);
fstream->WriteComponent(DBGrid1);

dm->tblEstados->Open();

Variant claves[4];
TLocateOptions SearchOptions;
SearchOptions = SearchOptions>>loPartialKey;
claves[0] = Variant(dm->SV.Usuario);
claves[1] = Variant(dm->SV.Formulario);
claves[2] = Variant("DBGrid1");
claves[3] = Variant("nada");
if ( !dm->tblEstados->Locate( "USUARIO;FORMULARIO;NAMECONTROL;CLASSCONTROL",
VarArrayOf(claves,3), SearchOptions ) )
{
dm->tblEstados->Append();
dm->tblEstadosFORMULARIO->AsString = dm->SV.Formulario;
dm->tblEstadosNAMECONTROL->AsString = "DBGrid1";
dm->tblEstadosCLASSCONTROL->AsString = "nada";
}
else
dm->tblEstados->Edit();

dm->tblEstadosVALORES->LoadFromStream(fstream);
dm->tblEstados->Post();
}
__finally
{
delete fstream;
}
}


PERO, y aqui reside el inconveniente, NO PUEDO LEERLO, mas bien, no se como hacerlo ... he probado con TIBBlobStream o TIBDSBlobStream pero me da error EIBClientError with message 'Transaction not assigned'
//---------------------------------------------------------------------------
void __fastcall TfrmGrilla::RestaurarEstados()
{
TIBBlobStream *nada;
TIBDSBlobStream *fstream;

bool existe = false;

InicioTrans(dm->IBTrans);
dm->tblEstados->Open();

Variant claves[4];
TLocateOptions SearchOptions;
SearchOptions = SearchOptions>>loPartialKey;
claves[0] = Variant(dm->SV.Usuario);
claves[1] = Variant(dm->SV.Formulario);
claves[2] = Variant("DBGrid1");
claves[3] = Variant("nada");
if ( dm->tblEstados->Locate( "USUARIO;FORMULARIO;NAMECONTROL;CLASSCONTROL",
VarArrayOf(claves,3), SearchOptions ) )
{
nada = new TIBBlobStream();
fstream = new TIBDSBlobStream(dm->tblEstadosVALORES, nada, bmRead); //---aqui se produce el error
tblEstadosVALORES->SaveToStream(fstream);
existe = true;
}


Desde ya muchas gracias por vuestra atencion
_________________
Luis Anibal Mendez
Analisis, Programacion, Asesoramiento
luisanibalmendez@gmail.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

He avanzado un poco ...
TIBBlobStream *nada = new TIBBlobStream();
nada = (TIBBlobStream *)dm->tblEstados->CreateBlobStream( dm->tblEstadosVALORES, bmRead );


Con estos cambios YA PUEDE LEER el campo blob...
peeeero ...
nada->ReadComponent(DBGrid1);

se supone que esto pasa el stream y carga el componente ... PERO ME DA ERROR ... 'Invalid stream format'

Saludos y sigo probando

PD: que pocos ejemplos que encuentro de este tema Sad
_________________
Luis Anibal Mendez
Analisis, Programacion, Asesoramiento
luisanibalmendez@gmail.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.