Jump to content
Fivewin Brasil

COMO GRAVAR FOTOGRAFIA (BMP/JPEG) NO MYSQL


marcio1361303176

Recommended Posts

Nunca trabalhei com isso, mais acho que você pode usar um campo memo para gravar o arquivo.

No DBF é campo memo, mais quando você passa para o MySql fica como campo blob ou text. Cabe 65k 65535 (2^16 - 1)

Ou usar um MEDIUMTEXT MEDIUMBLOB que cabe mais ainda 16777215 (2^24 - 1)

E se for umas imagens absurdamente grandes, você pode usar ainda o tipo LONGBLOB, LONGTEXT cabe 4294967295 ou 4G (2^32 - 1) que é acho que quase 4gb.

O Ideal é o blob mesmo, e no caso de alguns bmps serem grandes usar o mediunblob

Você carrega a imagem e salva ela como texto, ae quando for usar salva ela no disco como um arquivo temporario.

V Encontro - Eu fui e vou de novo.

Carlson A. Soares - SP - SP

email: soares_289@hotmail.com

FiveWin 7.05 - xHarbour 0.99.61 - SQLRDD

São Paulo - SP

Link to comment
Share on other sites

Olá,

Tente assim:

id=code>
id=code>

[]s,

Evandro G. de Paula

Curvelo - MG

evandro@skillnet.com.br (Escr. - na Cidade)

imortal@skillnet.com.br (Res. - na Roça)

FWH 2.6+PellesC+MyMake+xHarbour.org 0.99.5+SqlLib

I PREPARATÓRIO PARA O VI ENCONTRO FIVEWIN - JULHO/2008 - CURVELO - MG

Link to comment
Share on other sites

  • 6 months later...

SqlImg := "INSERT INTO imagens (cd_produto,foto_prod) VALUES (" +;

ANY2SQL( f_Cod_Est ) + [,] +;

ANY2SQL( MemoRead( f_Foto ) ) + ")"

Assim vc grava

e da maneira q. o Evandro enviou vc le oq. foi gravado

um abraço

Marcelo Ferro

Petrópolis - Rj

Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS

Link to comment
Share on other sites

citação:

SqlImg := "INSERT INTO imagens (cd_produto,foto_prod) VALUES (" +;

ANY2SQL( f_Cod_Est ) + [,] +;

ANY2SQL( MemoRead( f_Foto ) ) + ")"

Assim vc grava

e da maneira q. o Evandro enviou vc le oq. foi gravado

um abraço

Marcelo Ferro

Petrópolis - Rj

Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS


id=quote>id=quote>

Perdao Marcio oq. eu queria dizer é o seguinte

Tive um problema aqui com imagen q. deletar a imagem e depois gravar novamente

SqlImg := "DELETE FROM imagens WHERE cd_produto = " + ANY2SQL( f_Cod_Est )

exatamente igual a maneira do Evandro mas na edição desta imagem vc tem q. abrir com

SqlImagem := "SELECT FOTO_PROD FROM imagens WHERE cd_produto = " + ANY2SQL(f_Cod_Est)

Use SQL SqlImagem Alias "tImagens" NEW VIA [MYSQL] // INTO nConecOnL

IF !File(F_Foto)

MEMOWRIT(F_Foto,tImagens->Foto_Prod)

ENDIF

CLOSE tImagens

um abraço

Marcelo Ferro

Petrópolis - Rj

Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS

Link to comment
Share on other sites

Amigos, estou fazendo assim


///=============================================================================

/// Grava o Cadastro de EMPRESA

///=============================================================================

FUNCTION GRAVA_EMPRESA()

DBSELECTAREA( "EMPRESA" )

IF T_OPERACAO_EMPRESA == "I"

EMPRESA->(SqlFilter( "" ))

DBSELECTAREA( "EMPRESA" )

EMPRESA->( OrdSetFocus( 01 ) )

DBGOBOTTOM()

T_CODIGO := EMPRESA->CODIGO + 1

APPEND BLANK

ENDIF

IF T_CODIGO != 0

RLOCK()

REPLACE EMPRESA->CODIGO WITH T_CODIGO

REPLACE EMPRESA->NOMEMP WITH T_NOME

REPLACE EMPRESA->ENDEMP WITH T_ENDERECO

REPLACE EMPRESA->NUMERO WITH T_NUMERO

REPLACE EMPRESA->BAIEMP WITH T_BAIRRO

REPLACE EMPRESA->CEPEMP WITH T_CEP

REPLACE EMPRESA->CIDEMP WITH T_CIDADE

REPLACE EMPRESA->ESTEMP WITH T_ESTADO

