Vladimir revisa estos métodos de TQuery y TTable:
//-----------------------------------------------------
// Gestion de campos MEMO y BLOB
METHOD ReadFromFile( cFileName )
METHOD WriteToFile( nCol, cFileName )
METHOD SetReadMemo( nFld, lRead )
METHOD SetReadMemoAll( lRead )
METHOD ReadMemo( nFld )
MESSAGE ReadMemo( nFld ) METHOD ReadMemo( nFld )
Y mira el ejemplo pt18.prg
Si luego tienes dudas hablamos ;-)
//----------------------------------------------------------------------------//
#include "InKey.ch"
#include "Eagle1.ch"
//----------------------------------------------------------------------------//
procedure main()
local oCon, oDataSet // Objetos
local cHost := "127.0.0.1"
local cUser := "root"
local cPwd := "root"
local cDb := "E1Prueba"
// Datos de la tabla
local cTable := "TestMemo"
local aStruct := { { "cmMiTexto", "M", 10, 0 } } // Array como lo devuelve
DbStruct()
local cType := "BTREE" // Tipo de tabla en el servidor
local lTemporary := .f. // Indicador si es una tebla temporal
local lNotExists := .t. // Indicador de que la cree sólo si no existe
cls
// Creamos objeto conexion
oCon := TMSConnect():New()
// Intentamos la conexion
if oCon:Connect( cHost, cUser, cPwd, cDb )
/*
// Desmarca esto para ficheros de hasta 16m o cambia según convenga:
// Por defecto max_allowed_packet está a 1 Mb por lo que da el error
// si el Blob es mayor de 1Mb lo aumentamos a 16 M para evitar el error:
// "MySQL server has gone away"
oCon:Execute( "set @@global.max_allowed_packet=16*1024*1024" )
// Hacemos una reconexion para que asuma la variable cambiada:
oCon:ReConnect()
// Comprobamos las variables:
oDataSet := TMSQuery():New( oCon, "SHOW VARIABLES" )
oDataSet:Open()
GestBrw( oDataSet )
oDataSet:Free()
*/
// Si existe la tabla la borramos, sólo en esta demo ;-)
if oCon:oDataBase:DropTable( cTable )
MyMsg( "La tabla " + cTable + " ha sido borrada..." )
endif
// Creamos el objeto Tabla
oDataSet := TMSTable():New( oCon, cTable )
// Creamos la Tabla si no existe
if oDataSet:CreateTable( aStruct, cType, lTemporary, lNotExists )
MyMsg( "Tabla lista..." )
else
MyMsg( "Error en CreateTable()" )
oDataSet:Free() // Liberamos todo
oCon:Free()
Quit
endif
// Abrimos y nos traemos el resultado al cliente
if oDataSet:Open()
//--------------------------------------------------
// CREAR UN REGISTRO A PARTIR DE UN FICHERO
// Controlamos la existencia del fichero de entrada
if File( "pt18.prg" )
// Limpiamos el buffer estilo xBase
oDataSet:Blank()
// Cargamos el buffer interno con el contenido del fichero de
cualquier tipo, en este caso
// con lo que haya en TEST.IN, podria ser jpg, gif, texto,
sonido o lo que sea...
oDataSet:SetBuffer( 1, oDataSet:ReadFromFile( "pt18.prg" ) )
// Lo insertamos en la tabla
if !oDataSet:Insert( .t. )
MyMsg( "No se pudo insertar el registro..." )
end
else
MyMsg( "No encuentro el fichero de entrada..." )
endif
//--------------------------------------------------
// CREAR UN FICHERO A PARTIR DE UNA COLUMNA
if oDataSet:RecCount() > 0
// Nos vamos al primero
oDataSet:GoTop()
// Si existe el fichero de salida lo borramos
if File( "Test.txt" )
FErase( "Test.txt" )
endif
// Creamos el fichero de salida Test.out a partir de la columna
1
// que puede ser de cualquier tipo, especialmente BLOBs
if oDataSet:WriteToFile( 1, "test.txt" )
MyMsg( "Vamos a ver el fichero de salida..." )
// Lo presentamos en pantalla:
DispBox( 00, 00, 24, 79 )
MemoEdit( MemoRead( "test.txt" ), 01, 01, 23, 78, .f. )
else
MyMsg( "Error al crear el fichero de salida" )
endif
else
MyMsg( "No hay registros en la tabla..." )
endif
else
MyMsg( "Error al abrir la tabla: " + oDataSet:cName )
endif
oDataSet:Free() // Liberamos todo
oCon:Free()
else
MyMsgInfo( "No hay conexion", "Ojo" )
endif
return
//----------------------------------------------------------------------------//
#include "..\comun\SimpleBrw.prg"
//----------------------------------------------------------------------------//
--- En eagle1@yahoogroups.com, "cps_envios" <cps_envios@...> escribió:
>
> AMIGOS
> EN XBROWSE PARA MOSTRAR IMAGENES SE PONE EN UN ARREGLO TODO LOS BITMAPS
>
> oCol:AddBmpFile("bitmap\"+alltrim(cMcrut[j])+".bmp")
>
>
> Y LUEGO CON UNA CONDICION SE PINTA DEVOLVIENDO EL REGISTRO LA UBICACION DEL
ARREGLO
> PARA JALAR LA IMAGEN
>
> oBrow:aCols[xx]:bBmpData := &("{ || "+cMcrut+" }")
>
> PERO COMO SE PUEDE MOSTRAR FOTOS DE UNA LISTA DE ALUMNOS GRABADAS EN UNA BASE
DE MYSQL
>
> PREGUNTAS
> XBROWSE PUEDE MOSTRAR JPG
>
> YO TENGO UNA FUNCION QUE ME LEE LA IMAGEN DE LA BD LA DESENCRPTA CON
FMimeDec(cTemp,cTemp2)
> Y CREA UN JPG
>
> BUENO SUPONGO QUE TENDRIA QUE PRIMERO BAJAR TODAS LAS IMAGENES A UNA CARPETA
> Y LUEGO MOSTRARLAS CON XBROWSE
>
> HAY UNA FORMA DE HACERLO DIRECTO DE LA BD
>
> GRACIAS POR LA AYUDA
>
>
>
> Func vzAbrirTImagen(campo) //Para abrir una imagen GRABADA en la BD
> local cMemo:='',cTemp:='',cTemp2:=""
> SysRefresh()
> CursorWait()
> cMemo := vz(campo) //::oRsImagenes:Fields("imagen"):Value
> if !empty(cMemo)
> cTemp = 'temp\temp002.tmp'
> MEMOWRIT(cTemp,cMemo)
> if file(cTemp)
> cTemp2 = 'temp\temp003.JPG'
> FMimeDec(cTemp,cTemp2) //Esta es la funcion que nos permite leer la
imagen en la base de datos
> if !file(cTemp2)
> //MsgAlert("No ha sido posible leer la imagen de la base de datos" )
> endif
> else
> // MsgInfo("No existe la imagen del documento")
> endif
> else
> //MsgInfo("No es posible abrir la imagen del Documento" )
> EndIf
> SysRefresh()
> CursorArrow()
> Return( cTemp2 )
>