none
Selecionar um registro de uma tabela por vez ao clicar num botão RRS feed

  • Pergunta

  • Estou desenvolvendo um Quiz em Visual C++ e preciso selecionar as perguntas e suas respostas na tabela. No entanto, quando clico no botão pra isso todos os registros são selecionados de uma vez. Veja:

    private: System::Void btnResponder_Click(System::Object^  sender, System::EventArgs^  e) {
    tbPergunta->Text="";
    rbAlt1->Text="";
    rbAlt2->Text="";
    rbAlt3->Text="";
    rbAlt4->Text="";

    String^ constring=L"datasource=localhost;port=3306;username=root;password=jr";
       MySqlConnection^ conDataBase=gcnew MySqlConnection(constring);
    MySqlCommand^ cmdDataBase=gcnew MySqlCommand("select * from quizmania.perguntas;",conDataBase);
    MySqlDataReader^ myReader;
    try {
    conDataBase->Open();
    myReader=cmdDataBase->ExecuteReader();

    while(myReader->Read()){
    tbPergunta->Text+=(myReader->GetString(0));
    rbAlt1-> Text+=(myReader->GetString(1));
    rbAlt2-> Text+=(myReader->GetString(2));
    rbAlt3-> Text+=(myReader->GetString(3));
    rbAlt4-> Text+=(myReader->GetString(4));
    }
    } catch(Exception^ ex) {
    MessageBox::Show(ex->Message);
    }
    }

    Ao clicar nesse botão quero que as perguntas sejam mostradas uma de cada vez. Com os código acima todas as perguntas e suas alternativas, da tabela, são mostradas de uma vez:


    A persistência e determinação são, por si sós, onipotentes.

    domingo, 5 de maio de 2013 16:35

Respostas

Todas as Respostas

  • Olá Junior,

    Pelo que vi, seu comando select está buscando todas as perguntas da base de dados, onde acredito que deveria buscar somente uma. Provavelmente você tem um ID para cada pergunta no banco de dados não é? Então o que podes fazer é criar um loop na chamada do form, passando sempre o código da próxima pergunta e fazer com que este seu comando select busque somente a pergunta da vez. Por exemplo, na primeira chamada do form passaria o código da primeira pergunta que supomos que seja 1. Então você faz o select filtrando por este código e apresenta a pergunta e opções de resposta dela. Ao fechar o form, tanto no responder como no pular, o código vai voltar para o loop e então você incrementa o código da próxima pergunta, por exemplo 2 (1 + 1), então na próxima chamada vai ler a pergunta de ID igual a 2... assim por diante até a última pergunta cadastrada....

    Att.


    Fabio Rosa.

    domingo, 5 de maio de 2013 17:25
  • Fábio, eu criei uma variável de controle e modifiquei o SELECT dessa forma:

    #pragma endregion

    int np=1;

    ...

    String^ constring=L"datasource=localhost;port=3306;username=root;password=jr";
       MySqlConnection^ conDataBase=gcnew MySqlConnection(constring);
    MySqlCommand^ cmdDataBase=gcnew MySqlCommand("select * from quizmania.perguntas WHERE id="+ np +";",conDataBase);
    MySqlDataReader^ myReader;
    try {
    conDataBase->Open();
    myReader=cmdDataBase->ExecuteReader();
    while(myReader->Read()){
    tbPergunta->Text+=(myReader->GetString(0));
    rbAlt1-> Text+=(myReader->GetString(1));
    rbAlt2-> Text+=(myReader->GetString(2));
    rbAlt3-> Text+=(myReader->GetString(3));
    rbAlt4-> Text+=(myReader->GetString(4));
    }


    } catch(Exception^ ex) {
    MessageBox::Show(ex->Message);
    }
    np = np+1;
    }

    No entanto surge o erro: "only static data members can be initialized inside a ref class or value type"

    Pode me dizer o que está errado?


    A persistência e determinação são, por si sós, onipotentes.

    domingo, 5 de maio de 2013 18:08
  • Junior,

    Veja este tópico, ach oque é o que está ocorrendo para você, agora: 

    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/961b833a-56ff-4010-a47f-c83945e72b2b/

    Att.


    Fabio Rosa.

    terça-feira, 7 de maio de 2013 11:12