quinta-feira, 19 de setembro de 2013

Delphi XE5 Android com SQLite


Esta vídeo aula tem como objetivo ensinar como criar um projeto FireMonkey Android utilizando SQLite para guardar informações de banco de dados. 


Espero que gostem, qualquer dúvida, sugestão ou comentário basta comentar aqui ou no meu blog. Abraços e bons estudos.

Clique aqui para fazer o download do material discutido nesta vídeo aula.

Para acessar todo o repositório, clique aqui.

146 comentários:

  1. Pode partilhar este codigo por favor?
    bmartins.p45@gmail.com

    ResponderExcluir
    Respostas
    1. Estou sem o código agora, assim que possível mando uma cópia zipada para esse email... Abraços.

      Excluir
  2. Assisti vários videos do assunto.
    o Anderson Jesus superou todos.
    Parabéns.
    Me inscrevi no canal!

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário, fico contente em saber que estou ajundando...
      Agradeço as palavras, ainda mais sendo positivas.
      Abraços e bons estudos.

      Excluir
  3. Boa tarde Anderson, primeiramente gostaria de parabenizá-lo e agradecer pelas vídeo aulas, realmente são muito úteis. Segui todos os passos fielmente, até os nomes dos campos da tabela rs, mas o caso é o seguinte a tela do meu S3 e do tablet GT-7245 ficam pretas e não sei mais o que fazer, será que vc pode me ajudar nisso tb ?

    ResponderExcluir
    Respostas
    1. Bom dia. Muito obrigado pelo comentário...
      Bom, eu testei no galaxy S3 (dispositivo físico) e não encontrei nenhum problema. Fiz vários testes e todos funcionaram sem problemas.

      Eu tive esse problema mas foi utilizando o simulador do Android, que consegui resolver habilitando a função "Host GPU" (ou algo assim, eu mostro nessa vídeo aula) e resolveu.

      Tente habilitar as funções de desenvolvedor no seu Android, tem uma opção que é modo de depuração, ela tem que estar ativa, entre outras que tem.

      Qualquer novidade não deixe de me informar.

      Abraços e bons estudos.

      Excluir
    2. No meu SII acontece o mesmo, a tela fica preta e o projeto não roda, onde coloco a banco no dispositivo? ou durante a instalação ele já é copiado?

      Excluir
    3. Nesta vídeo aula eu mostro como adicionar o banco de dados pelo delphi, feito isso, quando você compila e instala no dispositivo, o banco de dados vai automaticamente.

      Presta atenção no RemotePath que é configurado no delphi para o banco de dados, são caminhos diferentes para o iOS e para o Android.

      Também presta atenção na hora de selecionar o banco de dados em tempo de execução, tem que programar o evento onBeforeConnect para alterar o caminho do banco de dados, do jeito que mostro na vídeo aula.

      Se tudo isso estiver correto, qual a versão do seu Android? parece que o Delphi só compila direto para versões acima 4.1.

      Tenta baixar o exemplo que disponibilizei neste artigo, lá está tudo certo e configurado.

      Abraços e boa sorte.

      Excluir
    4. Boa tarde, alguem conseguiu resolver a questão da tela ficar somente preta quando executa a aplicacao em seu dispositivo ? comigo esta acontecendo a mesma coisa..

      Excluir
    5. Bom dia a todos! Eu tive o mesmo problema, ma no meu caso eu tinha esquecido de informar as Uses FMX.Platform, FMX.VirtualKeyboard;
      E lembrem de informar o caminho no Deployment quando estiver em modo de compilação para Android e não para Win32.
      Abraços e Sucesso!

      Excluir
  4. Muito bom, me tirou várias dúvidas que estava tendo. Parabéns.

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário...

      Abraços e bons estudos.

      Excluir
  5. Ola Anderson, consegui rodar a aplicacao no meu S4 ( deu um probleminha não encontrou sqlite3.dll) troquei a opcao na conexao para false e parou de dar este erro. Agora gostaria de saber se ao inves de salva no sqlite(local) consigo salvar num banco de dados na net(mysql ou postgress) ? muito obrigado Olavo

    ResponderExcluir
    Respostas
    1. Olá Olavo, da pra enviar esse arquivo pelo delphi, tem uma opção no AddFeatures (algo assim) que vc coloca esse arquivo. Ele está incluso na instalação do Delphi.

      Acredito que dá sim, tem que ver as opções do FireDac. Não cheguei a testar.

      Abraços e bons estudos.

      Excluir
    2. Boa Noite Anderson estou com um problema parecido tipo: (sqlite.dll not found), quando tento conectar meu banco de dados. fico muito grato se poder me ajuda.

      Excluir
    3. Ola, Estou seguindo os passos deste tutorial, porem quando vou criar uma conexão SQLite, preencho o campo Database conforme explica o vídeo. Mas quando clico em Test Connection, aparece uma mensagem "Failed: SQLite3.dll not found". Alguém poderia me ajudar?

      Excluir
    4. Procurem nos arquivos do pc de vocês, provavelmente algum programa instalado usa o SQLite e vai ter a DLL. (Firefox, OpenOffice são exemplos)

      Excluir
  6. Ola, queria parabenizar pelo bom video, me ajudou muito a conhecer essa nova ferramenta. E queria saber se poderias disponibilizar esse projeto?

    ResponderExcluir
    Respostas
    1. Olá Cristiano, muito obrigado pelo comentário, agradeço as palavras ainda mais quando são positivas.

      Já está disponível, tem um link aqui:
      https://drive.google.com/folderview?id=0B60tNO-1JvWxR1BORkN4QlR0cGM&usp=sharing

      Abraços e bons estudos.

      Excluir
  7. Olá Anderson, fui fazendo passo-a-passo com sua video aula, e estou com um problema, quando confirmo o cadastro, ele retorna a mensagem de Sucesso, mas ao dar close e open na tabela, ele fica estático e diz que não responde, saio da aplicação e tento entrar novamente ele não executa, que deve ser por causa do Open no Create, então, acredito que está faltando algo nas configurações, você tem alguma sugestão?

    ResponderExcluir
    Respostas
    1. Muito estranho, deve ser algum erro besta ou alguma configuração errada ou faltando...
      Não da pra saber assim, compacta seu projeto e me manda, dou uma olhada e vejo o que falta.

      Abraços.

      Excluir
    2. Testei agora o seu projeto, apenas direcionei a base de dados e ele nem executa no emulador! Será que no emulador é o problema. Estou usando a versão utilizada na video aula

      Excluir
    3. Tem muita gente com esse problema...

      O emulador tem sérios problemas...

      Olha só esse forum: https://groups.google.com/forum/#!topic/dug-rs/o7OmD0ghyqw

      Eu também tive problema no começo, até acertar a configuração deu o que fazer. Tenta deixar a configuração do emulador o mais baixo possível.

      Excluir
  8. Ainda não consegui resolver o problema, parece que é relacionado com o Banco de Dados. Quando voce cita, "Deixar a configuração do emulador mais baixo possivel", o que vc sugere alterar?

    ResponderExcluir
    Respostas
    1. Esqueci ainda de pedir, tenho que configurar algo no sqlite no android?? Ele é nativo certo?

      Excluir
    2. Tenta fazer um programa somente com um botão e no onClick dele um showmessage. Se não abrir o problema é com o emulador mesmo.

      Quanto ao SQLite não tem que configurar nada, ele é nativo no Android e no iOS.

      Deixa a versão do Android em 4.1. Coloca 50 mega de memória e coloca o emulador no Galaxy SII, pois ele é pequeno e ocupa menos memória.
      Não esqueça de ativar o "Host GPU" do emulador, sem ele nada acontece.

      Abraços e boa sorte.

      Excluir
    3. Estou tentando jogar para um tablet fisico, mas ainda não ta indo, hehe, mas blz, a aplicação executa, e como citei num post, ele até aparece a mensagem de "Contato inserido com sucesso", mas ao dar close e um open, ele para de funcionar, não muda de tela, não limpa os campos, trava literalmente, esse é o meu real problema! Mas irei fazer com as suas configurações passadas para testar.

      Excluir
    4. Muito estranho...

      Tenta algo assim:

      try
      qryCliente.Close;
      qryCliente.FieldsDefs.Clear;
      qryCliente.Open;
      except
      on E: Exception do
      begin
      ShowMessage(E.Message);
      end;
      end;

      Dessa forma, se der alguma exceção no Open da query você vai conseguir visualizar...

      Se quiser, me mande um .rar do seu projeto que eu dou uma olhada e tento achar o problema.

      Abraços.

      Excluir
    5. Olá, com seu código descobri o problema, quando fui fazendo sua video aula, não utilizei igualmente os seus campos, eu criei um campo ID do tipo integer, mas qdo criei o SQLDataSet, o campo que é integer ficou do tipo TWideMemofield, e deu incompatibilidade, mudei o BlobType para ftLargeint, mas o erro permanece. Eu posso utilizar o tipo numérico? Ou pq no Bind Visualize liguei o campo ID no lisbox1 Item.Text?

      Excluir
    6. Se não me engano, eu utilizo o campo numérico. O campo ID é para ligar no lookupData... (alguma coisa assim). O Item.text é para ligar campos de texto (nome, descrição etc). Se você ligar o ID neste campo vc vai ver os ID's na lista, e o usuário não vai entender nada rsrs...

      Excluir
    7. Blz, funcionou agora, tava testando aqui, salvando alguns contatos e tal, reparei que quando recompilava o projeto, os dados que havia salvo desapareciam, até pesquisei um pouco sobre isso, mas agora pensando, cada complilação que realizo e executo, ele carrega o banco vazio junto, certo?

      Excluir
    8. Que bom... rsrsrs...
      Exatamente, isso acontece porque o Delphi faz o uninstall da aplicação e depois instala, por isso você perde o que tinha salvo localmente no Android ou iOS.

      Excluir
  9. Anderson, voce sabe me dizer pq quando executo minha app, ele começou a reportar a mensagem "Unable to open database file", e fica sem mostrar nada, é um problema com a criação do banco de dados? ou alguma configuração que deixei de fazer?

    ResponderExcluir
    Respostas
    1. Eu encontrei esse erro quando eu estava colocando a base de dados no local errado. Daí, quando o componente ia fazer o .open, dava esse erro, bastou eu colocar o arquivo de banco de dados no lugar certo e tudo resolveu. Nunca mais tive esse problema.

      Confere se vc está importando o arquivo no lugar certo.

      Abraços.

      Excluir
    2. Não era esse o problema, eu criei DataModulo para uns testes e abandonei, e não eliminei do projeto e ficou no Auto-create junto com o Form principal, foi só tirar e puf, deu certo! hehe, aprendendo mais uma...Mas me diz uma coisa, tenho um campo Integer no banco de dados, e quando é criado o SQLDataset ele vem com o tipo de TWideMemoField, e com isso qdo a aplicação dar um open na tabela, ele informa como incopatível, e mesmo alterando o BlobType, ele continua com esse erro?

      Excluir
    3. Eu sinceramente desconheço esse problema...

      Em vários testes que fiz isso não aconteceu.

      Porém, teóricamente, se vc colocar o tipo certo não é para dar problema.
      Muito estranho isso.

      Excluir
  10. Olá Anderson. Meu nome é Marcos. Parabéns pelas vídeo aulas. Estão ajudando bastante.
    Vamos ver se você pode me ajudar em um problema.
    Crie um banco em SQLite com uma tabela clientes. Inseri 2 registros, e ao conectar a tabela clientes no android, é me retornado o erro: "no such table: clientes". O seu exemplo funciona perfeitamente, mas como estou querendo aprender, criei um projeto e estou com este problema. O banco conecta corretamente. Configurei o Deployments como você disse, e nada de funcionar.

    O que estou fazendo errado?

    Obrigado.

    Att,

    Marcos

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário, é bom saber que estou ajudando...

      Esse erro é quando não esta encontrando uma tabela, que no caso é a de "clientes".

      Em tempo de projeto conecta normalmente?
      Você programou o evento OnBeforeConnect do objeto de conexão para alterar o parametro database?

      Essas são as possíveis causas, se não resolver, me manda seu projeto por email que eu dou uma olhada pra você e digo o problema.

      Abraços e bons estudos.

      Excluir
    2. Anderson, obrigado pela resposta, mas não funcionou.
      Em tempo real, conecta normalmente. Programei o OnBeforeConnect como você orientou, e nada funcionou.
      Em qual e-mail posso te mandar o meu fonte pra você analisar?
      Obrigado!
      Marcos

      Excluir
    3. Boa noite Anderson, meu nome é Ramon e também estou com o mesmo problema. Conferi tudo e ainda não entendi o porque desse problema, se puder me ajudar, fico no aguardo. Valeu!

      Excluir
    4. Ola Anderson, tb estou com o mesmo problema, ja a 2 dias me batendo e nada, fiz uma rotina para criar a tabela, caso de erro na abertura da mesma, toda vez q abro a aplicação ela cria a tabela.. muito estranho, rodei sua app, abriu normalmente.. comparei os parametros de deployment e etc.. tudo igual... ja to ficando careca com isso.. se puder dar uma luz.. desde ja obrigado.

      Excluir
    5. Ola Anderson, tb estou com o problema de nao encontrar a tabela dentro do banco, ja a 2 dias me batendo e nada, fiz uma rotina para criar a tabela, caso de erro na abertura da mesma, toda vez q abro a aplicação ela cria a tabela, mesmo sendo direto no tablet, sem desinstalar.. muito estranho, rodei sua app, abriu normalmente.. comparei os parametros de deployment e etc.. tudo igual... ja to ficando careca com isso.. se puder dar uma luz.. desde ja obrigado. Magno

      Excluir
    6. Este comentário foi removido pelo autor.

      Excluir
    7. O nome do banco de dados é case sensitive. Deve ser idêntico ao do arquivo. Ex Banco.sddb // Bd_testeConnection.Params.Values['Database']:=
      TPath.Combine(TPath.GetDocumentsPath, 'Banco.sdb3');

      banco.sddb // Bd_testeConnection.Params.Values['Database']:=
      TPath.Combine(TPath.GetDocumentsPath, 'banco.sdb3');

      Excluir
  11. Oi Anderson, já comentei antes, achei as video aulas ótimas mas estou com um problema, você diz nesta video aula que alguns dos componentes são criados automaticamente e não aconteceu isso no meu caso.
    Teria como me passar o código fonte desta video aula para eu analizar e ver onde estou errando no meu.

    Abraço e obrigado.

    oliveira.tadeu@hotmail.com

    ResponderExcluir
    Respostas
    1. Olá Tadeu, muito obrigado pelo comentário.

      Então, já está disponibilizado, no começo deste post tem, segue o link:
      https://drive.google.com/folderview?id=0B60tNO-1JvWxR1BORkN4QlR0cGM&usp=sharing

      Abraços.

      Excluir
  12. Anderson, fiquei impressionado com o tanto de detalhes que você deu sobre os componentes e a forma como o XE5 facilita a vida mesmo! Eu fiz o exemplo igual ao seu e tive problemas com o meu Galaxy S4 pra acessar o banco. Lendo a docwiki vi que esse código só funciona pra celulares com root liberado. No meu caso pra dar certo eu tive que apontar o path real. Pra isso eu instalei um aplicativo chamdado Explorador+ que me mostra o diretório raiz do celular, aí ficou fácil. O único problema que tive é que o listbox2 quando a tabela é aberta ele vira uma lista e não permite que eu insira um novo registro. Você sabe se é alguma propriedade ou motivo disso? Os links que você postou todos estão quebrados. Pode mandar o fonte para o meu e-mail? gil@gsoft.com.br. Abração!

    ResponderExcluir
  13. Anderson, consegui baixar o seu código-fonte. Testei aqui e deu tudo certinho. Ficou lindo!!! Parabéns!!!

    ResponderExcluir
    Respostas
    1. Muito obrigado pelos comentários. Que bom que vc conseguiu rodar, não é nenhum monstro. kkk.. abraços e bons estudos.

      Excluir
  14. Olá Anderson, mesmo eu utilizando o seu código fonte, apontando no Deploy o banco de dados não vai. Quando eu faço um simples Hello World ele compila no meu celular (LG optimus), mas quando envolve o SqLite não executa.

    ResponderExcluir
    Respostas
    1. Isso é alguma configuração... Confirme que a propriedade Connected esteje desativado e olha o evento onBeforeConnecte para confirmar que está apontado pro lugar certo.

      Excluir
    2. Está sim tanto que usei seu proprio codigo fonte

      Excluir
    3. Grande Anderson, era limitação do meu aparelho mesmo, rodei o aplicativo em um tablet N8000 e funcionou tudo certinho. Parabéns pela aula e um forte abraço

      Excluir
    4. Beleza mano, que bom que funcionou legal.. abraços e bons estudos.

      Excluir
  15. Ei, Anderson, blz
    Tem como enviar o .apk seaparado do .db3 ????

    ResponderExcluir
    Respostas
    1. Opa Graziani, tem sim, existem diretórios que são compartilhado, ou seja, você pode enviar um .db3 a parte desde que deixe em um diretório que você tenha acesso e o usuário não pode escolher onde ficar, se não sua aplicação não funciona. rsrss...

      Abraços.

      Excluir
  16. Olá Anderson, vc tem um exemplo como posso fazer isso???

    ResponderExcluir
  17. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Por hora não, preciso arrumar um tempo e estudar as possíveis formas de se fazer isso.... Este delphi tem todas as api's do Android, demora muito até estudar algumas delas kkkk...

      Se conseguir algo te aviso... Abraços e bons estudos.

      Excluir
  18. Olá Anderson, parabéns pelos videos, muito boa a didática.
    Já programo em delphi e estou começando no XE5 para fazer aplicações android / ios. Sera que você poderia me ajudar, estou fazendo um aplicação simples, colocando alguns botões sem função e edits para mostrar na tela, mas quando eu faço o deploy usando um tablet ou mesmo no emulado, o icone do aplicação aparece, mas quando eu executo apenas abre um tela preta por alguns segundos depois fecha. Você tem alguma ideia do que pode ser isso? Obrigado

    ResponderExcluir
  19. Ola meu nome é Bruno!

    Gostaria de uma informação.

    Como que eu coloco o banco de dados no celular??
    Eu não rodo a aplicacao no emulador eu rodo direto no celular, porem eu nao sei como que faço para poder colocar o banco de dados no celular e funcionar corretamente, alguem poderia me ajudar?

    ResponderExcluir
  20. I found lots of answers to my questions.
    thank you very much

    ResponderExcluir
  21. Olá Anderson, você já se deparou com um erro de database is locked? estou desenvolvendo uma aplicação, e sempre que na aplicação estoura erro, o banco fica travado e tenho que excluir todo o banco (arquivo.db3) e criar um novo com outro nome, não adianta reiniciar o delphi, ou o computador, trava mesmo, já tentei outros manager de sqlite e nada, o interessante e que dentro dos manager consigo trabalhar com o banco "travado", mais no delphi não funciona, se tiver uma dica de como resolver isto agradeço.

    ResponderExcluir
    Respostas
    1. Se não me engano já me deparei sim, eu desliguei todas as conexões com o SQLite e resolveu, desativei as propriedades Active de cada query e depois a propriedade Connected do objeto de conexão com o banco de dados.

      Isso resolveu pra mim....

      Abraços e boa sorte.

      Excluir
  22. cara primeiro gostaria de parabenizar-lhe por seu incrivel tutorial, foi o melhor que ja vi, e olhe que procurei muito... rs, mas gostaria de tirar uma duvida, montei todo o sistema numa stringgrid, ta funcionando normal, mas gostaria de saber como poegar o valor da query a qual o stringgrid esta ligado? ja tentei de todas as maneiras e nao consegui, desde ja obrigado....

    ResponderExcluir
  23. Ainda não trabalhei muito com StringGrid, esta na minha lista de vídeo aulas, eu até fiz uns exemplos mas foi só por curiosidade, inclusive resolvi esse problema mas agora não lembro mais, faz um bom tempo que fiz isso...

    Se eu achar nos meus exemplos eu te passo...

    Abraços e boa sorte.

    ResponderExcluir
  24. Anderson, parabéns pelo vídeo, muito bom mesmo, além da sua boa vontade em compartilhar com quem está começando e deseja aprender.

    Você poderia compartilhar o código comigo?
    mario@codifique.com

    De antemão, sou muito grato.

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário... segue o link:
      https://drive.google.com/folderview?id=0B60tNO-1JvWxR1BORkN4QlR0cGM&usp=sharing

      Bons estudos. Abraços.

      Excluir
  25. Teria como vc manda este codigo , pra min rbmenezes6@hotmail.com
    Desde Ja agradeço

    ResponderExcluir
  26. Olá Anderson... no 6:40 você cria a tabela "teste" e depois fecha a janela dessa tabela... depois você dá um "refresh" tanto no ícone "Tables" quanto no ícone da conexão "teste"

    e aí você clica no ícone "Tables" e aparece a tabela criado... só que no meu caso, ao clicar nesse ícone, aparece a seguinte frase de erro

    Error

    External Exception C06D007F


    Por que isso??

    ResponderExcluir
    Respostas
    1. Olá Ghilherme... Nunca vi esse erro, temo que seja um erro do Delphi, tenta fechar e abrir novamente...

      Do mais não sei... boa sorte.

      Excluir
    2. Não deu certo... vou usar o Prompt como alternativa pra conectar a tabela

      Mas por acaso tem algum outro procedimento para fazer isso dentro do Delphi??

      Obrigado pela atenção!

      Excluir
    3. Se estiver usando o FireDac, vc pode criar as tabelas dentro da própria query. Usa um framework para trabalhar com SQLite, bem melhor.

      Excluir
    4. ao invés de usar um framework, estou preferindo usar o prompt mesmo...

      só que o meu grande problema agora está no uso do "SQLDataSet"... porque eu não estou conseguindo mexer na propriedade "CommandText", que está sempre dando a mensagem "External Exception C06D007F"... por que isso??

      desde já eu agradeço

      Excluir
  27. Lembrando que já deixei corretamente configurado o SQLConnection...

    na propriedade "Params" está assim:

    DriverName=SQLite
    DriverUnit=Data.DbxSqlite
    DriverPackageLoader=TDBXSqliteDriverLoader,DBXSqliteDriver170.bpl
    MetaDataPackageLoader=TDBXSqliteMetaDataCommandFactory,DbxSqliteDriver170.bpl
    FailIfMissing=True
    Database=C:\sqlitedbs\contatos.db3

    sendo que o SQLDataSet "Contato", conforme você mostrou nesse vídeo, o CommandType está como "ctTable" e o DbxCommandType está como "Dbx.Table"

    aí eu tentei mudar respectivamente para ctQuery e Dbx.SQL... aí não deu mais o erro ao se clicar no CommandText... só que abriu um editor que eu ainda não sei como mexer

    ResponderExcluir
    Respostas
    1. Não sei o que pode ser... nunca vi esse erro. Ainda acho que é problema com o Delphi. Tenta utilizar o FireDac ou UniDac.

      Abraços.

      Excluir
  28. Acho que com o FireDac consegui resolver o problema... Obrigado Anderson

    só que agora estou com um outro pequeno problema: não consigo alterar o tamanho do "SpeedButton" que fica dentro do "ToolBar"... e ainda fazer a palavra, no caso "Voltar", aparecer do lado da seta dentro do botão

    na verdade simplesmente não dá para alterar o tamanho nem pelo "Object Inspector", que fica travado no tamanho 48

    qual seria a solução pra isso??

    Desde já eu agradeço

    ResponderExcluir
  29. Que distração minha... já resolvei o problema, era só escolher no "StyleLookup" a seta com label

    ResponderExcluir
  30. Quero parabenizar pela criatividade dos assuntos e dizer que tem sido de muita utilidade. Se possível gostaria de ver um vídeo seu do Delphi XE5 integrando com a agenda do Google. Obrigado!

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário. Uma vez tentei fazer isso mas envolve muita coisa, tem umas api's do Google, e parece que é paga, tentei e tentei e não consegui... Quando tiver mais tempo pesquiso mais... abraços.

      Excluir
  31. Dê uma olhada em uma ferramenta gratuita – Valentina Studio. Produto surpreendente! IMO este é o melhor gerente para o SQLite para todas as plataformas. http://www.valentina-db.com/en/valentina-studio-overview

    ResponderExcluir
  32. Ola Anderson, parabéns pelo post, realmente de grande valia !!
    Estive fazendo alguns testes no xe5 colocando o banco sqlite no ipad, até então tudo normal, mas estou com seguinte problema, toda vez que compilo o projeto para o dispositivo ele apaga o banco sqlite que esta no dispositivo e coloca novamente, seria um grande problema se o banco do dispositivo estivesse em produção, no xe4 não tem esse problema, o que pode ser ? alguma configuração ?
    Obrigado desde já
    claudemir

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário.

      Então, isso acontece pq toda vez que você manda o aplicativo ele desinstala o que já tem e instala novamente, ou seja, ele apaga tudo.

      Isso é completamente normal, toda vez que você desinstala um aplicativo, ele apaga tudo relacionado a ele, inclusive o banco de dados. O que precisa estudar é como isso é feito em uma atualização, ele apaga e cria de novo? Não sei como funciona na atualização, acho que depende de iOS e Android.

      Para evitar perder o banco de dados, teria tentar mandar ele em outra pasta que não seja do aplicativo, e criar a base de dados quando o aplicativo for aberto pela primeira vez, dessa forma, você não inclui a base de dados no arquivo de instalação e deixa o smartphone criar, dái usando alguns selects você consegue descobrir se a base já existe ou não. E se precisar atualizar uma tabela e etc daria pra fazer na atualização sem problemas.

      Excluir
  33. Obrigado pela resposta...estou a dias tentando descobrir como fazer isso, visto que no xe4 não tinha esse problema...estou estudando uma rotina para fazer o backup do banco do dispositivo para minha maquina por exemplo, e depois de atualizar o sistema no dispositivo seria só restaurar novamente....mas seria ideal se tivesse alguma opção dentro do xe5 para contornar esta situação....se vc tiver alguma dica agradeço desde já..
    obrigado mais uma vez...
    claudemir

    ResponderExcluir
    Respostas
    1. Estranho você dizer que no XE4 funciona, quando eu fiz meus testes nele acontecia a mesma coisa...

      Nunca estudei como contornar isso, portanto não tenho nenhuma dica, assim que possível eu vejo alguma coisa e posto pra galera...

      Abraços e boa sorte. Se conseguir não deixe de nos mostrar..

      Excluir
  34. Anderson, primeiramente queria dizer que tá show de bola suas videos tô compartilhando geral, queria saber de ti se tem como fazer uma conexão direta com o mysql remoto sem precisar de datasnap, fazendo comunicação direta com o mysql e sincronizando os dados.

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário...

      Então, tem sim, porêm não com componentes nativos do Delphi, você precisa usar um componente de terceiro, chama UniDac. Com ele você consegue acesso ao mysql sem utilizar o webservice, porém ele é pago.

      Abraços e boa sorte.

      Excluir
  35. Anderson, parabéns pelo video, consegui seguir passo a passo, show de bola a explicação. Só que na hora que vai instalar o .apk esta dando o seguinte erro: Project ProjectSQLite.apk raised exception class TDBXError whit message ''. Vc sabe o que pode ser, ja pesquisei, alguns site sobre essa mensagem, mas não obtive resposta pra resolver esse problema, ja reinstalei delphi pra ver se resolveria e nada. Desde ja agradeço.

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo comentário Willian.

      Então, nunca vi esse erro, não tenho a menor idéia do que seja. Tenta fazer uma aplicação sem banco de dados, usando somente um botão, depois tenta fazer utilizando o FireDac.. Talvez seja algum erro do dbx.

      Abraços e boa sorte.

      Excluir
  36. Amigo, Para mysql direto tem como fazer ? , e muito dificil ? tenho o server pronto ja.

    ResponderExcluir
    Respostas
    1. O FireDac tem conexão com o MySql, só não sei se ele faz isso a partir do Android. Caso não, tem o componente da UniDac, esse eu tenho certeza que tem acesso.

      Excluir
    2. sim amigo, o MyDac, ja baixei ele aqui, so que no caso ele abre a tela e fica tudo preto, configurei tudo certinho no meu server e nada :(, ja tentei com o FireDac com o MyDac, ouvi rumores de que tem que ser criado com datasnap , procurei bastante sobre e nada.

      Excluir
    3. Hein olha só quando tento conectar usando FireDac

      http://i57.tinypic.com/2dl19ut.png

      Excluir
    4. Corrigindo "http://oi57.tinypic.com/2dl19ut.jpg"

      Excluir
  37. Bom dia , amigo hipoteticamente tenho um banco de dados quem é enviado automaticamente com na sua video aula, o usuario popula esta base , como faço para gerar uma atualização e manter os dados (uma correção de bug) ?

    Obrigado

    ResponderExcluir
    Respostas
    1. Esse é um problema que ainda não consegui achar uma solução legal... assim que me sobrar um tempo dou uma pesquisada...

      Mas com certeza tem criar a base de dados inteira dentro do aplicativo e não mandar a base pra dentro do aplicativo.

      Pelo que conversei com um amigo, quando você gera uma versão, o sistema não desinstala e instala de novo, ele simplesmente atualiza, se realmente fizer isso, então não tem que se preocupar, pq a base de dados só é excluida quando a aplicação for desinstalação.

      O melhor jeito é fazer testes mesmos...

      Qualquer novidade me avise... abraços

      Excluir
  38. Boa tarde Anderson

    Você poderia me ajudar a conectar o projeto ao SQLITE, pois estou a 2 dias
    tentando, fiz exatamento como no video e até baixei o seu exemplo, mas não consegue achar a base.db3 e não conecta. Se você puder me ajudar eu agradeço. Obrigado

    ResponderExcluir
  39. Estou com o mesmo problema... Estou seguindo os passos deste tutorial, porem quando vou criar uma conexão SQLite, preencho o campo Database conforme explica o vídeo. Mas quando clico em Test Connection, aparece uma mensagem "Failed: SQLite3.dll not found". Alguém poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Esta bem claro o erro né, a dll SQLite3.dll não foi encontrada, ou seja, é necessário que você tenha essa dll na sua máquina, basta achar ela na net baixar e colocar no system32, ou na pasta do executável.

      Excluir
    2. Bom dia Galera.
      Consegui resolver este problema. Baixe a DLL e copie para a pasta System32 ou como no meu caso (Micro 64 bits) copie para a pasta SysWoW64.

      Excluir
  40. cara como que eu fasso para tipo vc usa ali o insert into, mas eu queria trocar um valor no campo tipo um update?

    ResponderExcluir
  41. cara da uma olhada na minha pergunta ai

    ResponderExcluir
    Respostas
    1. troca por update uai....

      ssql :=
      update campo1 = edit1.text,
      campo2 = edit2.text
      where campo3 = 3.

      Abraços

      Excluir
  42. Boa tarde.Otimo conteudo.

    Quando tento rodar o app direto no meu device (um Nexus 7) sempre que os componentes do Banco (SQLite) estao ativos ele nao abre, fica um tela preta, dai desativo esses componentes e o app abre. Voce sabe me dizer porque isso ocorre?

    ResponderExcluir
    Respostas
    1. Mas os componentes do banco de dados não podem estar ativos, pq eles estão configurados para um caminho do windows C:\..., os componentes tem que ficar inativos, e no onCreate ou algo assim vc ativa eles e no evento onBeforeConnect vc direciona o caminho do banco de dados...

      Abraços

      Excluir
  43. Eu já tenho a dll, coloquei no system32 e na pasta SYSWOW64 e nada. Quando vou testar a conexão dá o erro de sqlite3.dll not found.

    ResponderExcluir
    Respostas
    1. Vc esta testando no windows ou no mobile? no windows, tenta colocar na pasta do executável, se não der tem alguma coisa muito errado com seu delphi. E no mobile vc consegue?

      Excluir
    2. Conseguiu resolver? Estou com o mesmo problema!

      Excluir
    3. Este comentário foi removido pelo autor.

      Excluir
  44. O componente StyleBook, é de terceiro ou é Nativo do XE5? Funciona no XE6 esse projeto?

    ResponderExcluir
    Respostas
    1. Como que faz, pq ao abrir esta dando erro. Estou postando o erro que dá ao abrir e compilar também:

      Erro ao abrir o projeto:
      Error reading StyleBook1.ResourcesBin: Error reading TBitmapSwitchObject.ThumbText.Font.Size:Property ThumbText.Font.Size does not exist. Ignore the error and continue? NOTE: Ignoring the error may cause components to be deleted or property values to be lost.

      Ignore Cancel Ignore All

      Erro ao executar:

      if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then

      O erro ocorre no vksVisible

      Excluir
  45. Parabéns! Conteúdo muito bom! Obrigado por compartilhar!

    ResponderExcluir
  46. Estou com problemas para rodar a app no Emulador do Android. Ele compila tudo ok, porem o emulador fica com a tela preta e não sai disto. Este não e um problema com SQLite não, pois quando crio uma app ou utilizo ate os exemplos do Delphi XE5 ele ocorre o mesmo problema. OBS: Após tentar rodar posso pegar o apk gerado na pasta bin e instalar em um dispositivo e consigo executar. Sabe o que pode ser?

    Estou usando a versão 4.2.2 do Android no Emulador.

    ResponderExcluir
  47. Boa Noite Anderson, tentei recriar seu projeto utilizando o Delphi Xe6 compilando diretamente em um tablet com android 4.0 instalado, pelo delphi eu consigo conectar os componentes ao banco de dado com sucesso, porém não tenho sucesso quando compilo no tablet e tento conectar, vi mais acima que voce mencionou que o delphi copiava o arquivo do banco automaticamente para as versãos 4.1 do android, tem alguma maneira de contornar isso? pois o tablet que estou testando eu não consigo fazer a atualização do android dele. Obrigado

    ResponderExcluir
    Respostas
    1. Pelo que sei, a partir do Android 2.3 ele já funciona normalmente.. Pode ser configuração errada ai, ou programação também...

      Conferiu o evento "OnBeforeConnect" do componente de conexão?
      Adicionou o arquivo corretamente no deploy?

      Alguma coisa esta errado aí..

      Não confunda, pelo delphi é uma coisa, pelo mobile é outra coisa.

      Abraços.

      Excluir
    2. Relamente não é pela Versão Anderson, eu testei com um celular com android 4.1 e realmente não foi, sim, eu coloquei o evento onbeforeconnect identico ao seu, a unica coisa que eu mudei foi que eu coloquei um botão para dar o open no componente ao invés de fazer no onshow do form, pq quando estava no onform, o sistema ficava tudo preto e fechava ao entrar, bom, quando ao deploy, quando adicionei o meu banco de dados la, a unica diferença que notei com o seu, é que na primeira coluna sua aparece "C:\sqlitedb" ou algo assim, e no meu essa coluna fica em branco, ah, eu criei o banco diferetamente pela IDE do delphi, será que pode ser isso ? o seu banco voce criou via llinha de comando ? Obrigado

      Excluir
  48. Boa Tarde Anderson, descobri que o erro que estou tendo é o "unable to open database file", só confirmando, no deployment, o Remoth Path tem que ficar ".\assets\internal\ correto ?

    ResponderExcluir
    Respostas
    1. Não lembro de cabeça, da uma olhada no vídeo, tem uma hora que mostro aí.. abraços

      Excluir
    2. Alguém me ajuda? Não consegui nada ainda. Não consigo rodar no XE 6. Postei o erro que está dando e nada.

      Excluir
    3. Esse erro acontece pq o database já esta aberto ou foi aberto e não foi fechado corretamente... Tente ativar e desativar a conexão com o arquivo de banco de dados, isso em tempo de design, vai nas propriedades e conecta e depois desconecta, se não conseguir, apaga esse banco e cria outro, vc nunca pode deixar a propriedade "connected" ativa, sempre deixa desativado, se for usar, ativa e depois desativa se não da esse erro. Abraços

      Excluir
  49. Que erro maluco é esse:

    Como que faz, pq ao abrir esta dando erro. Estou postando o erro que dá ao abrir e compilar também:

    Erro ao abrir o projeto:
    Error reading StyleBook1.ResourcesBin: Error reading TBitmapSwitchObject.ThumbText.Font.Size:Property ThumbText.Font.Size does not exist. Ignore the error and continue? NOTE: Ignoring the error may cause components to be deleted or property values to be lost.

    Ignore Cancel Ignore All

    Erro ao executar:

    if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then

    O erro ocorre no vksVisible

    ResponderExcluir
    Respostas
    1. Vc esta usando outra versão do delphi diferente do XE5 né?
      Provavelmente eles mudaram algumas coisas, por isso esta assim.

      Só ir corrigindo, delete o StyleBook e altere o vksVisible para o compativel com a versão do delphi, entre na unit do VirtualKeyBoardState e veja qual é o novo nome.

      Excluir
  50. Então, como faz isso? To usando o Delphi XE 6.

    ResponderExcluir
    Respostas
    1. Eu já expliquei como faz. O melhor é vc criar o seu com base no meu e não tentar usar o que eu fiz.

      Excluir
  51. Tudo bem, mas como faço sem esse componente ai? Ja tentei e não consegui. Tem como deixar pronto pro XE6? frederico.brigatte@gmail.com é meu email. Tem como me mandar ja adaptado pro XE6? Ajudaria e muito.

    ResponderExcluir
  52. Não vou ter tempo para fazer isso, estou muito ocupado no momento.
    Mas isso é muito simples, já disse, faz o seu baseado no meu é melhor.

    ResponderExcluir
  53. Boa tarde Anderson;

    Parabéns pelos vídeos. Realmente ficaram muito bons.
    Estou terminando uma app no XE5 com SQLite, mas uma coisa está me intrigando. Tenho uma tabela do BD que faz um visual bind para um listbox. Na primeira vez que rodo a aplicação, o listbox vem vazio (OK, perfeito pois não existem registros na tabela). No entanto, ao incluir o primeiro registro na tabela, ao fechar e abrir o SQLQuery (origem do visual bind) para ler o novo registro e exibi-lo no ListBox ocorre o except "Segmentation Fault(11)" e a aplicação trava. Finalizo o processo e ao abrir a aplicação vejo que o registro foi incluído e dai para frente, passa a não dar mais erro (possui incluir quantos registros quiser, abrir e fechar o SQLQuery e tudo OK). O erro só ocorre ao abrir o SQLQuery (sqlQuery.open) que antes era vazio no start da aplicação e que agora possui um registro.
    Reparei que neste exemplo vc já fornece o BD com um registro. Vc enfrentou esse mesmo problema que estou enfrentando ou coincidência?

    ResponderExcluir
    Respostas
    1. Nossa que estranho, nunca vi esse erro, fiz vários exemplos com SQLite e nunca vi isso.

      Se descobrir não deixe de me avisar.

      Excluir
  54. Olá Anderson, muito obrigado por nos ajudar com seus videos, tenho o siguinte problema, crie um banco sqlite bem simples ( de tanto tentar com um outro ), e com as mesmas conexões que vc usou, porem sempre da o mesmo erro: cannot modify a read-only dataset. Ja tentei com FireDac e tambem fala quase o mesmo erro, parece que o banco esta bloqueado para gravar e inserir, o engraçado e que atraves do Data Explorer eu consigo inserir um registro normalmente, o que pode ser ?

    ResponderExcluir
    Respostas
    1. Exatamente por isso, vc deixou o arquivo do banco de dados ativo no data explorer... Vc nunca pode deixar o componente de conexão ativo em tempo de design, pq da esse erro.

      Ou seja, desconecte todos os componentes em tempo de design que tenha ligação com o sqlite e no oncreate ou algo assim vc conecta, ou seja, conecta somente em tempo de execução.

      Abraços

      Excluir
  55. Ola Anderson, tb estou com o problema de nao encontrar a tabela dentro do banco, ja a 2 dias me batendo e nada, fiz uma rotina para criar a tabela, caso de erro na abertura da mesma, toda vez q abro a aplicação ela cria a tabela, mesmo sendo direto no tablet, sem desinstalar.. muito estranho, rodei sua app, abriu normalmente.. comparei os parametros de deployment e etc.. tudo igual... ja to ficando careca com isso.. se puder dar uma luz.. desde ja obrigado. Magno

    ResponderExcluir
  56. Ola Anderson, trabalho com delphi a um tempo parei e agora com delphi + android me animei, tenho um projeto utilizando pontos no mapa do google, e gostaria muito do seu suporte para desenvolvelo, em qual email ou telefone podemos conversar ?

    ResponderExcluir
  57. Bom dia, Já é a 4ª vez que tento escrever aqui no blog e nao aparece a minha mensagem :(. Bom, eu fiz um projeto semelhante ao seu. As configurações todas iguais. Quando coloco no android 4.2, o apk que é suposto transportar a base de dados de sqlite, esta nao aparece em lado nenhum no dispositivo móvel, quando instalo a aplicação. Coloquei nas configurações .\assets\internal, assets\internal, e até .\assets\external e nenhuma desta opções resultou. Quando a aplicação arranca, arranca sem dados, embora eu os tivesse colocado no apk na base de dados sqlite.
    Correndo a aplicação, adiciona registos nessa instancia da aplicação, mas se eu sair da aplicação, a base de dados (que não sei a sua localização), volta a ficar sem registo nenhum. Dá ideia que não terei permissões de escrita de base de dados no android? É precisa alguma configuração especial no android para aceder a uma base de dados local? Onde é guardada habitualmente uma base de dados sqlite no android?
    Se me puder ajudar agradecia.

    ResponderExcluir
    Respostas
    1. Bom dia, nunca peguei um problema assim, já testei em várias versões a partir da 4.0 e nunca enfrentei um problema assim, utilizo sempre o "assets\internal" para gravar o local do banco de dados.

      Qual a versão do seu delphi? ser for o XE5 já tentou com o XE6? Ele está localizando o banco pq se não tivesse vc não estaria conseguindo inserir nada. Configurou o evento onBeforeConnect corretamente?

      Abraços e boa sorte.

      Excluir
  58. Bom dia,
    Estou usando o XE5. Android 4.2. O código do beforeConnect é:
    procedure TForm1.ShoppingListBeforeConnect(Sender: TObject);
    begin

    {$IF DEFINED(ANDROID)}
    ShoppingList.Params.Values['ColumnMetadataSupported'] := 'False';
    ShoppingList.Params.Values['Database'] :=
    TPath.Combine(TPath.GetDocumentsPath, 'shoplist.s3db');
    //GetHomePath + PathDelim + 'shoplist.s3db'; janela branca
    {$ENDIF}
    end;
    Quanto ao evento AfterConnect:
    procedure TForm1.ShoppingListAfterConnect(Sender: TObject);
    begin
    ShoppingList.ExecuteDirect('CREATE TABLE IF NOT EXISTS Item (ShopItem TEXT NOT NULL)');
    end;
    Estarei a fazer algo mal?
    Não me pode disponibilizar o seu código do exemplo do seu vídeo?
    Fico a aguardar.
    Cumprimentos

    ResponderExcluir
  59. Seu curso é muito bem sucedido porque a conexão MySQL ficaria feliz se você adicionar uma classe no meu aplicativo quando tento conexão tecido para aplicação do servidor MySQL usa o data.dbxmysql Quando eu corro com o meu android dá erro não pode responder -lhe que gostaria de receber agradecimentos

    ResponderExcluir
  60. kara parabéns pela sua vídeo aula...me ajudou bastante, mas agora estou com um problema no meu Deployment ou acho que é um problema pois quando seleciono a pasta do meu banco de dados o Local Path fica vazio sem o endereço "c:\sqlitedbs\" o que estou fazendo de errado, sera que pode me ajudar?

    ResponderExcluir
  61. parabens pela video aula... Tenho uma duvida, sempre que eu compilar o projeto apagara os dados que ja cadastrei no celular?

    ResponderExcluir
  62. Ola Anderson, muito bem pelo seus ensinamentos....
    Fiz a aplicação e quase tudo funcionando perfeitamente exceto:
    O listbox nao carregou todos os meus contatos por serem muitos...voce sabe me dizer se é limitado?
    Ao clicar no item ele me mostra a mensagem conforme programado...mas seu pesquisar no searchbox e depois clicar ele da erro: evalerror in linkcontroltofield2: clientdataset1: dataset not in edit or insert mode...ja passou por isso?

    obrigado.

    ResponderExcluir
  63. Preazado Anderson, seus posts são muito bons, estou aprendendo bastante, gostaria de saber se você pode me ajudar?
    Estou desenvolvendo um app em XE8 usando SQLite para iphone6, e estou tendo problemas com o banco de dados no dispositivo, no windows roda muito bem, mas ao fazer o deploy não, li vários comentários relatando o mesmo problema, e num deles você fala do deployment e de abrir o DB no evento beforeconnect, faço tudo isso e não roda de jeito nenhum, não estou usando "Binding", quando uso o "Binding" DB vai, mas ao abrir a tabela dá a msg "no such table"
    Posso te mandar o projeto para você dar uma olhada?
    Certo de sua atenção
    Um forte abraço e muito obrigado por compartilhar seus conhecimentos,

    ResponderExcluir
  64. Anderson boa noite, como corrigir o erro de unable to open database file?

    ResponderExcluir