quarta-feira, 14 de setembro de 2011

Tutorial wxWidgets e sqlite3 parte 13 - Editando valores no banco de dados

A edição de dados vai ser feita com base na função de inserção de dados, para isto criaremos a mesma nos arquivos sqlf.* do projeto.

Como ela irá funcionar:

Nó passaremos como parâmetros, o ID do registro que está sendo editado, para fazermos o controle na cláusula WHERE do SQL, passaremos também o nome que foi editado e a idade.

Antes de executarmos qualquer alteração verificamos se os dados são válidos, se não estão em branco ou se idade é realmente um número.

O comando usado aqui será o ExecuteQuery(), o mesmo usado na inserção dos dados.

Vamos escrever.

No arquivo sqlf.h digite:

sqlf.h
//Aqui a função para editar os dados...
void UpdateDB(wxString ID, wxString nome, wxString idade);

No arquivo sqlf.cpp:

sqlf.cpp
void UpdateDB(wxString ID, wxString nome, wxString idade)
{
    //Primeiro vejo se o nome ou idade estão em branco
    if(nome.IsEmpty() || idade.IsEmpty())
    {
        //Aviso ao usuário que algum dado está em branco:
        wxMessageBox(wxT("Nenhum campo pode estar em branco!"));
        //Cancelo a função...
        return;
    }

    //Agora preciso ver se a idade é um número...
    //Crio um long int
    long int confere_idade;

    //Tento converter a string idade em um número...
    if(!idade.ToLong(&confere_idade))
    {
        //Se não conseguir, significa que ele não é um inteiro...
        //Aviso o usuário...
        wxMessageBox(wxT("O valor da idade (") + idade + wxT(") não é um número"));
        //Cancelo a função...
        return;
    }

    //Se chegamos até aqui, é porque tudo está correto...
    //Vamos abrir o banco de dados:
    wxSQLite3Database *db = OpenDB(GetExecPath() + wxT("/agenda.db3"));

    //Agora vamos montar o sql para editar os dados...
    wxString SQL = wxT("UPDATE contatos \n");
    SQL += wxT("SET NOME = '") + nome + wxT("',\n");
    SQL += wxT("IDADE = ") + idade + wxT("\n");
    SQL += wxT(" WHERE ID = ") + ID + wxT(";");

    //Agora executo a função ExecuteUpdate, que vimos no tutorial inserir, passando como
    //parâmetro a wxString SQL...
    db->ExecuteUpdate(SQL);

    //Fecho db...
    CloseDB(db);
}


Agora vamos chamar a mesma em framep.cpp:

framep.cpp
if(ID == -1)
    {
        //Se a variável ID for = -1, é porque estamos em inserção...
        //E passamos as duas como parâmetros para a função InsertInDB()...
        InsertInDB(get_nome, get_idade);
    }
    else
    {
        //Pegamos o valor do ID...
        wxString get_id = wxString::Format(wxT("%d"), ID);
        //Passamos como parâmetros, para a função...
        UpdateDB(get_id, get_nome, get_idade);
    }


Pequenas alterações que fiz na GUI do sistema.

framep.cpp
//Adicionei um tamanho padrão para a janela...
this->SetSize(wxSize(450, 350));

//Adiciono o box dos botões ao box principal...
//Aqui arrumei o tamanho do sizer dos botões em relação
//a janela e dei um espaço de 10px na base
boxp->Add(box_btns, 0, wxEXPAND|wxBOTTOM, 10);

Estamos quase terminando nosso sistema, falta apenas implementar a função de deletar...

Até a próxima.

0 comentários:

Postar um comentário