REPLACE EMPRESA->FONEMP WITH T_TEFONE

REPLACE EMPRESA->FAXEMP WITH T_FAX

REPLACE EMPRESA->CGCEMP WITH T_CNPJ

REPLACE EMPRESA->INSEMP WITH T_INSCRICAO

REPLACE EMPRESA->OBS_01 WITH T_OBSERVACAO

REPLACE EMPRESA->SEM_SALDO WITH T_VDE_SEM_SALDO

REPLACE EMPRESA->JURO_MES WITH T_JUROS

REPLACE EMPRESA->E_MAIL WITH T_EMAIL_

REPLACE EMPRESA->FANTASIA WITH T_FANTASIA

REPLACE EMPRESA->ATIVIDADE WITH VAL(SUBSTR(T_ATIVIDADE,01,02))

REPLACE EMPRESA->OBS_OS WITH T_EMP_OBS_OS

REPLACE EMPRESA->CONTATO WITH T_RESPONSAVEL

REPLACE EMPRESA->SER_ECF WITH T_NUM_SERECF

REPLACE EMPRESA->PZ_GARANT WITH T_GRANTIA_OS

REPLACE EMPRESA->PG_COM WITH SUBSTR(T_PAG_COMISSAO,01,01)

REPLACE EMPRESA->SEM_SALDO WITH SUBSTR(T_VDE_SEM_SALDO,01,01)

Sei que está errado, mas teria como Exemplificar no meu código...

REPLACE EMPRESA->LOGOMARCA WITH T_LOGO_EMP

id=red>

UNLOCK

COMMIT

ELSE

MsgStop( "Não é Possível Gravar com Código Zerado ! " + chr(13) +;

" ","...:: Erro ::...")

ENDIF

T_OPERACAO_EMPRESA := "A"

RETURN .T.

id=code>

id=code>

masterservicevrb@gmail.com

FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0

Link to comment
Share on other sites

Marcio eu não costumo gravar fotos em arquivos, é melhor você criar uma numeração para as fotos e salvar em uma pasta no formato JPG mesmo.

Eu sempre fiz assim com os aplicativos que criava e acho até mais leve.

Washington Guimarães

Clipper 5.2 Lib 5.3 - Blinker 7.0 FWH 804, xHarbour 1.0.0 (Org)

Link to comment
Share on other sites

Olá

Obrigado, mas em um Ambiente de Rede teria que Mapear o Servidor, por Exemplo

g:\PASTA_SISTEMA\FOTOS\FOTO01.JPEG

Sendo no banco Ficaria mais Viavel.

Até para Evitar erros, iria cirar uma tabela só com Codigo e a Foto...

Seria Uma Tabela Desvinculada da Tabela de Clientes Por Exemplo....

Obrigado a Todos

masterservicevrb@gmail.com

FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0

Editado por - marcio on 08/07/2008 19:51:31

Link to comment
Share on other sites

Marcio sao +- passos dados e observe q. eu guardo as fotos em um banco somente p. fotos

SuaFunction()

LOCAL f_Foto,;

oImage

f_Foto := Seubanco->NomeDaFoto

IF !Empt(f_Foto)

SqlImagem := "SELECT FOTO_PROD FROM imagens WHERE cd_produto = " + ANY2SQL(f_Cod_Est)

Use SQL SqlImagem Alias "tImagens" NEW VIA [MYSQL]

IF RecCount() > 0

IF !File(F_Foto) // Para evitar regravar a foto

MEMOWRIT(F_Foto,tImagens->Foto_Prod)

ENDIF

ENDIF

CLOSE tImagens

DBSelectArea("Produto")

ELSE

f_Foto := oPub:wPathBmp + "SEMFOTO.JPG" // é uma imagem de sem foto

ENDIF

DEFINE DIALOG oEdt RESOURCE 'suatela' TITLE seutitulo FONT suafonte

REDEFINE IMAGE oImage ID 413 OF oEdt FILENAME f_Foto Scroll

assim vc mostra a foto

ACTIVATE DIALOG oEdt CENTERED

e assim vc grava no banco

SqlImg := "INSERT INTO imagens (cd_produto,foto_prod) VALUES (" + ANY2SQL(f_Cod_Est ) + [,] +;

ANY2SQL( MemoRead( f_Foto ) ) + ")"

Espero q. ajude

Uma outra coisa é q. é aconselhavel q. o campo sja medimblob

um abraço

Marcelo Ferro

Petrópolis - Rj

Fwh7.04/xHarbour 99.71/SqlLib /xMate/WS

Link to comment
Share on other sites

Amigo,

ainda anão está gravando


*---------------------------------------

FUNCTION GRAVAR_FOTO()

