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