Jump to content
Manimal

SQLite Básico

Recommended Posts

Olá a todos.

 

Para utilização do SQLite, dentro de uma aplicação desenvolvida em AutoIT, é muito simples. Tudo que precisamos fazer é:
  1. informar ao AutoIt que gerenciador utilizar (carregar a DLL do AutoIt)
  2. acessar o banco desejado
  3. fazer as operações necessárias
  4. 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:
  1. pegar do repositório oficial do AutoIt em https://www.autoitscript.com/autoit3/pkgmgr/sqlite/
  2. 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:
  1. os comandos de consulta
  2. 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
Edited by Manimal
  • Like 1

Share this post


Link to post
Share on other sites

qual seria o parametro para salvar o banco (criar o arquivo .bd)

 

editado: estava fazendo cagada aqui rs, agora já resolvi!

Edited by mutleey
  • Like 1

Share this post


Link to post
Share on other sites

Esqueci de mencionar uma técnica que eu uso ao fazer os SELECTs, para facilitar a legibilidade do script, que é a definição de constantes locais para acesso às informações.

 

No exemplo abaixo

Func MOSTRA_CLIENTES()
   Local $Consulta, $Campo
   ConsoleWrite(@CRLF & "Lista de Clientes" & @CRLF)
   _SQLite_Query($Handle_DB, "SELECT Nome,Endereco,Telefone FROM Clientes ORDER BY Nome;", $Consulta)
   While _SQLite_FetchData($Consulta, $Campo) == $SQLITE_OK
      ConsoleWrite("Nome: " & $Campo[0] & " - Endereço: " & $Campo[1] &  " - Telefone: " & $Campo[2] & @CRLF)
   WEnd
EndFunc

Observem que, como explicado anteriormente, o retorno do SELECT é armazenado na variável $Consulta e trabalhado através do array $Campos e seus índices:

SELECT Nome,Endereco,Telefone FROM Clientes ORDER BY Nome;
  • $Campo[0] é o Nome
  • $Campo[1] é o Endereco
  • $Campo[2] é o Telefone
Dessa forma, acho mais legível usar o comando ENUM para criar constantes locais assim:
Func MOSTRA_CLIENTES()
   Local $Consulta, $Campo
   Local Enum $DB_NOME, $DB_ENDERECO, $DB_TELEFONE
   ConsoleWrite(@CRLF & "Lista de Clientes" & @CRLF)
   _SQLite_Query($Handle_DB, "SELECT Nome,Endereco,Telefone FROM Clientes ORDER BY Nome;", $Consulta)
   While _SQLite_FetchData($Consulta, $Campo) == $SQLITE_OK
      ConsoleWrite("Nome: " & $Campo[$DB_NOME] & " - Endereço: " & $Campo[$DB_ENDERECO] &  " - Telefone: " & $Campo[$DB_TELEFONE] & @CRLF)
   WEnd
EndFunc

O resultado é o mesmo, mas eu acho que fica melhor para entendimento e manutenção posterior.
  • Like 1

Share this post


Link to post
Share on other sites

Modo coveiro [ON]

 

Criei um bd com o SQLite porem se eu abro o banco com o bloco de notas a maioria dos dados fica legivel.. será que fiz algo errado?

 

:dance:

Edited by mutleey

Share this post


Link to post
Share on other sites

Olá Mutleey.

 

Descupa mas seu post só apareceu hoje para mim.

 

Realmente se abrir o banco no BLoco de notas ou similar fica ilegível!

 

Para verificar, dar manutenção básica, testes, etc eu uso a ferramenta

 

http://sqlitebrowser.org/

 

Baixe o portable, simples e funcional!

Share this post


Link to post
Share on other sites

Manimal, obrigado pela resposta, mais no meu caso o banco que criei fica Legivel ou seja se abro com o bloco de notas ainda consigo ler alguns dados, claro que não fica organizado mais mesmo assim consigo ler alguns a dados.

 

vou criar um banco e postar como exemplo.

 

Edit: como exemplo aqui esta o banco que criei, não sei se fiz algo errado mais como da pra ver as informações ficam Legiveis.

SQLite format 3   @                                                                     -ñ¸
   « «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             StabledatasdatasCREATE TABLE datas (id,nome,endereco,numero,cpf,email,other)
   TT©                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Q+)+-2valdir de souzarua casa verde1164452.648.773.-14valdir@gmail.compendente  U+#)5'1carlos ferreirarua major 1134234.441.686-63carlosferr@gmail.comsaldo devedor
Edited by mutleey

Share this post


Link to post
Share on other sites

Oi Mutleey.

 

Legível é forma de dizer, pois alguma coisa sempre fica legível, não em formato direto, simples, editável, mas relativamente legível.

 

Não recomendo abrir o banco de dados em outra ferramenta porque pode (talvez) gravar algo em algum lugar que eventualmente possa dar pau depois (já aconteceu comigo)!

 

É como escrever um fonte do AutoIt no Word. Na hora de compilar dá erros por causa das formatações, mesmo que visualmente não tenha nenhuma, entendeu?

 

Mas afinal, o que vc quer fazer? Apenas ver o conteúdo do banco? Editar manualmente?

 

Com a ferramenta acima, vc pode fazer as duas coisas bem simples.

Share this post


Link to post
Share on other sites

Oi Mutleey.

 

Legível é forma de dizer, pois alguma coisa sempre fica legível, não em formato direto, simples, editável, mas relativamente legível.

 

Não recomendo abrir o banco de dados em outra ferramenta porque pode (talvez) gravar algo em algum lugar que eventualmente possa dar pau depois (já aconteceu comigo)!

 

É como escrever um fonte do AutoIt no Word. Na hora de compilar dá erros por causa das formatações, mesmo que visualmente não tenha nenhuma, entendeu?

 

Mas afinal, o que vc quer fazer? Apenas ver o conteúdo do banco? Editar manualmente?

 

Com a ferramenta acima, vc pode fazer as duas coisas bem simples.

 

Então Manimal.. minha duvida é que se eu fizer uma banco de dados para um programa de vendas ou alguma loja e quiser que os dados só seja acessado pelo tal programa de certa forma caso alguem queira pegar algum dado (celular ou cpf etc..) bastaria fazer uma copia do banco e abrir com o bloco de notas que muitos dos dados ficariam legiveis.

Edited by mutleey

Share this post


Link to post
Share on other sites

Oi Mutleey.

 

Ahh entendi... Bemvindo à programamção comercial!

 

Realmente, neste seu caso as informações ficariam "disponíveis" por assim dizer.

 

Mas vc não está sozinho nesta preocupação, tanto é que os bancos de dados maiores (MySQL, PostGres, Oracle, etc) tem todo o aparato de segurança necessário para evitar a visualização ou acesso dos dados por terceiros não autorizados, porém o SQLite não implementa este tipo de segurança.

 

O SQLite seria para montar bancos sem esse tipo de preocupação em mente, mas não siginifica que não possa ser utilizado, apenas que vc deve implementar uma camada extra de criptografia, a qual eu considero mais útil e mais simples do que migrar para um banco maior.

 

Claro que tudo isso depende muito mais do projeto que vc está tentanto desenvolver do que do banco em si.

 

Se a tua intenção é desenvolver um projeto comercial com informações relativamente confidenciais vc deveria considerar um banco de dados mais seguro, senão o SQLite resolve. É relativamente fácil de montar um framework de proteção no AutoIt / SQLite.

 

Mas para vc ter ideia, tem "trocentos" sistemas comerciais no mercado usando o Firebird, que eu considero um lixo muito inferior ao SQLite, e com as informações completamente abertas para quem quiser ver ou copiar. E os desenvolvedores não estão nem aí para essa questão.

 

Na prática, a possibilidade de alguém com conhecimento técnico suficiente para copiar ou "abrir" o banco é muito pequeno e destes quais realmente tem vontade ou necessidade de fazer isso?

 

No final, pese as possibilidades e veja a relação custo/benefíio para o teu projeto e mande bala!

 

E se vc está preocupado com segurança dos dados e vai desenvolver um sistema em AutoIt, já pensou na possibilidade de alguém descompilar teu sistema? Daí vc não perde só o banco...

  • Like 1

Share this post


Link to post
Share on other sites

Bom dia, existe o https://www.zetetic.net/sqlcipher/ ele criptografa os dados no SQLite, resumindo, se não tiver a senha, não abre.

 

Eu já vi um exemplo no fórum americano exatamente sobre isso.

 

Mas nesse ponto cai naquela velha questão, o AutoIt é facilmente descompilável.

 

Mas também tem aquela velha dúvida minha: você consegue descompilar "a3x"?

 

Ele compila o código AutoIt sem embutir o AutoIt no .exe, ele fica muito mais enxuto, e não roda se não tiver o .exe.

 

Algo do tipo: "AutoIt.exe meuscript.a3x".

 

Talvez não seja uma boa ideia colocar a senha do sqlite.db no executável, mas nem tudo está perdido, talvez (talvez... talvez... amarrado com o unique hardware id do sistema) em um "a3x".

 

Seria legal você testar e comentar, para mim, isso tudo é apenas teórico, mas com boas chances de funcionar.

 

Até mais.

  • Like 2

Share this post


Link to post
Share on other sites

Opa, eu lembro desse tópico, fica aqui minha sugestão: http://www.autoitscript.com/forum/index.php?app=core&module=attach&section=attach&attach_id=35687

 

A senha para ter acesso ao .db está aqui:

pragma key = 'Radu is happy!'

Teste com uma senha diferente.

;don't include sqlite.dll.au3
#include <SQLite.au3>
_SQLite_Startup("System.Data.SQLite.dll")
ConsoleWrite('Lib[' & _SQLite_LibVersion() & ']' & @LF)
ConsoleWrite('Open[' & _SQLite_Open("testcrypt.db") & ']' & @LF)
_SQLite_Exec(-1, "pragma key = 'Radu is happy!'; create table if not exists test (id integer, val text);" & _
        "insert into test values (1, 'abc');")
Local $row
_SQLite_QuerySingleRow(-1, "select * from test;", $row)
ConsoleWrite($row[1] & @LF)
_SQLite_Close()
_SQLite_Shutdown()
Edited by AutoItCoder
  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×