LOCAL f_Foto,;

oImage

f_Foto := T_LOGO_EMP

IF !Empt(f_Foto)

SqlImagem := "SELECT logo_empresa FROM LOGOMARCA WHERE CODIGO_EMPRESA = " + ANY2SQL(T_CODIGO)

Use SQL SqlImagem Alias "tImagens" NEW VIA [MYSQL]

IF RecCount() > 0

IF !File(F_Foto) // Para evitar regravar a foto

MEMOWRIT(F_Foto,tImagens->LOGOMARCA)

ENDIF

ENDIF

*SqlImg := "INSERT INTO logo_empresa (CODIGO_EMPRESA,LOGOMARCA) VALUES (" + ANY2SQL(T_CODIGO ) + [,] +;

*ANY2SQL( MemoRead( f_Foto ) ) + ")"

* SQL EXECUTE “INSERT INTO logo_empresa(CODIGO_EMPRESA,LOGOMARCA) “+;

* “VALUES (ANY2SQL(T_CODIGO ), ANY2SQL( MemoRead( f_Foto ) ))“

**SQLExecute( SqlImg, nMySQL )

id=red>

CLOSE tImagens

DBSelectArea("EMPRESA")

ELSE

*f_Foto := oPub:wPathBmp + "SEMFOTO.JPG" // é uma imagem de sem foto

ENDIF

RETURN .T.

id=code>

id=code>

Tentei das 03 modos acima e nada

Editado por - marcio on 09/07/2008 17:27:48

Link to comment
Share on other sites

tente converter para hexadecimal e gravar normalmente em um campo. Eu faço uso com templates de digitais de biometria.

Exemplo:

cImagem := Memoread("imagem.jpg")

cImgGrv := StrToHex(cImagem)

// aqui vc pode colocar o comando para gravar, usando replace mesmo em um campo MEMO

Para restaurar:

cImagem := HexToStr(TABELA->CAMPO)

Abraço,

Eduardo Motta

(as funcoes HexToStr() e StrToHex() são do (x)Harbour)

Link to comment
Share on other sites

Marcio

Eu particularmente não gosto de jogar imagem no banco, mas tudo bem.

Só quero lhe lembrar um detalhe.

Com imagem o banco vai crescer bastante e o seu tempo de backup tambem será muito maior.

Antes de implementar isso, faça um teste de bkp salvando e retornando para vc ver se fica legal.

logo.gif

Link to comment
Share on other sites

Olá amigo,

O campo é

`LOGOMARCA` mediumblob COMMENT 'logomarca da empresa'


///=============================================================================

/// Grava o Cadastro de EMPRESA

///=============================================================================

FUNCTION GRAVA_EMPRESA()

DBSELECTAREA( "EMPRESA" )

IF T_OPERACAO_EMPRESA == "I"

EMPRESA->(SqlFilter( "" ))

DBSELECTAREA( "EMPRESA" )

EMPRESA->( OrdSetFocus( 01 ) )

DBGOBOTTOM()

T_CODIGO := EMPRESA->CODIGO + 1

APPEND BLANK

ENDIF

IF T_CODIGO != 0

RLOCK()

REPLACE EMPRESA->CODIGO WITH T_CODIGO

REPLACE EMPRESA->NOMEMP WITH T_NOME

REPLACE EMPRESA->ENDEMP WITH T_ENDERECO

REPLACE EMPRESA->NUMERO WITH T_NUMERO

REPLACE EMPRESA->BAIEMP WITH T_BAIRRO

REPLACE EMPRESA->CEPEMP WITH T_CEP

REPLACE EMPRESA->CIDEMP WITH T_CIDADE

REPLACE EMPRESA->ESTEMP WITH T_ESTADO

REPLACE EMPRESA->FONEMP WITH T_TEFONE

REPLACE EMPRESA->FAXEMP WITH T_FAX

REPLACE EMPRESA->CGCEMP WITH T_CNPJ

REPLACE EMPRESA->INSEMP WITH T_INSCRICAO

REPLACE EMPRESA->OBS_01 WITH T_OBSERVACAO

REPLACE EMPRESA->SEM_SALDO WITH T_VDE_SEM_SALDO

REPLACE EMPRESA->JURO_MES WITH T_JUROS

REPLACE EMPRESA->E_MAIL WITH T_EMAIL_

REPLACE EMPRESA->FANTASIA WITH T_FANTASIA

REPLACE EMPRESA->ATIVIDADE WITH VAL(SUBSTR(T_ATIVIDADE,01,02))

REPLACE EMPRESA->OBS_OS WITH T_EMP_OBS_OS

