PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → WX - Imagem no Banco de dados MS SQL SERVER e uso em aplicativos da PCSOFT
WX - Imagem no Banco de dados MS SQL SERVER e uso em aplicativos da PCSOFT
Started by BOLLER, Oct., 14 2016 6:23 PM - No answer
Registered member
3,659 messages
Popularité : +175 (223 votes)
Posted on October, 14 2016 - 6:23 PM
Bom dia pessoal,

Primeiramente, gostaria de agradecer a todos que me ajudaram, não vou citar nomes para não cometer a gafe de esquecer de alguém porque pedi pra muita gente rsrsr.

Estava fazendo um projeto que se conectava com uma base de dados MSSQL através de uma conexão ODBC, fiz uma query onde a mesma povoava o meu LOOPER e meu FORM perfeitamente, até o momento que eu precisei inserir uma IMAGEM trazida do meu Banco de dados.





O Tipo do campo é IMAGE





Então toda vez que eu fazia a leitura do campo imagem o resultado que me retornava era algo como: 0xFFD8FFE000104A4649460001010000010.........
Até que em conversa com o MESTRE ADRIANO BOLLER, ele disse que isso realmente nunca iria funcionar, então ele me pediu para fazer um Teste:

- Criar uma aplicação no Windev para ler esse campo imagem,
- Criptografar a imagem com a função Crypt
- Salvar em outra coluna da mesma tabela com mesma imagem só que agora criptografada.

Voltando ao Windev Mobile, fazer a mesma leitura no banco de dados, só que agora ao invés de pegar do campo imagem original, pegar do campo que contém a imagem criptografada. E realmente funcionou, a imagem apareceu tanto no meu LOOPER quanto no meu FORM.
Porém eu ainda tinha um problema, não podia mexer na estrutura da tabela do cliente, tendo em vista eu estar fazendo um APP que apenas faça uma leitura nos dados do cliente.
Foi aí que me veio a ideia de criar uma query transformando meu campo imagem já em uma imagem criptografada que o Windev Mobile pudesse interpretar.

Então criei a seguinte view:

CREATE VIEW TESTE_IMAGEM AS
SELECT imagem_normal,
CAST(N'' AS XML).value(
'xs:base64Binary(xs:hexBinary(sql:column("imagem_criptografada")))'
, 'VARCHAR(Max)'
) imagem_Base64Encoding
FROM (
SELECT imagem as imagem_normal, CAST(imagem AS VARBINARY(Max)) AS imagem_criptografada from GIMAGEM
) AS Image;


Que me gerou o seguinte resultado:





No Windev Mobile

sSQLpatrimonio is string = "select * from TESTE_IMAGEM”
bExecutasqlpatrimonio is boolean = SQLExec(sSQLpatrimonio,"SqlLista_patrimonio")
.
.
Faço a verificação se a consulta foi executada, se sim
.
.
// Alimentando Variável string com o Resultado do select
WHILE SQLFetch("SqlLista_patrimonio") = 0
Foto is string = SQLGetCol("SqlLista_patrimonio", 2)

// Descriptografando o Conteúdo da variável Foto e passando para o looper
LooperAddLine(LOOP_patrimonios, Uncrypt(Foto,"",cryptNone))
END


Então o Resultado foi esse:





Aí Pra passar pro FORM fica fácil.





:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/