oribeiro Posted August 31, 2018 Report Share Posted August 31, 2018 Pessoal, Eu passei a manhã toda estudando os tópicos do fórum relacionado a gravar imagem no MySql mas não consegui chegar num acordo. Eu tenho as imagens dos produtos em arquivos no disco e quero gravá-las dentro de um campo no banco de dados e depois recuperá-las novamente mas não estou conseguindo. 1) Qual é o tipo de campo que eu crio? LONGBLOB? 2) Como gravar os arquivos das imagens para o campo do banco? MemoRead( cImagem )? 3) Como recuperar a imagem do campo e mostrar numa tela do Fivewin? 4) Como recuperar a imagem do banco dentro de uma página web (html ou php) ? Está complicado! Risos Quote Link to comment Share on other sites More sharing options...
Marca Posted August 31, 2018 Report Share Posted August 31, 2018 Olá Oscar Eu faço da seguinte maneira No meu caso uso MedimBlob Uma tabela somente para imagens Exemplo no cliente Quando entro pra editar busco a imagem do banco IF !Empt(f_Foto) .OR. !Empt(f_Foto2) IF GeraQuery( "SELECT FOTO_CLI1,FOTO_CLI2 FROM imagens WHERE CD_CLIENTE = " + ANY2SQL(oCodClie) ,_CodEmp,.F.,,,"tImagens",.T.) lTemFoto := .T. IF !File(f_Foto) MEMOWRIT(f_Foto,tImagens->Foto_Cli1) ENDIF IF !File(F_Foto2) MEMOWRIT(f_Foto2,tImagens->Foto_Cli2) ENDIF FechaSql ( "tImagens" ) ENDIF ENDIF Qdo Saio da edição Caso altere algo IF lTemFoto GravaBase("DELETE FROM imagens WHERE cd_cliente = " + ANY2SQL( oCodClie ), "Imagens") SqlImg := "INSERT INTO imagens (cd_cliente,foto_cli1,foto_cli2) VALUES (" +; ANY2SQL( oCodClie ) + [,] +; ANY2SQL(MemoRead( f_Foto )) + [,] +; ANY2SQL(MemoRead( f_Foto2 )) + ")" GravaBase(SqlImg,"imagens") ELSE IF !Empt(f_Foto) .OR. !Empt(f_Foto2) SqlImg := "INSERT INTO imagens (cd_cliente,foto_cli1,foto_cli2) VALUES (" +; ANY2SQL(oCodClie) + [,] +; ANY2SQL(MemoRead( f_Foto )) + [,] +; ANY2SQL(MemoRead( f_Foto2 )) + ")" GravaBase(SqlImg,"imagens") ENDIF ENDIF Espero que ajude Quote Link to comment Share on other sites More sharing options...
miragerr Posted August 31, 2018 Report Share Posted August 31, 2018 Ola, Bom dia Eu tenho 2 funçoes para isso: Function Image2SQL( cFile ) ********************************************************************************************************* ** ** Prepara imagem para SQL Return StrToHex(MemoRead(cFile)) Function SQL2Image( cSQL ) ********************************************************************************************************* ** ** Prepara imagem do SQL para mostrar Return HexToStr( cSQL ) Uso da seguinte forma para inserir cLocal_Nova := CurDrive()+":\"+Curdir()+"\newfile.jpg" "INSERT INTO estoque_imagem ( arimagem ) VALUES( "+SR_EscapeString( Image2SQL(cLocal_Nova), CONNECT_MYSQL )+ ")" Para recuperar e motrar a imagem oImagemOfFundo:LoadFromMemory( SQL2Image( campo_da_imagem ) ) oImagemOfFundo:Refresh() Espero ter ajudado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 1, 2018 Author Report Share Posted September 1, 2018 Ola, Bom dia Eu tenho 2 funçoes para isso: Function Image2SQL( cFile ) ********************************************************************************************************* ** ** Prepara imagem para SQL Return StrToHex(MemoRead(cFile)) Function SQL2Image( cSQL ) ********************************************************************************************************* ** ** Prepara imagem do SQL para mostrar Return HexToStr( cSQL ) Uso da seguinte forma para inserir cLocal_Nova := CurDrive()+":\"+Curdir()+"\newfile.jpg" "INSERT INTO estoque_imagem ( arimagem ) VALUES( "+SR_EscapeString( Image2SQL(cLocal_Nova), CONNECT_MYSQL )+ ")" Para recuperar e motrar a imagem oImagemOfFundo:LoadFromMemory( SQL2Image( campo_da_imagem ) ) oImagemOfFundo:Refresh() Espero ter ajudado. Obrigado pelas orientações. Pelo que entendi, usando StrToHex() / HexToStr() é possível ler o conteúdo do campo diretamente para a memória, sem a necessidade de recriar a imagem no disco. Parece perfeito! Vou utilizar aqui. A instrução FW_ValtoSQL() faz o mesmo que esses comandos? Apenas uma dúvida, qual é o tipo do campo no banco que você criou? MediumBlob também ou é outro tipo? Quote Link to comment Share on other sites More sharing options...
miragerr Posted September 1, 2018 Report Share Posted September 1, 2018 Ola, Bom dia Depende do tamanho a imagem, eu uso o BLOB normal. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 2, 2018 Author Report Share Posted September 2, 2018 Obrigado Jackson Vou copiar o seu modelo e estudar como abrir a imagem no site com html ou php. Um abraço. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.