Pessoal, essa rotina funciona normalmente se não estivesse usando um servidor de banco de dados, a questão é essa.
Testei inclusive com DBF, salvando no memo e depois em bitmap de volta, funciona.
A questão é que não está funcionando com o servidor de banco de dados LetoDBf. Se ele lê o arquivo numa variável então porque não salva no DBF lá no servidor se o conteúdo está na memória?
Lá no cadastro da instituição:
Código: Selecionar todos
// GRAVA DADOS
UG->(LOCKREG())
UG->NOME := cUG
UG->FILIAL := cFI
UG->ENDERECO := cEND
UG->BAIRRO := cBAI
UG->CIDADE := cCID
UG->COMPLEMENT := cCOM
UG->UF := cUF
UG->CEP := cCEP
UG->TELEFONE := cTEL
UG->FAX := cFAX
UG->CNPJ := cCNPJ
UG->IE := cIE
UG->LOGOTIPO := cLOGO
UG->LOGOW := nLOGOW
UG->LOGOH := nLOGOH
cARQBMP := LOWER(ALLTRIM(UG->LOGOTIPO))
IF FILE(cARQBMP)
// TRANSFORMA ARQUIVO BITMAP EM ARQUIVO DE TEXTO CODIFICADO EM BASE64
HB_Base64EncodeFile( cARQBMP, "base64bmp.enc" )
// SALVA IMAGEM NO BANCO DE DADOS
REPLACE UG->LOGOBMP WITH MEMOREAD("base64bmp.enc")
ENDIF
No programa inicial antes do MENU principal:
Código: Selecionar todos
* CERTIFICA QUE A LOGO DO RELATÓRIO CONSTA NA PASTA DO EXECUTÁVEL
cLOGO := ALLTRIM( LOWER(UG->LOGOTIPO) ) // NOME DO BITMAP QUE DEVE ESTAR NA MESMA PASTA DO SISTEMA
IF !FILE( cLOGO )
bFILE := HB_base64decode(UG->LOGOBMP)
MEMOWRIT(cLOGO, bFILE)
ENDIF
Já coloquei MEMOWRIT(cLOGO, HB_base64decode(UG->LOGOBMP)) e não funcionou.
A questão é que o campo UG->LOGOBMP está vazio.
O usuário que cadastrou a logo tem ele no computador e salvou com o "base64bmp.enc", se eu ler em variável ele mostra o conteúdo, mas se eu tento salvar essa variável no campo memo também dá erro.
Quero ter só o aplicativo no computador e a variável de ambiente definida com o IP do servidor, mas pelo visto vai ter que ficar o bitmap também, se quiser que saia logotipo nos relatórios.
Isso tudo porque Win32BMP() não está lendo o bitmap que está na mesma pasta dos DBFs lá no servidor, oBmp:loadFile( LOWER(cARQ_BMP) ) não lê o bitmap que está lá.