WM - Windev Mobile com OleDB com o Banco de Dados Oracle
Prezados,
Segue exemplo de como trabalhar com OleDB e Oracle no Mobile:
OBSERVAÇÃO IMPORTANTE:
PARA CONECTAR NO BANCO COM SEGURANÇA CRIE NO PROJETO CONSTANTES E NELAS DEFINA OS VALORES
POIS SE CASO DECOMPILAR O PROJETO JAVA A ONDE FOI COLOCADO CONSTANTS ELA NAO SAO DECOMPILADAS
FICANDO ASSIM OFUSCADA ESSA INFORMAÇÃO E EVITANDO A INVASAO NO SEU BANCO DE DADOS.
EXEMPLO:
ipExterno = 188.155.20.70
conexao = X
usuario = Y
senhaBanco = Z1W5C9V7N5B3T4Q6T5C8B5N2X3Y1Z2A7M8K9L6P3T
conexaoOle = PADRAO
tipoconexao = ABACAXI
conexao = X
usuario = Y
senhaBanco = Z1W5C9V7N5B3T4Q6T5C8B5N2X3Y1Z2A7M8K9L6P3T
conexaoOle = PADRAO
tipoconexao = ABACAXI
AS PROCEDURES ABAIXO VAO PERMITIR CRIAR UM DATA SOURCE NA MEMORIA DO CELULAR PROVENIENTE DIRETAMENTE DO SERVIDOR ORACLE, ACESSO NATIVO USANDO OS COMANDOS SQL DO ORACLE COMO SE ESTIVESSE NO PLSQL.
Procedure ConectaBanco()
ConnectionNum is int
IF gTipo=False THEN
ConnectionNum = SQLConnectWS(ipExterno, ...
conexao, usuario, senhaBanco,conexaoOle,tipoconexao)
ELSE
ConnectionNum = SQLConnectWS(ipInterno, ...
conexao, usuario, senhaBanco,conexaoOle,tipoconexao)
END
IF ConnectionNum <> 0 THEN
// The connection was successful
RESULT True
ELSE
SQLInfo()
Error("A conexão falhou. " + CR + ...
"Erro: " + ...
SQL.Error + CR + SQL.MesError)
RESULT False
END
ConnectionNum is int
IF gTipo=False THEN
ConnectionNum = SQLConnectWS(ipExterno, ...
conexao, usuario, senhaBanco,conexaoOle,tipoconexao)
ELSE
ConnectionNum = SQLConnectWS(ipInterno, ...
conexao, usuario, senhaBanco,conexaoOle,tipoconexao)
END
IF ConnectionNum <> 0 THEN
// The connection was successful
RESULT True
ELSE
SQLInfo()
Error("A conexão falhou. " + CR + ...
"Erro: " + ...
SQL.Error + CR + SQL.MesError)
RESULT False
END
Procedure DesconectaBanco()
SQLDisconnect()
SQLDisconnect()
PROCEDIMENTOS DE IMPORTAÇÃO DAS CONFIGURAÇÕES
Procedure View_Config()
ok is boolean = False
sSQL is string = "select * from mir_conf_cidadecorp t where t.status=1"
bExecutaSql is boolean = SQLExec(sSQL,"Qry_Config")
Win_Principal.PBAR_Config=0
IF bExecutaSql THEN
HDeleteAll(T001_Config)
WHILE SQLFetch("Qry_Config")
Win_Principal.PBAR_Config+=1
T001_Config.T001_Descricao=SQLGetCol("Qry_Config",1)
T001_Config.T001_Valor=SQLGetCol("Qry_Config",2)
T001_Config.T001_Status=SQLGetCol("Qry_Config",3)
ok = HAdd(T001_Config)
IF ok = False
Log(ErrorInfo())
END
END
Win_Principal.PBAR_Config=100
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
END
ok is boolean = False
sSQL is string = "select * from mir_conf_cidadecorp t where t.status=1"
bExecutaSql is boolean = SQLExec(sSQL,"Qry_Config")
Win_Principal.PBAR_Config=0
IF bExecutaSql THEN
HDeleteAll(T001_Config)
WHILE SQLFetch("Qry_Config")
Win_Principal.PBAR_Config+=1
T001_Config.T001_Descricao=SQLGetCol("Qry_Config",1)
T001_Config.T001_Valor=SQLGetCol("Qry_Config",2)
T001_Config.T001_Status=SQLGetCol("Qry_Config",3)
ok = HAdd(T001_Config)
IF ok = False
Log(ErrorInfo())
END
END
Win_Principal.PBAR_Config=100
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
END
PROCEDIMENTOS DE IMPORTAÇÃO DO CADASTRO DE PRODUTOS
Procedure View_Produto()
nLinhas is int
IF ConectaBanco() THEN
sSql2 is string = "select count(p.seqproduto) nlinhas from vcorp_produto p"
bExecutaSql2 is boolean = SQLExec(sSql2,"Qry_Produto2")
Multitask(1)
IF bExecutaSql2 THEN
WHILE SQLFetch("Qry_Produto2") = 0
nLinhas = SQLGetCol("Qry_Produto2",1)
END
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
RETURN
END
SQLClose("Qry_Produto2")
nLoops = RoundUp(nLinhas/100,0)
Win_Principal.PBAR_Produto..MaxValue=nLoops
Win_Principal.PBAR_Produto=0
HDeleteAll(T002_Produto)
Multitask(1)
FOR i = 1 TO nLoops
Win_Principal.PBAR_Produto+=1
sSql is string = "select * from vcorp_produto where rownum<="+i*100+" and rownum>="+(i-1)*100+1
bExecutaSql is boolean = SQLExec(sSql,"Qry_Produto")
Multitask(1)
ok is boolean
sErro is string ="Erros ao gravar produtos : " + CRLF
IF bExecutaSql THEN
WHILE SQLFetch("Qry_Produto") = 0
T002_Produto.T002_SeqProduto=SQLGetCol("Qry_Produto",1)
T002_Produto.T002_Desccompleta=SQLGetCol("Qry_Produto",2)
T002_Produto.T002_Seqfamilia=SQLGetCol("Qry_Produto",3)
T002_Produto.T002_EAN=SQLGetCol("Qry_Produto",4)
ok = HAdd(T002_Produto)
IF ok=False THEN
sErro+=SQLGetCol("Qry_Produto",1)+CRLF
Info("Erro: "+ErrorInfo())
END
END
Multitask(1)
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
RETURN
END
LogApp(sErro)
END
SQLClose("Qry_Produto")
END
DesconectaBanco()
nLinhas is int
IF ConectaBanco() THEN
sSql2 is string = "select count(p.seqproduto) nlinhas from vcorp_produto p"
bExecutaSql2 is boolean = SQLExec(sSql2,"Qry_Produto2")
Multitask(1)
IF bExecutaSql2 THEN
WHILE SQLFetch("Qry_Produto2") = 0
nLinhas = SQLGetCol("Qry_Produto2",1)
END
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
RETURN
END
SQLClose("Qry_Produto2")
nLoops = RoundUp(nLinhas/100,0)
Win_Principal.PBAR_Produto..MaxValue=nLoops
Win_Principal.PBAR_Produto=0
HDeleteAll(T002_Produto)
Multitask(1)
FOR i = 1 TO nLoops
Win_Principal.PBAR_Produto+=1
sSql is string = "select * from vcorp_produto where rownum<="+i*100+" and rownum>="+(i-1)*100+1
bExecutaSql is boolean = SQLExec(sSql,"Qry_Produto")
Multitask(1)
ok is boolean
sErro is string ="Erros ao gravar produtos : " + CRLF
IF bExecutaSql THEN
WHILE SQLFetch("Qry_Produto") = 0
T002_Produto.T002_SeqProduto=SQLGetCol("Qry_Produto",1)
T002_Produto.T002_Desccompleta=SQLGetCol("Qry_Produto",2)
T002_Produto.T002_Seqfamilia=SQLGetCol("Qry_Produto",3)
T002_Produto.T002_EAN=SQLGetCol("Qry_Produto",4)
ok = HAdd(T002_Produto)
IF ok=False THEN
sErro+=SQLGetCol("Qry_Produto",1)+CRLF
Info("Erro: "+ErrorInfo())
END
END
Multitask(1)
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
RETURN
END
LogApp(sErro)
END
SQLClose("Qry_Produto")
END
DesconectaBanco()
OUTRO EXEMPLO
sSqlx = "select * from vcorp_produto p where p.dtaalteracao>=fdata('"+DtaUltImportacao+"') and p.dtaalteracao<trunc(sysdate)"
bExecutaSql is boolean = SQLExec(sSqlx,"Qry_Produto")
Multitask(1)
sErro is string ="Erros ao gravar produtos : " + CRLF
IF bExecutaSql THEN
Win_Principal.PBAR_Produto..MaxValue=100
Win_Principal.PBAR_Produto=0
WHILE SQLFetch("Qry_Produto") = 0
//
ok=HReadSeekFirst(T002_Produto, T002_SeqProduto, SQLGetCol("Qry_Produto",2))
T002_Produto.T002_SeqProduto=SQLGetCol("Qry_Produto",2)
T002_Produto.T002_Desccompleta=SQLGetCol("Qry_Produto",3)
T002_Produto.T002_Seqfamilia=SQLGetCol("Qry_Produto",4)
T002_Produto.T002_EAN=SQLGetCol("Qry_Produto",5)
HSave(T002_Produto)
END
Win_Principal.PBAR_Produto=100
Multitask(1)
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
END
LogApp(sErro)
SQLClose("Qry_Produto")
bExecutaSql is boolean = SQLExec(sSqlx,"Qry_Produto")
Multitask(1)
sErro is string ="Erros ao gravar produtos : " + CRLF
IF bExecutaSql THEN
Win_Principal.PBAR_Produto..MaxValue=100
Win_Principal.PBAR_Produto=0
WHILE SQLFetch("Qry_Produto") = 0
//
ok=HReadSeekFirst(T002_Produto, T002_SeqProduto, SQLGetCol("Qry_Produto",2))
T002_Produto.T002_SeqProduto=SQLGetCol("Qry_Produto",2)
T002_Produto.T002_Desccompleta=SQLGetCol("Qry_Produto",3)
T002_Produto.T002_Seqfamilia=SQLGetCol("Qry_Produto",4)
T002_Produto.T002_EAN=SQLGetCol("Qry_Produto",5)
HSave(T002_Produto)
END
Win_Principal.PBAR_Produto=100
Multitask(1)
ELSE
Info("Erro de execução SQL","Relate p/ Miron.")
END
LogApp(sErro)
SQLClose("Qry_Produto")
RESULTADO OBTIDO:
33.000 REGISTROS EM 2.500KB HFSQL e busca local instantânea
https://www.facebook.com/photo.php…
https://www.facebook.com/photo.php…
https://www.facebook.com/photo.php…
https://www.facebook.com/photo.php…
https://www.facebook.com/photo.php…
Agora com esse exemplo é só dar asas a imaginação, esta acessando de forma segura e obtendo em seu celular todos os recursos do seu servidor de Banco de dados Oracle usando WINDEV MOBILE em uma aplicação Android em suas mãos.
Cada dia fico mais feliz e impressionado com o poder que a PcSoft nos dá e também a grande responsabilidade que devemos ter com nossos clientes em ofuscar o código para evitar invasões de terceiros pelo aplicativo, pois nos oferece recursos que em outras linguagens são complexas e podemos notar aqui nesse exemplo a simplicidade do código empregado e dos recursos da ferramenta, o quanto ela é facilmente lida as instruções, ou seja, show de bola!
Sucesso a todos!
Prezados,
Para ofuscar use CONSTANTS, segue exemplo:
CONSTANTS
ipExterno = 188.155.20.70
conexao = X
usuario = Y
senhaBanco = Z1W5C9V7N5B3T4Q6T5C8B5N2X3Y1Z2A7M8K9L6P3T
conexaoOle = PADRAO
tipoconexao = ABACAXI
END
ipExterno = 188.155.20.70
conexao = X
usuario = Y
senhaBanco = Z1W5C9V7N5B3T4Q6T5C8B5N2X3Y1Z2A7M8K9L6P3T
conexaoOle = PADRAO
tipoconexao = ABACAXI
END
OBSERVAÇÃO:
NUNCA DEIXE O SEU PROJETO ANDROID SEM USAR ESSE PROCEDIMENTO DE SEGURANÇA
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/
Prezados,
Outra forma de Ter os dados seguros é armazenar em uma tabela os dados de forma criptografada ou com senha:
Desenvolva uma tela que será chamada na primeira vez e grave na tabela local com senha na tabela e criptografe os dados armazenados.
Assim seria outra técnica para proteger os dados. Uma vez que informe e logue com sucesso armazena na tabela segura e caso queira reiniciar os dados no sistema, apagaria os dados dessa configuração e solicitaria novamente o valor.
Sucesso em seus estudos!
| ||
| ||||
Nenhum comentário:
Postar um comentário