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.