Olá pessoal…
Na vídeo aula de hoje, vou falar um pouco sobre Manipulação de Banco de Dados em AdvPL (DbSkip, Eof, DbSelectArea, etc).
Abaixo os links do TDN sobre o assunto:
Funções genéricas
Abaixo o código fonte utilizado para os testes:
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zBanco Exemplo de manipulação de Banco de Dados via AdvPL @author Atilio @since 15/11/2015 @version 1.0 @example u_zBanco() /*/ User Function zBanco() Local aArea := GetArea() Local aAreaB1 := SB1->(GetArea()) Local cMens := "" //Se a tabela já estiver posicionada If Select("SB1") > 0 MsgStop("Tabela SB1 já está aberta!", "Atenção") EndIf //Selecionando a tabela de produtos DbSelectArea("SB1") SB1->(DbSetOrder(1)) // B1_FILIAL+B1_COD SB1->(DbGoTop()) //Posicionando no produto de código F00002 If SB1->(DbSeek(FWxFilial("SB1") + "F00002")) Alert(SB1->B1_DESC) EndIf //Agora, percorro todos os registros e adiciono a descrição em uma variável SB1->(DbGoTop()) While !SB1->(EoF()) cMens += Alltrim(SB1->B1_DESC)+";"+Chr(13)+Chr(10) SB1->(DbSkip()) EndDo //Mostrando a mensagem Aviso('Atenção', cMens, {'OK'}, 03) RestArea(aAreaB1) RestArea(aArea) Return /* O ideal de usar referências: Modo Errado: DbSelectArea("SB1") While ! EoF() //Tratamentos para o relatório.... DbSelectArea("SB2") //Pega o saldo do produto DbSkip() EndDo Modo Certo: DbSelectArea("SB1") DbSelectArea("SB2") //Referencia a tabela de produtos While ! SB1->(EoF()) //Tratamentos para o relatório.... DbSelectArea("SB2") //Pega o saldo do produto SB1->(DbSkip()) EndDo */
Se quiser fazer o download desse código ou do conteúdo mostrado na vídeo aula, acesse nosso GitHub pelo link github.com/dan-atilio/AdvPL (Exemplos > Vídeo Aulas > 008 – Manipulação de Banco de Dados).
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Salve, salve Daniel Atilio! Tudo bem?
Primeiramente parabéns pelas aulas e sua didática.
Gostaria só de fazer uma pergunta, talvez seja até boba, mas é uma curiosidade.
Existe a possibilidade de executar o codigo fonte de manipulação de banco de dados direto pelo devstudio, sem a necessidade de abrir o sigamdi e executar o formulas ou o lançamentos padrão no p12?
Eu sei que tem como por exemplo testar variaveis de codigo fonte colocando o nome da função no lugar do sigamdi la barra de debug.
Att.
Grande Marcelo, tudo bem graças a Deus e você?
Sim, existe uma forma, primeiro precisamos entender, o motivo de conseguir testar apenas dentro do Protheus aberto (Fórmulas / Lançamento Padrão / etc). O Protheus quando você abre ele, ele carrega a base para utilizar o dicionário de campos (SX2 e SX3), índices (SIX), parâmetros (SX6), gatilhos (SX7), tipo de conexão com o banco (DBAccess), usuários (SIGAPSS), profile dentre tantas outras coisas.
Por isso que a conexão com o banco já estaria “pré-carregada”, e você poderia usar tranquilamente. Portanto, para usar direto no debug uma função que usa banco, você precisa “pré-carregar” essas informações, e para isso, você precisa usar o comando RPCSetEnv no começo do seu fonte, por exemplo:
Colocando esse comando, logo no começo da sua user function, ele vai “pré-carregar”, simulando como se você tivesse aberto o Protheus manualmente. Se quiser ver um exemplo, segue o link – https://terminaldeinformacao.com/2016/03/15/tela-de-autenticacao-customizada-protheus/
Ressalto que para telas, o mesmo acontece quando usamos grid.
Um grande abraço.
Grande Dan Atilio!!!!
Que legal essa função, nao conhecia essa opção. Vivendo e aprendendo com quem sabe.
Muito obrigado pelo esclarecimento!
Grande abraço e fique com Deus.
Eu que agradeço Marcelo.
Um grande abraço jovem.