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.
Ó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?
Bom dia Joao, tudo joia?
Obrigado pelo feedback.
Quanto a alteração da estrutura da tabela, nós não precisamos ainda, mas tente executar um ALTER TABLE usando a DBSqlExec, por exemplo:
ALTER TABLE suatabela ADD seucampo [tipo]
Links de apoio:
https://www.sqlite.org/lang_altertable.html
https://www.techonthenet.com/sqlite/tables/alter_table.php
Tenha uma ótima e abençoada segunda feira.
Um forte abraço.
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.