REPLACE EMPRESA->CONTATO WITH T_RESPONSAVEL

REPLACE EMPRESA->SER_ECF WITH T_NUM_SERECF

REPLACE EMPRESA->PZ_GARANT WITH T_GRANTIA_OS

REPLACE EMPRESA->PG_COM WITH SUBSTR(T_PAG_COMISSAO,01,01)

REPLACE EMPRESA->SEM_SALDO WITH SUBSTR(T_VDE_SEM_SALDO,01,01)

Sei que está errado, mas teria como Exemplificar no meu código...

REPLACE EMPRESA->LOGOMARCA WITH T_LOGO_EMP

UNLOCK

COMMIT

ELSE

MsgStop( "Não é Possível Gravar com Código Zerado ! " + chr(13) +;

" ","...:: Erro ::...")

ENDIF

T_OPERACAO_EMPRESA := "A"

RETURN .T.

id=code>id=code>

Obrigado

masterservicevrb@gmail.com

FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0

Link to comment
Share on other sites

que preguiça hein meu amigo...

segue o código:

T_LOGO_EMP := MemoRead("IMAGEM.JPG")

T_LOGO_EMP := Str2Hex(T_LOGO_EMP)

///=============================================================================/// Grava o Cadastro de EMPRESA///=============================================================================FUNCTION GRAVA_EMPRESA() DBSELECTAREA( "EMPRESA" ) IF T_OPERACAO_EMPRESA == "I" EMPRESA->(SqlFilter( "" )) DBSELECTAREA( "EMPRESA" ) EMPRESA->( OrdSetFocus( 01 ) ) DBGOBOTTOM() T_CODIGO := EMPRESA->CODIGO + 1 APPEND BLANK ENDIF IF T_CODIGO != 0 RLOCK() REPLACE EMPRESA->CODIGO WITH T_CODIGO REPLACE EMPRESA->NOMEMP WITH T_NOME REPLACE EMPRESA->ENDEMP WITH T_ENDERECO REPLACE EMPRESA->NUMERO WITH T_NUMERO REPLACE EMPRESA->BAIEMP WITH T_BAIRRO REPLACE EMPRESA->CEPEMP WITH T_CEP REPLACE EMPRESA->CIDEMP WITH T_CIDADE REPLACE EMPRESA->ESTEMP WITH T_ESTADO REPLACE EMPRESA->FONEMP WITH T_TEFONE REPLACE EMPRESA->FAXEMP WITH T_FAX REPLACE EMPRESA->CGCEMP WITH T_CNPJ REPLACE EMPRESA->INSEMP WITH T_INSCRICAO REPLACE EMPRESA->OBS_01 WITH T_OBSERVACAO REPLACE EMPRESA->SEM_SALDO WITH T_VDE_SEM_SALDO REPLACE EMPRESA->JURO_MES WITH T_JUROS REPLACE EMPRESA->E_MAIL WITH T_EMAIL_ REPLACE EMPRESA->FANTASIA WITH T_FANTASIA REPLACE EMPRESA->ATIVIDADE WITH VAL(SUBSTR(T_ATIVIDADE,01,02)) REPLACE EMPRESA->OBS_OS WITH T_EMP_OBS_OS REPLACE EMPRESA->CONTATO WITH T_RESPONSAVEL REPLACE EMPRESA->SER_ECF WITH T_NUM_SERECF REPLACE EMPRESA->PZ_GARANT WITH T_GRANTIA_OS REPLACE EMPRESA->PG_COM WITH SUBSTR(T_PAG_COMISSAO,01,01) REPLACE EMPRESA->SEM_SALDO WITH SUBSTR(T_VDE_SEM_SALDO,01,01)Sei que está errado, mas teria como Exemplificar no meu código... REPLACE EMPRESA->LOGOMARCA WITH T_LOGO_EMP UNLOCK COMMIT ELSE MsgStop( "Não é Possível Gravar com Código Zerado ! " + chr(13) +; " ","...:: Erro ::...") ENDIF T_OPERACAO_EMPRESA := "A"RETURN .T.

Link to comment
Share on other sites

Amigo, agora sim funcionou, gravou e está jogando de volta no diretorio extraindo do banco.. Blz mesmo.

Agora só pra fechar com chave de ouro.

Não estou conseguindo exibir ela direto do banco

REDEFINE IMAGE oT_LOGO_EMP var T_LOGO_EMP ID 4001 OF oFld_EMPRESA:aDialogs[ 1 ] FILE T_LOGO_EMP adjust UPDATE

Só consigo, se ela estiver no Diretorio

Obrigado e desculpa pela BURRICE....

masterservicevrb@gmail.com

FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...