TBlobField, TMemoryStream, Blobs, Manejo de grandes cantidades de informacion Binaria con Borland C++

En los siguientes ejemplos asumiremos que existe una base de datos de cualquier tipo (Informix, access, Oracle, etc) a la que un ODBC apunta, también asumiremos que la utileria BDE de borland ya dio de alta dicho ODBC, y ya configuró un alias para esta base...Para nuestro ejemplo, este alias sería "acceso_base"...Tambien asumiremos que en esta base de datos existe una tabla llamada "tabla_ejemplo" que contiene los campos llamados "campo_binario" , "que es un campo tipo blob"

Regresar a página principal

                   #include "vdbt/bdto.h" //del include de borland
                   /****************************************************************************/ 
                   /* Esta función Guarda informacion binaria					      */
                   /****************************************************************************/ 
                   void  sube_blob() 
                   {   
                    char dato[10000];
                    /****************************************************/
		      /* función hipotética que llenaría de datos a dato[]*/
                    /****************************************************/
                    funcion_llena_dato(dato);  

                    /* declaramos flujo para gestión con base de datos y lo llenamos */  
                    TMemoryStream flujo_basedatos;
                    flujo_basedatos.Write((void*)&dato,sizeof(dato)); 
             /**********************************************************************************************************/
             /* abrimos la tabla ...Para trabajo con tablas ver  Uso de tablas con C++ */
             /**********************************************************************************************************/
                    TTable tabla;
                    tabla = new TTable(); 
                    /***********************************************************************************************/
                    /* con respecto a la línea siguiente ver Conexion a bases de datos */
                    /***********************************************************************************************/
                    tabla->DatabaseName=string("acceso_base"); 
                    tabla->TableName=string("tabla_ejemplo");   
                    /**********************************************************************************/ 
                    /*no es necesario que exista un indice real en la tabla para que podamos definirlo*/
                    /**********************************************************************************/ 
                    if(!tabla->Active)
                         tabla->Open();           /* abrimos la tabla*/
                    tabla->Insert();          /*agregar registro */

                     /*******************************/
                     /* Declaramos campo Blob       */
                     /*******************************/
                    TBlobField mi_BLOB = tabla->FieldByName(string("campo_binario"));  
                     /******************************************************/
                     /* lo cargamos con el flujo llenado anteriormente      */
                     /******************************************************/
                     mi_BLOB.LoadFromStream(flujo_basedatos);
                     tabla->Post()           /* actualizamos base */
                     tabla->Close();         /* cerramos tabla */
                     delete tabla;
                     tabla->Close();
                     delete tabla;
                   }


                      
                   /****************************************************************************/ 
                   /* Esta función Baja informacion binaria					      */
                   /****************************************************************************/ 
                   void  baja_blob() 
                   {   
                    char dato[10000];
                    TMemoryStream flujo_basedatos;
             /**********************************************************************************************************/
             /* abrimos la tabla ...Para trabajo con tablas ver  Uso de tablas con C++        */
             /**********************************************************************************************************/
                    TTable tabla;
                    tabla = new TTable(); 
                    /***********************************************************************************************/
                    /* con respecto a la línea siguiente ver Conexion a bases de datos */
                    /***********************************************************************************************/
                    tabla->DatabaseName=string("acceso_base"); 
                    tabla->TableName=string("tabla_ejemplo");   
                    /**********************************************************************************/ 
                    /*no es necesario que exista un indice real en la tabla para que podamos definirlo*/
                    /**********************************************************************************/ 
                    if(!tabla->Active)
                         tabla->Open();           /* abrimos la tabla*/
                    tabla->Firstt();              /* vamos a urgar en el primer registro */

                     /*******************************/
                     /* Declaramos campo Blob       */
                     /*******************************/
                    TBlobField mi_BLOB = tabla->FieldByName(string("campo_binario")); 

                     /*************************************************************************************/
                     /* llenamos el flujo anteriormente declarado con la informacion que contieneel Blob  */
                     /*************************************************************************************/
                    mi_BLOB.SaveToStream(flujo_basedatos);
                    mi_BLOB.Seek(soFromBeginning, soFromBeginning);         /* lo posicionamos al principio */
                    tabla->Close();         /* cerramos tabla */
                    delete tabla;
                    tabla->Close();
                    delete tabla;
                    flujo_basedato.Read( &dato, sizeof(dato));  /* finalmente ponemos los datos en "dato" */
                   }

1