Clipper On Line • Ver Tópico - Gravar ARQUIVO BINARIO em campo BLOB

Gravar ARQUIVO BINARIO em campo BLOB

Discussão sobre SQL

Moderador: Moderadores

 

Gravar ARQUIVO BINARIO em campo BLOB

Mensagempor Shark » 23 Nov 2017 03:38

Estou gravando um arquivo ZIP num campo MEDIUMBLOB com sucesso. Entretanto, se o ZIP contiver um arquivo EXE, a gravação dá erro. Alguém sabe dizer o que pode ser?

Estou usando xHarbou com SQLRDD. O código abaixo é o que estou usando:

cComm := "INSERT INTO atualiza ( bin_atualiza ) VALUES ( '" + SR_EscapeString( cText, 3 ) + " ')"
oSql := SR_GetConnection()
nErr := oSql:Exec( cComm )

IF nErr != 0
SR_EndConnection( SQLCONNECTION )
RETURN( NIL )
ENDIF

Essa é a mensagem de erro que recebo:

Error description: Error SR_MYSQL/0 SQLExecDirect Error
(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '¯·:3µOÇêئÓÕ‘&‡u% ÿxSf#؁özœ¤˜*¡tmË•Õ϶«C1
' at line 1 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '¯·:3µOÇêئÓÕ‘&‡u% ÿxSf#؁özœ¤˜*¡tmË•Õ϶«C1
' at line 1
Shark
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 28
Data de registro: 25 Set 2017 21:42
Cidade/Estado: Brasília - DF
Curtiu: 5 vezes
Mens.Curtidas: 3 vezes

Gravar ARQUIVO BINARIO em campo BLOB

Mensagempor alaminojunior » 10 Jan 2018 10:17

Já faz algum tempo mas vou deixar aqui, pois pode servir para outros colegas.

Isso eu utilizo para gravar imagens JPG, mas deve servir perfeitamente para gravar outros arquivos, pois inclusive os arquivos XML da MDe trazem arquivos zipados em sua estrutura.
Basicamente você precisa converter o conteúdo do arquivo antes de gravar, e quando precisa restaurar, só fazer o processo inverso.
Para salvar
h1:= fopen(arquivo.jpg)      // abre o arquivo de imagem para leitura
tamanho:= fseek(h1,0,2)    // move o ponteiro pelo arquivo até o fim para pegar o tamanho
fseek(h1,0,0)                     // volta para o início
h4:= space(tamanho)         // declara variável para receber o conteúdo do arquivo
fread( h1, @h4, tamanho ) // faz a leitura do conteúdo do arquivo jogando-a na variável de memória
fclose( h1 )                        // fecha o arquivo
h4 = HB_Base64Encode( h4, tamanho )   // converte o conteúdo do arquivo em base64
cSql:= 'update produtos set imagem = ' + sr_cdbvalue(h4) + ' where codigo = ' + sr_cdbvalue(xCod) // salva no BD


Para restaurar
cSql:= 'select imagem from produtos where codigo='+sr_cdbvalue(xCod) // pega o conteúdo do campo blob
sJPG:= { HB_Base64Decode( iJPG[1,1] )                                                 // decodifica o conteúdo do campo blob (iJPG[1,1] é o resultado da sentença SQL)
hJPG:= fcreate(GETENV("temp")+"\"+alltrim(str(xCod))+'.jpg',0)              // cria um arquivo
fwrite(hJPG, sJPG[1] )                                                                          // carrega o conteúdo do campo no arquivo
fclose(hJPG)                                                                                         // fecha o arquivo, o deixando ponto para uso
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes

Gravar ARQUIVO BINARIO em campo BLOB

Mensagempor Shark » 20 Mai 2018 06:12

Obrigado pela dica Júnior. Funcionou perfeitamente. SharkAbraços!
Shark
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 28
Data de registro: 25 Set 2017 21:42
Cidade/Estado: Brasília - DF
Curtiu: 5 vezes
Mens.Curtidas: 3 vezes

Gravar ARQUIVO BINARIO em campo BLOB

Mensagempor tonicm » 05 Jun 2019 18:51

Obrigado pela dica.

Não consegui colocar a funcionar porque falta a função sr_cdbvalue.
O que faz essa função e onde a posso encontrar?
tonicm
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 08 Mar 2016 21:51
Cidade/Estado: Porto
Curtiu: 12 vezes
Mens.Curtidas: 1 vez

Gravar ARQUIVO BINARIO em campo BLOB

Mensagempor alaminojunior » 06 Jun 2019 14:56

O que faz essa função e onde a posso encontrar?


Essa função transforma qualquer dado num formato aceitável para as query´s numa sentença SQL, faz parte da SQLRDD.
Utilize qualquer outra que você já use para montar/tratar as sentenças se for o seu caso.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar de usuário

alaminojunior
Colaborador

Colaborador
 
Mensagens: 1689
Data de registro: 16 Dez 2005 20:26
Cidade/Estado: Ubatuba - SP
Curtiu: 27 vezes
Mens.Curtidas: 11 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro