Jump to content

Search the Community

Showing results for tags 'SQLite'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Administração
    • Regras do fórum
    • Anúncios e Noticias
    • Moderação de Usuário
  • Geral
    • Chat (Offline)
    • Chat de Desenvolvedores
    • Diretivas de Segurança
    • Board Test
  • Autoit v3
    • Ajuda e Suporte geral
    • Ajuda e Suporte à GUI (Interface Gráfica de Usuário)
    • Exemplos de Scripts
    • UDFs (Função Definida pelo Usuário)
    • Tutoriais & VideoAulas
    • Microcódigos

Calendars

There are no results to display.

There are no results to display.


Found 2 results

  1. SQLite Básico

    Olá a todos. Para utilização do SQLite, dentro de uma aplicação desenvolvida em AutoIT, é muito simples. Tudo que precisamos fazer é: informar ao AutoIt que gerenciador utilizar (carregar a DLL do AutoIt) acessar o banco desejado fazer as operações necessárias fechar o banco e desativar a DLL Infelizmente ao trabalhar com banco de dados a sintaxe SQL é obrigatória. Se vc não conhece os comandos básicos de SQL então não será possível trabalhar no SQLite. Nosso objetivo aqui é mostrar como utilizar o SQLite em conjunto com o AutoIt, portanto parte-se da premissa que pelo menos os comandos básicos de SQL já são conhecidos. Os comandos básicos incluem criação da estrutura das tabelas, manutenção dos dados (inclusão, alteração e exclusão) e recuperação das informações. Essa sintaxe SQL ou os comandos podem ser estudados na página do SQLite (http://sqlite.org/lang.html) ou quaisquer outras fontes na internet. Minha recomendação é aprender pelo menos, os seguintes comandos: Em relação à estrutura das tabelas (ou arquivos): CREATE TABLE - criação de tabelas ALTER TABLE - alteração da estrutura da tabela DROP TABLE - exclusão de tabelas Em relação às informações dentro das tabelas: INSERT - insere informações UPDATE - atualiza as informações DELETE - deleta informações Em relação a como recuperar as informações SELECT - solicita os dados A grande vantagem em aprender o básico de SQL é que todos os bancos de dados atuais no mercado seguem esta sintaxe, ou seja, independente de utilizar o SQLite ou Oracle, a sintaxe é basicamente a mesma, com pequenas variações próprias de cada banco. Portanto ao aprender SQL, estamos aprendendo a trabalhar com qualquer banco. Agora, vamos de volta ao SQLite com AutoIt. Passo 1: informar ao AutoIt para usar o padrão SQLite pelo comando _SQLite_Startup. Do manual: #include <SQLite.au3> _SQLite_Startup ( [$sDll_Filename = "" [, $bUTF8ErrorMsg = False [, $iForceLocal = 0 [, $hPrintCallback = $__g_hPrintCallback_SQLite]]]] ) Temos alguns parâmetros adicionais ao comando que DEVEM ser observados: $sDll_Filename -> se não informada será usada o padrão sqlite3.dll ou sqlite3_x64.dll em sistemas de 64 bits. Se informada, o nome da DLL será procurado literalmente. $iForceLocal -> se deve procurar a DLL especificada em outras pastas padrão do sistema como @ScriptDir, @SystemDir, @WindowsDir and @WorkingDir Portanto se vc usar apenas o comando _SQLite_Startup() está dizendo ao AutoIt para abrir a DLL chamada SQLITE3.DLL que está obrigatoriamente na pasta do programa OU na pasta WINDOWS OU na pasta WINDOWS\SYSTEM32. Observe que se estiver em um ambiente de 64 bits, o arquivo a ser procurado automaticamente será o SQLITE3_X64.DLL. Se quiser especificar uma DLL, informe o nome e caminho completo da mesma _SQLite_Startup("C:\Pasta\NomeDoArquivo.DLL") ou _SQLite_Startup(@ScriptDir & "\NomeDoArquivo.DLL")Atenção que o sufixo "_x64" é adicionado SEMPRE (independente do nome ser informado ou não) em caso de ambiente de 64 bits. O retorno do comando identifica se realmente conseguiu carregar a DLL ou não. Se conseguiu carregar, retorna o nome da DLL carregada Se não conseguiu, seta @error e retorna uma string em branco ("") Para obter as DLLs necessárias para poder trabalhar com AutoIt tem duas maneiras: pegar do repositório oficial do AutoIt em https://www.autoitscript.com/autoit3/pkgmgr/sqlite/ pegar direto do fabricante SQLite em http://sqlite.org/download.html Até a versão 3.3.14.1 do AutoIt, existia uma cópia da DLL em código de máquina dentro da pasta Include, bastando para ter acesso à SQLite que se fizesse uso do seguinte comando: #include <SQLite.dll.au3>Porém na versão 3.3.14.2 (última) este arquivo foi substituído por uma simples checagem de versão, cabendo ao programador procurar e baixar manualmente a DLL. #FikaDika: Baixem também o SQLITE3.EXE, assim é possível "entrar" num ambiente do SQLite para testar os comandos e assim por diante. Ótimo para verificar se a sintaxe do comando SQL está correta, senão pode dar erro e não se sabe se é no SQLite ou no AutoIt. Passo 2: acessar o banco desejado. Para isso utiliza-se o comando _SQLite_Open Para abrir/criar um banco em disco: _SQLite_Open("Nome e caminho completo do arquivo de banco de dados")O retorno no comando é o handler (ou código) do banco aberto. Se der erro, seta @error e o handler é zero! A partir do momento que o banco está aberto, já estão disponíveis as operações #FIkaDika: Notem que o SQLite tem uma característica muito interessante que é a criação e o uso de tabelas EM MEMÓRIA, ou seja, toda a estrutura é criada e mantida apenas na memória RAM (claro que foge ao princípio do armazenamento permanente), mas permite ao programador utilizar todo o poder do SQLite de forma extremamente veloz. Eu pessoalmente utilizo como alternativa melhorada dos arrays. Para abrir/criar um banco em memória: _SQLite_Open(":memory:")ou simplesmente _SQLite_Open() Passo 3: fazer as operações desejadas As operações são basicamente comandos a serem enviados ao SQLite informando o que desejamos fazer. Neste ponto há a necessidade de conhecimento de linguagem SQL, pelo menos básico (já comentado). Existem basicamente dois tipo de comandos: os comandos de consulta os demais comandos Os comandos de consulta servem para recuperar as informações do banco de dados. Tem algumas variantes mas o principal é _SQLite_Query. Ao utilizar o _SQLite_Query o retorno acontece em um conjunto de dados que deve ser posteriormente lido e processado de acordo. Sua sintaxe é: _SQLite_Query($hDB, $sSQL, ByRef $hQuery)onde $hDB é o handler do banco obtido através do _SQLite_Open $sSQL é o comando SELECT necessário para solicitar os dados que precisamos $hQuery é a variável que é passada por referência que vai conter o conjunto de dadso recuperados Como dito antes, é necessário processar o conjunto de dados que foi gerado através da consulta. Para isso utilizamos o _SQLite_FetchData em um loop. Local $Consulta, $Campo _SQLite_Query($Handle_DB, "SELECT Nome,Telefone FROM Clientes ORDER BY Nome", $Consulta) While _SQLite_FetchData($Consulta, $Campo) = $SQLITE_OK    ConsoleWrite($Campo[0] & " - " & $Campo[1]) WEnd Para esclarecer, os campos que são consultados no comando _SQLite_FetchData retornam em um array base 0 onde cada campo segue a sequência. Exemplos: SELECT Nome,Telefone FROM Clientes $Campo[0] é o Nome $Campo[1] é o Telefone SELECT Nome,Endereco,Telefone FROM Clientes $Campo[0] é o Nome $Campo[1] é o Endereco $Campo[2] é o Telefone SELECT Telefone,Nome FROM Clientes $Campo[0] é o Endereco $Campo[1] é o Nome Os demais comandos são na verdade, comandos em sintaxe SQL que são enviados ao SQLite através do comando _SQLite_Exec. Se observarmos atentamente, veremos que o comando _SQLite_Query também é um comando SQL, porém a diferença é que neste caso, há um conjunto de informações a serem recuperados, ao passo que o _SQLite_Exec, por exemplo, retorna apenas se o comando foi ou não executado. _SQLite_Exec($hDB, $sSQL [, $sCallBack = ""])onde $hDB é o handler do banco obtido através do _SQLite_Open $sSQL é o comando SQL que queremos que seja executado Se deu certo o comando retorna 0 (ou melhor a constante $SQLITE_OK) Se não deu, retorna um código de erro. Este código pode ser comparado com as constantes do SQLite ou pode-se utilizar o comando _SQLite_ErrMsg para obter uma mensagem mais extensa (em inglês). Exemplos: Para criar uma tabela CLIENTES no banco de dados com 4 campos (codigo, nome, endereco e telefone) _SQLite_Exec($Handle_DB, "CREATE TABLE Clientes (Codigo INTEGER, Nome TEXT, Endereco TEXT, Telefone TEXT);")Para criar uma tabela CARROS com 2 campos (placa e chassi) _SQLite_Exec($Handle_DB, "CREATE TABLE Carros (Placa TEXT, Chassi TEXT);") Para incluir um carro na tabela CARROS _SQLite_Exec($Handle_DB, "INSERT INTO Carros VALUES ('ABC1234','9BWHE21JX24060960');" Para alterar um cliente na tabela CLIENTES (previamente criada) _SQLite_Exec($Handle_DB, "UPDATE Clientes SET Endereco = 'RUA DOS ANZOIS, S/N' WHERE Codigo = 6");" FikaDika: Atentar para o detalhe que TODOS os comandos que são passados para o SQL através do comando _SQLite_Exec PRECISAM ser terminados com ; (ponto e vírgula). Outro detalhe interessante sobre banco de dados é que 1 (UM) banco pode conter VÁRIAS tabelas internas, relacionadas ou não entre si. Cada tabela armazena um tipo de informação e são trabalhadas independente uma das outras. FikaDika2: Ao criar as tabelas, pode-se utilizar a opção IF NOT EXISTS, dessa forma, a tabela será criada apenas uma vez, senão corremos o risco de APAGAR a tabela recriando-a ou simplesmente dar ERRO no comando porque a tabela ja existe! CREATE TABLE IF NOT EXISTS Carros (Placa TEXT, Chassi TEXT) Passo 4: fechar o banco de dados e desativar a DLL Finalmente para fechar o banco e desativar a DLL os comandos são: _SQLite_Close([$hDB = -1]) onde $hDB é o handler do banco obtido através do _SQLite_Open e _SQLite_Shutdown()que descarrega a DLL da memória (ou desativa) Exemplo final prático: #include <Sqlite.au3> $SQLite_DLL = _SQLite_Startup() ConsoleWrite("Utilizando " & StringUpper($SQLite_DLL) & " v" & _SQLite_LibVersion() & @CRLF) Local $Handle_DB = _SQLite_Open() _SQLite_Exec($Handle_DB, "CREATE TABLE Clientes (Codigo NUMERIC, Nome TEXT, Endereco TEXT, Telefone TEXT);") _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (1, 'Fulano de Tal', 'Rua das Flores, 123', '(00) 1234-5678');") _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (2, 'Beltrano de Qual', 'Outra Rua Qualquer, s/n', '(00) 5678-1234');") MOSTRA_CLIENTES() _SQLite_Exec($Handle_DB, "UPDATE Clientes SET Endereco = 'RUA DOS ANZOIS, 100' WHERE Codigo = 2;") MOSTRA_CLIENTES() _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (3, 'Mais um Maluco', 'Hospicio Geral, sl 2', '(00) 8274-5382');") MOSTRA_CLIENTES() _SQLite_Exec($Handle_DB, "DELETE FROM Clientes WHERE Codigo = 1;") MOSTRA_CLIENTES() _SQLite_Exec($Handle_DB, "DROP TABLE Clientes;") _SQLite_Close($Handle_DB) _SQLite_Shutdown() Exit Func MOSTRA_CLIENTES() Local $Consulta, $Informacao ConsoleWrite(@CRLF & "Lista de Clientes" & @CRLF) _SQLite_Query($Handle_DB, "SELECT Nome,Endereco,Telefone FROM Clientes ORDER BY Nome;", $Consulta) While _SQLite_FetchData($Consulta, $Informacao) == $SQLITE_OK ConsoleWrite("Nome: " & $Informacao[0] & " - Endereço: " & $Informacao[1] & " - Telefone: " & $Informacao[2] & @CRLF) WEnd EndFunc Mesmo exemplo porém com tratamento de erros: #include <Sqlite.au3> Local $SQLite_DLL = _SQLite_Startup() If $SQLite_DLL = "" Then ConsoleWrite("Erro ao carregar SQLITE.DLL" & @CRLF) Exit EndIf ConsoleWrite("Utilizando " & StringUpper($SQLite_DLL) & " v" & _SQLite_LibVersion() & @CRLF) Local $Handle_DB = _SQLite_Open() If $Handle_DB = 0 Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao abrir banco de dados" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf If _SQLite_Exec($Handle_DB, "CREATE TABLE Clientes (Codigo NUMERIC, Nome TEXT, Endereco TEXT, Telefone TEXT);") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao abrir criar tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf If _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (1, 'Fulano de Tal', 'Rua das Flores, 123', '(00) 1234-5678');") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao inserir na tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf If _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (2, 'Beltrano de Qual', 'Outra Rua Qualquer, s/n', '(00) 5678-1234');") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao inserir na tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf MOSTRA_CLIENTES() If _SQLite_Exec($Handle_DB, "UPDATE Clientes SET Endereco = 'RUA DOS ANZOIS, 100' WHERE Codigo = 2;") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao atualizar tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf MOSTRA_CLIENTES() If _SQLite_Exec($Handle_DB, "INSERT INTO Clientes VALUES (3, 'Mais um Maluco', 'Hospicio Geral, sl 2', '(00) 8274-5382');") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao inserir na tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf MOSTRA_CLIENTES() If _SQLite_Exec($Handle_DB, "DELETE FROM Clientes WHERE Codigo = 1;") <> $SQLITE_OK Then ConsoleWrite("Erro " & _SQLite_ErrCode() & " ao excluir da tabela CLIENTES" & @CRLF) ; verifique os erros dentro da Sqlite.au3 Exit EndIf MOSTRA_CLIENTES() _SQLite_Exec($Handle_DB, "DROP TABLE Clientes;") _SQLite_Close($Handle_DB) _SQLite_Shutdown() Exit Func MOSTRA_CLIENTES() Local $Consulta, $Informacao ConsoleWrite(@CRLF & "Lista de Clientes" & @CRLF) _SQLite_Query($Handle_DB, "SELECT Nome,Endereco,Telefone FROM Clientes ORDER BY Nome;", $Consulta) While _SQLite_FetchData($Consulta, $Informacao) == $SQLITE_OK ConsoleWrite("Nome: " & $Informacao[0] & " - Endereço: " & $Informacao[1] & " - Telefone: " & $Informacao[2] & @CRLF) WEnd EndFunc O resultado dos exemplos acima deve ser: Utilizando SQLITE3_X64.DLL v3.8.11.1 Lista de Clientes Nome: Beltrano de Qual - Endereço: Outra Rua Qualquer, s/n - Telefone: (00) 5678-1234 Nome: Fulano de Tal - Endereço: Rua das Flores, 123 - Telefone: (00) 1234-5678 Lista de Clientes Nome: Beltrano de Qual - Endereço: RUA DOS ANZOIS, 100 - Telefone: (00) 5678-1234 Nome: Fulano de Tal - Endereço: Rua das Flores, 123 - Telefone: (00) 1234-5678 Lista de Clientes Nome: Beltrano de Qual - Endereço: RUA DOS ANZOIS, 100 - Telefone: (00) 5678-1234 Nome: Fulano de Tal - Endereço: Rua das Flores, 123 - Telefone: (00) 1234-5678 Nome: Mais um Maluco - Endereço: Hospicio Geral, sl 2 - Telefone: (00) 8274-5382 Lista de Clientes Nome: Beltrano de Qual - Endereço: RUA DOS ANZOIS, 100 - Telefone: (00) 5678-1234 Nome: Mais um Maluco - Endereço: Hospicio Geral, sl 2 - Telefone: (00) 8274-5382
  2. Boa tarde! Sou iniciante em Autoit e desenvolvimento e minha intenção é criar aplicações de manipulação de banco de dados com SQLite. Tenho o seguinte código: #RequireAdmin #include #include #include Local $hQuery, $aRow, $sMsg, $aResult, $iRows, $iColumns, $iRval Local $sSQliteDll $sSQliteDll = _SQLite_Startup() ; Função que carrega a SQLite.dll na memória If @error Then MsgBox(16, "SQLite Error", "SQLite3.dll Não pode ser carregada!") Exit -1 EndIf MsgBox(0, "SQLite3.dll OK", $sSQliteDll) MsgBox(4096,"","_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF) Local $hDskDb = _SQLite_Open('teste.db') ; Acre ou cria uma base permanente no disco If @error Then MsgBox(16, "SQLite Error", "Não foi possível Abrir ou criar um banco de dados permanente!") Exit -1 EndIf ;If Not _SQLite_Exec(-1, "CREATE TABLE tbl_cliente (id_cli INTEGER PRIMARY KEY AUTOINCREMENT, cli_nome TEXT, id_uf INTEGER, FOREIGN KEY(id_uf) REFERENCES tbl_uf(uf_id));") = $SQLITE_OK Then _ If Not _SQLite_Exec(-1, "CREATE TABLE maximo USING CSVFILE(?teste_sr.csv?);") = $SQLITE_OK Then _ MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ;_SQLite_Exec(-1, "INSERT INTO tbl_cliente (cli_nome, id_uf) VALUES ('Eduardo', 1);") ;_SQLite_Query(-1, "DELETE FROM tbl_user Where user_pw='123';", $hQuery) ; the query While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK $sMsg &= $aRow[0] WEnd ; Query $iRval = _SQLite_GetTable2d(-1, "SELECT tbl_cliente.cli_nome, tbl_uf.uf_uf FROM tbl_cliente INNER JOIN tbl_uf ON tbl_uf.id_uf=tbl_cliente.id_cli;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then _ArrayDisplay($aResult, "Query Result") Else MsgBox(16, "SQLite Error: " & $iRval, _SQLite_ErrMsg()) EndIf ;MsgBox(0, "SQLite", "Get Data using a Query : " & $sMsg) Gostaria de saber se é possível importar dados de um arquivo .csv ou .xls para uma tabela ou criar uma tabela importnado o arquivo? tentei assim mas não funcionou: _SQLite_Exec(-1, "CREATE TABLE maximo USING CSVFILE(?teste_sr.csv?);")
×