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.

4 Responses

  1. Joao Carlos disse:

    Ótimo artigo! porem ainda não encontrei na internet como criar campos novos após a tabela ja existir, atualmente eu pego o banco em arquivo, rodos os scripts direto neles, existe algum comando direto do advpl que permita criação de campos novos?

  2. Eduardo Filho disse:

    Boa tarde!

    Sei que estou enviando um pouco tarde , mas com a mudança de versão e o fim do suporte ao CTREE, seria possível disponibilizar um exemplo completo de MVC utilizando SQLite??

    • Bom dia Eduardo, tudo joia?

      Você diz, preparar uma tela em MVC de cadastro (com browse, inclusão, alteração, etc), tipo de uma tabela vindo do SQLITE, algo mais ou menos nesse sentido?

      Tenha uma ótima e abençoada quarta feira.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação