mysql++ global variável de tabela
Pergunta
Tenho lido através de documentação, e olhou para os exemplos, mas eu ainda não consigo descobrir como atribuir uma tabela para uma variável global em C++.Eu poderia ser um pouco mimada.Estou vindo de python e a atribuição de uma tabela para uma variável global é realmente uma questão simples usando mysqldb.
Pode uma tabela a ser atribuída a uma variável global a ser acessado fora do mysqlpp classe?
Como um exemplo, quando o código a seguir é compilado, recebo a mensagem de erro:erro:'sched_recs' não foi declarada neste âmbito
#include <mysql++.h>
#include <string>
#include <time.h>
using namespace std;
using namespace mysqlpp;
int SSE (const char* timeStr)
{
time_t sse;
struct tm tm;
strptime(timeStr, "%Y-%m-%d %H:%M:%S", &tm);
sse = mktime(&tm);
return (sse);
}
int main()
{
string table = "sched_recs";
time_t now, tt;
now = time(NULL);
try
{
// Connect to the sample database.
mysqlpp::Connection conn(false);
// databasename, host, username, password
if (conn.connect("dbname", "dbhost", "dbusername", "dbpasswd")) {
// Retrieve a subset of the sample stock table set up by resetdb
// and display it.
//stmt = "select datetime from %s", table
mysqlpp::Query query = conn.query("select * from sched_recs");
mysqlpp::StoreQueryResult sched_recs = query.store();
//if (mysqlpp::StoreQueryResult tableData = query.store()) {
////cout << "We have:" << endl;
//}
}
}
catch (Exception& e)
{
cerr << "Exception: " << e.what() << endl;
}
for (size_t i = 0; i < sched_recs.num_rows(); ++i) {
if (SSE(sched_recs[i][1]) - 60 * 3 < now && SSE(sched_recs[i][2]) > now)
{
cout << '\t' << sched_recs[i][1] << endl;
//system("at -f test.py '18:30' today");
}
}
}
Se eu, em vez de mover o loop para trás para a classe e, em seguida, tudo funciona bem, mas isso é limitante.Esta é a única maneira de fazê-lo?Todos os exemplos parecem fazê-lo parecer tão.
Solução
Como Yaniro sugerido.
Tente o seguinte fragmento de código
#include <mysql++.h>
#include <string>
#include <time.h>
using namespace std;
using namespace mysqlpp;
int SSE (const char* timeStr)
{
time_t sse;
struct tm tm;
strptime(timeStr, "%Y-%m-%d %H:%M:%S", &tm);
sse = mktime(&tm);
return (sse);
}
int main()
{
string table = "sched_recs";
mysqlpp::StoreQueryResult sched_recs;
time_t now, tt;
now = time(NULL);
try
{
// Connect to the sample database.
mysqlpp::Connection conn(false);
// databasename, host, username, password
if (conn.connect("dbname", "dbhost", "dbusername", "dbpasswd")) {
// Retrieve a subset of the sample stock table set up by resetdb
// and display it.
//stmt = "select datetime from %s", table
mysqlpp::Query query = conn.query("select * from sched_recs");
sched_recs = query.store();
//if (mysqlpp::StoreQueryResult tableData = query.store()) {
////cout << "We have:" << endl;
//}
}
}
catch (Exception& e)
{
cerr << "Exception: " << e.what() << endl;
}
for (size_t i = 0; i < sched_recs.num_rows(); ++i) {
if (SSE(sched_recs[i][1]) - 60 * 3 < now && SSE(sched_recs[i][2]) > now)
{
cout << '\t' << sched_recs[i][1] << endl;
//system("at -f test.py '18:30' today");
}
}
}
Note que a única diferença neste exemplo e com o que você postou é a localização da declaração do mysqlpp::StoreQueryResult
variável chamada sched_recs
.
Neste exemplo é declarado no escopo principal , ao invés de incluir o escopo do bloco try, de modo que o valor da variável é ainda no âmbito depois do bloco try termina.
Para obter mais informações sobre try e catch bloco âmbito ver Exceção de perigos e pontos negativos.