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.