marcioe Posted December 3, 2013 Report Share Posted December 3, 2013 Amigos, estou tendo problemas para gravar foto de clientes em banco de dados. O problema ocorre devido ao tamanho da imagem, que é obtida de uma WEBCAM. Vejam a estrutura da tabela Sempre ante gravar eu deleto a foto do cliente caso exista ESTRANHO DEMAIS... ABAIXO O CÓDIGO DE GRAVAR A FOTO NA TABELA *------------------------------------------------------------------------------- * Gravar a foto do cliente *------------------------------------------------------------------------------- FUNCTION INSERE_APAGA_FOTO_CLIENTE(T_OPERACAO_CLIENTES) T_ID_FOTO := 0 Cursor("SQL") IF SELECT("foto_cliente") != 0 foto_cliente->(DbCloseArea()) ENDIF cQuery:='select * from foto_cliente where CODIGO_CLIENTE = ' + TRANSFORMA_SQL(T_CODI_CLIENTE,"N",06,0) + ' ORDER BY ID_FOTO DESC' use sql cQuery alias "foto_cliente" new via 'MYSQL' foto_cliente->( DbGoTop()) T_ID_FOTO := foto_cliente->ID_FOTO IF LEN( T_FOTOGRAFIA) != 0 BEGIN TRANSACTION cQuery_Mtabela := 'DELETE from foto_cliente where CODIGO_CLIENTE = ' + TRANSFORMA_SQL(T_CODI_CLIENTE,"N",06,0) COMITAR_DADOS_SQL(cQuery_Mtabela) END TRANSACTION * TENTEI CNVERTENDO ARA HEXA, MAS MESMO ASSIM DÁ ERRO *T_FOTOGRAFIA := StrToHex(MemoRead(DRIVE_TR+"\"+CURDIR() + "\TMP_IMG.JPG")) IF SELECT("foto_cliente") != 0 foto_cliente->(DbCloseArea()) ENDIF BEGIN TRANSACTION cQuery_Mtabela := "INSERT INTO foto_cliente ( " cQuery_Mtabela := cQuery_Mtabela + " CODIGO_CLIENTE " cQuery_Mtabela := cQuery_Mtabela + ",DATA_FOTO " cQuery_Mtabela := cQuery_Mtabela + ",FOTO " cQuery_Mtabela := cQuery_Mtabela + " ) VALUES ( " cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(T_CODI_CLIENTE,"N",06,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(DATE(),"D",08,0) + "," cQuery_Mtabela := cQuery_Mtabela + ANY2SQL( MemoRead( ALLTRIM(T_FOTOGRAFIA) ) ) cQuery_Mtabela := cQuery_Mtabela + " )" COMITAR_DADOS_SQL(cQuery_Mtabela) END TRANSACTION ENDIF RELEASE T_FOTOGRAFIA, cFile, IMG_FOTO T_FOTOGRAFIA := SPACE(200) cFile := SPACE(200) IMG_FOTO := SPACE(200) HB_GCAll(.T.) RETURN .T. Quote Link to comment Share on other sites More sharing options...
CIACPD Posted December 3, 2013 Report Share Posted December 3, 2013 Olá Márcio, Quando passei por um problema semelhante o que eu fiz foi separar a gravação da foto do cliente, produto .... pode ver que é semelhante ao seu comando sqlexecute("UPDATE cadcli SET FOTO = " + Any2Sql( memoread('C:\CiaLoja\foto_cli\CL'+ncodcli+'.JPG') ) + " where cadcli.CODCLI='"+ncodcli+"'") Daniel Segura Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 3, 2013 Author Report Share Posted December 3, 2013 Amigo, obrigado por responder, mas eu já estou fazendo isso até melhor ainda, pois a tabela de foto é separada do cadastro do cliente E eu sempre apago a foto antiga para gravar uma nova. pelo que percebi está relacionado com o tamanho do arquivo que é de 900 KB (921.654 bytes) 640x480 Se for uma imagem pequena dá certo. Porem esse cliente comprou uma web de alta qualidade justamente para isso. Pois ele quer ter qualidade na foto dos seus clientes. Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted December 3, 2013 Report Share Posted December 3, 2013 Marcio, o problema é a variável do MYSQL max_allowed_packet se o tamanho do pacote enviado ultrapassar esse valor (tamanho da imagem MAIS valor dos outros campos), você não conseguirá gravar o registro valor do pacote = tamanho do insert max_allowed_packet = valor em bytes (se não me engano) Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 3, 2013 Author Report Share Posted December 3, 2013 MAS COMO CORRIGIR ISSO ENTÃO Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted December 4, 2013 Report Share Posted December 4, 2013 Uma coisa você sempre tem que fazer: - Verificar o valor de max_allowed_packet e ver se o tamanho da imagem enviada é menor que este valor, caso NÃO seja, inserir mensagem de bloqueio no sistema. Outra coisa que se tem que fazer, talvez, seja aumentar o valor dessa variável, pois creio que o padrão seja apenas 1Mb. Aumentando o tamanho dela, não significa que não terá que fazer o teste acima. Para alterar o valor dela (a variável), tem várias formas: http://stackoverflow.com/questions/8062496/how-to-change-max-allowed-packet-size Quote Link to comment Share on other sites More sharing options...
ecmsoft Posted December 4, 2013 Report Share Posted December 4, 2013 Será que se você compactar o arquivo imagem (ZIP), depois gravar no BD. Na hora de ler, descompacta. Talvez o tamanho diminua. Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 4, 2013 Author Report Share Posted December 4, 2013 Gente deve ter alguma outra solução, pois imagina uma loja virtual, uma empresa que trabalhe com fotos. Não existe um "comando sql para compactar a imagem, depois descompactar a imagem) Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted December 4, 2013 Report Share Posted December 4, 2013 Márcio, você leu o que escrevi? É só você mudar o limite da variável, não precisa de malabarismo nenhum pra isso... Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 4, 2013 Author Report Share Posted December 4, 2013 eu sei, mas o foda é isso, mas estou testando... Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted December 4, 2013 Report Share Posted December 4, 2013 (edited) Faz isso aqui Márcio, e depois me fala se deu certo. SET @maximo_em_mb:=20; SET global MAX_ALLOWED_PACKET:= GREATEST( 1024*1024*@maximo_em_mb , @@NET_BUFFER_LENGTH ) ; caso NÃO dê certo, fala o tamanho em mega da sua imagem veja que o primeiro SET é pra você definir qual será o máximo em mega bytes que suas imagens irão ter obs.: fiz um edit, veja o 1024*1024 : fiz isso para você converter mega bytes para kbytes para bytes... Edited December 4, 2013 by Erciley Junior Quote Link to comment Share on other sites More sharing options...
vailtom Posted December 9, 2013 Report Share Posted December 9, 2013 Olá, Embora o autor do post não tenha informado a mensagem de erro gerada, este tipo de comportamento é característico de quando o banco de dados não está configurado para trabalhar com buffers de dados muito longos. Se for isto mesmo - eu também acho que é - o Erciley está correto e basta configurar o banco adequadamente para sanar o problema. Em caso de dúvidas, efetuar uma busca na página do MySQL a respeito do problema ou até mesmo no Google pois esquecer de configurar isto é uma falha muito comum. Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 10, 2013 Author Report Share Posted December 10, 2013 o erro está aqui. http://fivewin.com.br/index.php?/topic/20719-problemas-com-campo-foto/?hl=%2Bgravar+%2Bimagem#entry40940 'este problema ocorre cliente, tela capturada na empresa do CLIENTE.' Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted December 10, 2013 Report Share Posted December 10, 2013 Erro de Lost Connection pode ser várias "coisas". Geralmente ocorre quando uma instrução fica na fila do banco (o seu insert por exemplo), e por algum motivo, a tabela está "locada" e aí ocorre o erro de time out. Creio que pode ser devido o tamanho da imagem, e blablabla. Há variável para controlar o time out também, para aumentar o tempo de espera. Procure aí: variável time out mysql Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted December 10, 2013 Report Share Posted December 10, 2013 1 - Pela imagem da pra ver a foto, e esta capturando 648x480, um exagero pra meu gosto. 2 - Passei pro márcio, uma forma de redimensionar a imagem, desta forma ocupando menor espaço em BD. Sem resposta dele até o presente momento. Como quem cala...... Quote Link to comment Share on other sites More sharing options...
marcioe Posted December 10, 2013 Author Report Share Posted December 10, 2013 Sergio A. Oliveira eu vou no cliente para testar essa semana.No meu equipamento funcionava mesmo sem a rotina que voce me mandou. o problema é nesse cliente que ele quer a foto com qualidade... mas mesmo assim muito obrigado mesmo por me ajudar. 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.