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"
#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" */ }