Bonjour,
J'ai fait un petit wrapper C++ pour l'API C de MySQL, et j'ai un petit
soucis. Je n'arrive pas a recuperer le nom des champs d'une base si
celle-ci est vide. Du coup, impossible d'ajouter la moindre fiche. Si
quelqu'un a une idee...
Voici ci-dessous les methodes utilisees pour une requete et la recuperation
des champs. LA premiere chose que je fais est une requete genre
SELECT * from <base>
Ce qui doit en principe appeler FillFields() pour recuperer le nom des
champs et les remplir avec la premiere fiche. Mais comme dans Query() le
resultat de mysql_num_rows() est nul, je ne peut pas appeler
mysql_fetch_row(), ni mysql_fetch_fields().
Auriez-vous une idee ?
Merci.
-----------------------------------------------------------------------
void MySQLpp::Query(const string& query)
{
m_row = 0;
if (m_rowResult != 0) {
mysql_free_result(m_rowResult);
}
m_rowResult = 0;
if (mysql_real_query(&m_mysql, query.c_str(), query.size())) {
ExcMySQLpp excMysql(2, mysql_error(&m_mysql), 1);
throw excMysql;
}
if ((m_rowResult = mysql_store_result(&m_mysql)) == 0) {
if (mysql_field_count(&m_mysql) != 0) {
ExcMySQLpp excMysql(3, mysql_error(&m_mysql), 1);
throw excMysql;
}
}
else {
m_nbFields = mysql_field_count(&m_mysql);
if ((m_nbRows = mysql_num_rows(m_rowResult)) == 0) {
ExcMySQLpp excMysql(4, "Le resultat de la requete est vide", 0);
throw excMysql;
}
FillFields();
}
}
void MySQLpp::SetField(const int numField, const string& value)
{
if ((numField < 0) || (numField >= m_nbFields)) {
ExcMySQLpp excMysql(7, "Champ invalide", 0);
throw excMysql;
}
field[numField].value = value;
}
void MySQLpp::FillFields()
{
mysql_data_seek(m_rowResult, m_row);
if ((m_rowRow = mysql_fetch_row(m_rowResult)) == 0) {
ExcMySQLpp excMysql(5, mysql_error(&m_mysql), 1);
throw excMysql;
}
m_rowField = mysql_fetch_fields(m_rowResult);
m_nbFields = mysql_num_fields(m_rowResult);
for (long iField = 0; iField < m_nbFields; iField++) {
field[iField].name = m_rowField[iField].name;
if (m_nbRows == 0) {
field[iField].value = "";
}
else {
if (m_rowRow[iField]) {
field[iField].value = m_rowRow[iField];
}
else {
field[iField].value = "";
}
}
field[iField].length = m_rowField[iField].length;
}
}
--
Frederic