marcio1361303176 Posted January 7, 2008 Report Share Posted January 7, 2008 Estou migrando um sistema de DBF para MYSQL, porem preciso gravar as Fotos no na tabela. como fazer Amigos... masterservicevrb@gmail.com Graças ao Marcelo de MUIRIAÉ-MG FWH 2.8 xh. + xDev + dbf Cdx + rpv Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted January 7, 2008 Author Report Share Posted January 7, 2008 Estou migrando um sistema de DBF para MYSQL, porem preciso gravar as Fotos no na tabela. como fazer Amigos... masterservicevrb@gmail.com Graças ao Marcelo de MUIRIAÉ-MG FWH 2.8 xh. + xDev + dbf Cdx + rpv Quote Link to comment Share on other sites More sharing options...
soares289 Posted January 7, 2008 Report Share Posted January 7, 2008 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 Quote Link to comment Share on other sites More sharing options...
evandro Posted January 7, 2008 Report Share Posted January 7, 2008 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 Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 7, 2008 Author Report Share Posted July 7, 2008 Amigo, não consegui gravar a imagem masterservicevrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 Quote Link to comment Share on other sites More sharing options...
Marca Posted July 7, 2008 Report Share Posted July 7, 2008 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 Quote Link to comment Share on other sites More sharing options...
Marca Posted July 7, 2008 Report Share Posted July 7, 2008 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 Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 8, 2008 Author Report Share Posted July 8, 2008 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 Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 8, 2008 Author Report Share Posted July 8, 2008 GALERA, DESCULPA MINHA FALTA DE EXPERIENCIA masterservicevrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 Quote Link to comment Share on other sites More sharing options...
wmsoft Posted July 8, 2008 Report Share Posted July 8, 2008 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) Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 8, 2008 Author Report Share Posted July 8, 2008 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 Quote Link to comment Share on other sites More sharing options...
Marca Posted July 9, 2008 Report Share Posted July 9, 2008 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 Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 9, 2008 Author Report Share Posted July 9, 2008 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 9, 2008 Report Share Posted July 9, 2008 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) Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 11, 2008 Author Report Share Posted July 11, 2008 dá erro Executando: ILINK32 @B32.BC Turbo Incremental Link 5.00 Copyright © 1997, 2000 Borland Error: Unresolved external '_HB_FUN_HEXTOSTR' referenced from OBJ\CD_EMPRESA.OBJ O que devo colocar no projeto Obrigado Editado por - marcio on 11/07/2008 12:05:26 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 11, 2008 Report Share Posted July 11, 2008 a versao do seu (x)harbour deve estar desatualizada. Use as do fivewin mesmo: cStrHex := Str2Hex(cStr) e Hex2Str(cStrHex) qualquer duvida veja no samples do fivewin o exemplo de uso no fonte testhex2.prg Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 12, 2008 Author Report Share Posted July 12, 2008 nada feito... Não grava masterservicevrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 Quote Link to comment Share on other sites More sharing options...
jcleoner Posted July 12, 2008 Report Share Posted July 12, 2008 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. Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 12, 2008 Author Report Share Posted July 12, 2008 Amigo, quanto ao Tamanho, não tem problema não... masterservicevrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 13, 2008 Report Share Posted July 13, 2008 Qual o tipo do campo que voce está gravando? Poste seu codigo novamente. Editado por - emotta on 13/07/2008 23:02:12 Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 14, 2008 Author Report Share Posted July 14, 2008 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 14, 2008 Report Share Posted July 14, 2008 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. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 14, 2008 Report Share Posted July 14, 2008 Para visualizar a imagem depois: cLogo := Hex2Str(AllTrim(EMPRESA->LOGOMARCA)) nH := fCreate("imagem_temp.jpg") fWrite(nH,cLogo) fClose(nH) // pronto, imagem criada. Quote Link to comment Share on other sites More sharing options...
marcio1361303176 Posted July 15, 2008 Author Report Share Posted July 15, 2008 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 Polirep 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 15, 2008 Report Share Posted July 15, 2008 nao consegue porque nao dá. Vc deve gerar um arquivo e exibir a partir do arquivo. 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.