Como manipular uma tabela em SQLITE via AdvPL | Ti Responde 0143

No vídeo de hoje, vamos demonstrar em como manipular uma tabela usando um driver do tipo SQLITE.

A dúvida de hoje, nos perguntaram, em como poderíamos efetuar cadastros mas usando SQLITE no lugar de TOPCONN.

 

Pensando nisso, montamos esse exemplo, onde vamos demonstrar a utilização das funções DBSqlExec, DBCreate e DbUseArea junto com o driver SQLITE_SYS.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} User Function zVid0143
Exemplo de como manipular uma tabela em SQLITE via AdvPL
@type  Function
@author Atilio
@since 05/04/2024
@see https://tdn.totvs.com/display/tec/DBCreate
/*/

User Function zVid0143()
    Local aArea     := FWGetArea()
    Local cRDD      := "SQLITE_SYS"
    Local cAliasArq := GetNextAlias()
    Local cArquiAtu := "ATILIO" //vai ficar dentro do \db_sys\SYSTEM.db
    Local cMensagem := ""
    Local aStruct   := {}

    //Apaga a tabela caso ela já exista
    DBSqlExec(cArquiAtu, 'DROP TABLE ATILIO', cRDD)

    //Define os campos que terão na tabela
    aAdd(aStruct, {"CODIGO", "C",  6, 0})
    aAdd(aStruct, {"NOME",   "C", 50, 0})

    //Aciona a criação da tabela caso não exista
    DBCreate(cArquiAtu, aStruct, cRDD)

    //Abre o arquivo CTREE
    DbUseArea(.T., cRDD, cArquiAtu, cAliasArq, .F., .F.)

    //Se deu certo abrir
    If Select(cAliasArq) > 0

        //Cria um registro de teste
        RecLock(cAliasArq, .T.)
            CODIGO := "C00001"
            NOME   := "Nome de Teste 123"
        (cAliasArq)->(MsUnlock())

        //Se tiver dados, exibe uma mensagem
        If ! (cAliasArq)->(EoF())
            cMensagem := "Arquivo " + cArquiAtu + " aberto com sucesso!" + CRLF + CRLF
            cMensagem += "Agora você pode fazer laços de repetição e usar comandos como DbSkip." + CRLF + CRLF
            cMensagem += "Na primeira linha, tem essa informação: " + (cAliasArq)->NOME + CRLF
            ShowLog(cMensagem)

        //Senão, avisa que não encontrou informações
        Else
            FWAlertInfo("Não tem dados!", "Arquivo: " + cArquiAtu)
        EndIf
    EndIf
    (cAliasArq)->(DbCloseArea())

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação