Как я могу получить результат запроса после его выполнения, используя C++ builder XE6 и Firebird?

После подключения к базе данных Firebird с помощью C++ builder, я не могу получить результат от простого запроса на выборку.

У меня есть некоторая путаница со многими участниками классов:

void __fastcall TForm2::btn1Click(TObject *Sender)
{  TSQLConnection   co = new TSQLConnection(this); 
   Base_Firebird *fb = new Base_Firebird()  ;
   bool  bl = fb->Connecter(co);   
   String sqlstring = "select nom_action from T_ACTION where CLE_ACTION=6 ";     
   if (bl)     
      TSQLQuery *req = new TSQLQuery(NULL) ;    
   req->SQLConnection = co ;
   req->SQL->Add(sqlstring);
   req->Open() ;
  }

Моя проблема здесь после открытия TSQLQuery, я не знаю, как я могу получить результат и выполнить команду.

2 ответа

Прочитайте документацию Embarcadero. Есть целые главы о том, как работать с компонентами SQL, которые вы используете, в том числе:

Как выполнить процедуры базы данных

Навигация по наборам данных

Использование dbExpress

Использование индекса компонентов dbExpress

Использование TSQLQuery

Data.SqlExpr.TSQLQuery

Например:

void __fastcall TForm2::btn1Click(TObject *Sender)
{
    TSQLConnection *co = new TSQLConnection(NULL); 
    Base_Firebird *fb = new Base_Firebird();
    if (fb->Connecter(co))
    {
        TSQLQuery *req = new TSQLQuery(NULL);
        req->SQLConnection = co;
        req->SQL->Text = "select nom_action from T_ACTION where CLE_ACTION=6";
        req->Open();
        while (!req->Eof)
        {
            // use req->Fields as needed...
            req->Next();
        }
        delete req;
    }
    delete fb;
    delete co; 
}

Попробуйте изменить конец вашей подпрограммы на что-то вроде этого:

if (bl)    
{ /// you forgot compound operator here !!!!! 
      TSQLQuery *req = new TSQLQuery(this) ;    
   req->SQLConnection = co ;
   req->SQL->Text = sqlstring;
   req->Open() ;

   int j = 0;
   while( !req->EOF() ) 
   {
      ++j;
      String Value = req->Fields[0]->AsString;
      ShowMessageFmt( "Row %d ==> Value: %s ", ARRAYOFCONST(( j, Value )) );

      // String MSG = Format( "Row %d ==> Value: %s ", ARRAYOFCONST(( j, Value )) );
      // ShowMessage( MSG );

     req -> Next();
   };
   req->Close();
   ShowMessage("Data over.");
  }
  req -> Free();  // maybe "delete req;" would work too, dunno
}

Проверять:

Другие вопросы по тегам