 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Luis Anibal Lt


Registrado: 12 Nov 2002Mensajes: 84Ubicación: Santiago del Estero, Argentina
|
Publicado: Lun 16 Jul, 2012 2:35 am Asunto: Leer campo BLOB desde FireBird |
|
|
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 |
|
 |
Luis Anibal Lt


Registrado: 12 Nov 2002Mensajes: 84Ubicación: Santiago del Estero, Argentina
|
Publicado: Lun 16 Jul, 2012 4:31 am Asunto: |
|
|
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  _________________ Luis Anibal Mendez
Analisis, Programacion, Asesoramiento
luisanibalmendez@gmail.com |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|