Hoje vamos criar nosso banco de dados pelo sistema e também criaremos a tabela que iremos utilizar, via código.
Primeiro vamos abrir o projeto da agenda.
Lembrem-se que nossa agenda vai possuir apenas 3 campos:
1 – ID Integer Primary Key
2 – Nome Varchar(50)
3 – Idade Integer
Nossa agenda irá trabalhar da seguinte maneira, ao abrir o sistema, vamos verificar se existe o arquivo “agenda.db3”, se ele não existir, iremos executar uma função que criará o banco de dados e a tabela contatos, ou seja, esta função, teoricamente, será usada apenas uma vez.
Vamos ao código:
Em sqlf.h:
//Esta função será usada para criar o nosso banco de dados //e também para criar a tabela contatos. //Ela será executada apenas uma vez... void CreateDBAgenda();
Em sqlf.cpp:
void CreateDBAgenda()
{
//Primeiro, vamos pegar o diretório da aplicação mais o nome do banco de dados...
wxString conf_path = GetExecPath() + wxT("/agenda.db3");
//Agora vamos verificar se o arquivo já existe...
//Se existir, paro a execução da função...
if(wxFileExists(conf_path))
{
return;
}
//Se ele não existir crio um wxSQLite3Database com este caminho...
wxSQLite3Database *db = OpenDB(conf_path);
//Ok, agora criamos um sql com o comando de criação da nossa tabela
//CREATE TABLE contatos(
//ID INTEGER PRIMARY KEY,
//NOME VARCHAR(50),
//IDADE INTEGER
//);
//Vamos adicionar isto em uma wxString
wxString SQL = wxT("CREATE TABLE contatos(\n");
SQL += wxT("ID INTEGER PRIMARY KEY,\n");
SQL += wxT("NOME VARCHAR(50),\n");
SQL += wxT("IDADE INTEGER\n");
SQL += wxT(");");
//Agora vamos usar ExecuteUpdate para executar este SQL...
//Usamos ExecuteUpdate para criarmos tabelas, views, triggers...
//Inserir registros no banco de dados...
//Editar registros no banco de dados...
//Excluir registros no banco de dados...
//Não use ExecuteUpdate para seleções...
db->ExecuteUpdate(SQL);
//Fechamos a conexão com o banco de dados...
CloseDB(db);
}
Vejam que usamos a função ExecuteUpdate e passamos como parâmetro, o código SQL de criação do banco de dados.
O que fizemos aqui foi basicamente, verificar se existia um arquivo chamado “agenda.db3” dentro do diretório da aplicação (esta função foi explicada aqui), se ele não existir, crio o mesmo, depois executo o código de criação da tabela contatos e fecho o banco de dados.
Agora vamos chamar esta função em OnInit() do arquivo main.cpp, ficará assim:
bool wxAppTutorial::OnInit(void)
{
//Criamos o banco de dados e a tabela caso não existam...
CreateDBAgenda();
Hoje aprendemos como criar um banco de dados e uma tabela usando wxSqlite3, lembre-se que para criarmos uma view ou um gatilho, usamos estes mesmos passos.
Os arquivos modificados ficaram assim:
main.cpp
//ARQUIVO DO BLOG - http://wxnewbie.blogspot.com
//TUTORIAL wxWidgets + sqlite3 usando wxSqlite3
#include "main.h"
#include "framep.h"
#include "sqlf.h"
bool wxAppTutorial::OnInit(void)
{
//Criamos o banco de dados e a tabela caso não existam...
CreateDBAgenda();
//Crio o Frame que vai controlar a aplicação
wxFramePrincipal *frameprincipal = new wxFramePrincipal();
//Mostro o Frame
frameprincipal->Show();
//Passo para wxApp que este frame irá controlar a aplicação...
//quando ele for fechado, a aplicação também será fechada...
SetTopWindow(frameprincipal);
return true;
}
IMPLEMENT_APP(wxAppTutorial)
sqlf.h
//ARQUIVO DO BLOG - http://wxnewbie.blogspot.com //TUTORIAL wxWidgets + sqlite3 usando wxSqlite3 #ifndef SQLF_H_INCLUDED #define SQLF_H_INCLUDED #include <wx/wx.h> #include <wx/wxsqlite3.h> #include <wx/stdpaths.h> wxString GetExecPath(); //Nesta primeira função, iremos abrir um banco de dados indicado pelo //parâmetro caminho e retornar um ponteiro para wxSQLite3Database... //Se o banco de dados não existir, será criado um... wxSQLite3Database *OpenDB(wxString caminho); //Aqui iremos apenas fechar o mesmo... //Isto é necessário, pois liberaremos o arquivo para novos acessos... void CloseDB(wxSQLite3Database* db); //Esta função será usada para criar o nosso banco de dados //e também para criar a tabela contatos. //Ela será executada apenas uma vez... void CreateDBAgenda(); #endif // SQLF_H_INCLUDED
sqlf.cpp
//ARQUIVO DO BLOG - http://wxnewbie.blogspot.com
//TUTORIAL wxWidgets + sqlite3 usando wxSqlite3
#include "sqlf.h"
//Função para pegar o diretório da aplicação, já explicada no blog...
wxString GetExecPath()
{
wxString retorno;
retorno = wxStandardPaths::Get().GetExecutablePath();
retorno = wxPathOnly(retorno);
return retorno;
}
//Vamos implementar nossa função OpenDB...
wxSQLite3Database *OpenDB(wxString caminho)
{
//Aqui eu crio um ponteiro para um wxSQLite3Database chamado db...
//É ele que nós retornaremos na função...
wxSQLite3Database *db = new wxSQLite3Database();
//Aqui uso a função Open, passando como parâmetro o caminho para o banco de dados...
//O interessante aqui é vermos que se existir um banco de dados neste lugar a função
//irá abrir o mesmo, se não existir o banco de dados será criado...
db->Open(caminho);
//Vocês poderão ter um problema ao executar esta função, dizendo que Open possui mais de
//um parâmetro, se isto acontecer, basta usá-la desta maneira:
//db->Open(caminho, wxEmptyString);
//O segundo parametro seria a senha para o banco de dados,
//se estivessemos usando criptografia no mesmo...
//retornamos o db...
return db;
}
//Aqui vamos fechar a "conexão" com o banco de dados...
void CloseDB(wxSQLite3Database* db)
{
//Vemos se db é verdadeiro...
assert(db != NULL);
//Fechamos db com o comando Close();
db->Close();
//Deletamos db da memória...
delete db;
}
void CreateDBAgenda()
{
//Primeiro, vamos pegar o diretório da aplicação mais o nome do banco de dados...
wxString conf_path = GetExecPath() + wxT("/agenda.db3");
//Agora vamos verificar se o arquivo já existe...
//Se existir, paro a execução da função...
if(wxFileExists(conf_path))
{
return;
}
//Se ele não existir crio um wxSQLite3Database com este caminho...
wxSQLite3Database *db = OpenDB(conf_path);
//Ok, agora criamos um sql com o comando de criação da nossa tabela
//CREATE TABLE contatos(
//ID INTEGER PRIMARY KEY,
//NOME VARCHAR(50),
//IDADE INTEGER
//);
//Vamos adicionar isto em uma wxString
wxString SQL = wxT("CREATE TABLE contatos(\n");
SQL += wxT("ID INTEGER PRIMARY KEY,\n");
SQL += wxT("NOME VARCHAR(50),\n");
SQL += wxT("IDADE INTEGER\n");
SQL += wxT(");");
//Agora vamos usar ExecuteUpdate para executar este SQL...
//Usamos ExecuteUpdate para criarmos tabelas, views, triggers...
//Inserir registros no banco de dados...
//Editar registros no banco de dados...
//Excluir registros no banco de dados...
//Não use ExecuteUpdate para seleções...
db->ExecuteUpdate(SQL);
//Fechamos a conexão com o banco de dados...
CloseDB(db);
}
Espero que tenha ajudado e até a próxima.
0 comentários:
Postar um comentário