Я застрял на некоторое время над проблемой и не могу найти хорошее решение.
Я написал небольшой класс для использования c mysql lib в моем проекте.
Я использую этот класс из другого класса, компиляция идет хорошо, но когда я называю это сбоем программного обеспечения.
Я верю, что делаю что-то не так, но не могу найти что. Может быть, какой-нибудь продвинутый госзакупок узнает.
Класс Sql:
class MySQL
{
public:
MySQL();
~MySQL();
bool Query(wxString Qu, MYSQL_RES * result);
unsigned int Insert(wxString Table);
bool Update(wxString Table, unsigned int Id, wxString Data);
bool Delete(wxString Table, unsigned int Id);
protected:
private:
void Close(void);
bool Open(void);
MYSQL mysql;
};
Функция Sql:
bool MySQL::Query(wxString Qu, MYSQL_RES * result)
{
//Qu.mb_str()
if (this->Open()) {
if (!mysql_query(&mysql, "jkjl")) { //<--- I've replaced the Qu var to be sure it wasn't the reason.
if ((result = mysql_store_result(&mysql))) {
this->Close();
}
else {
//throw wxString::Format(wxT("Error: %i, %s"), mysql_errno(&mysql), mysql_error(&mysql));
this->Close();
}
}
else {
//throw wxString::Format(wxT("Error: %i, %s"), mysql_errno(&mysql), mysql_error(&mysql));
this->Close();
}
}
return true;
}
Мой другой класс для доступа к:
bool cldataproject::Load(std::list<cldataproject*> list_dataproject)
{
MySQL sql;
MYSQL_RES *result = NULL;
MYSQL_ROW row = NULL;
unsigned int pos;
cldataproject * list_project;
wxString req;
req = wxT("SELECT idproject, idclient, name, comment, created_by, created_at, modified_by, modified_at FROM project WHERE isdel=0 ORDER BY name ASC;");
if ((sql.Query(req, result))) // <--- Crash
{
......
Функция открытия:
bool MySQL::Open(void)
{
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
if(mysql_real_connect(&mysql,MYSQL_HOST,MYSQL_LOGIN,MYSQL_PASS,MYSQL_BASE,0,NULL,0))
{
return true;
}
else {
return false;
}
}
Примечание: вне класса, в моем главном окне (wxwidgets) это работает без проблем:
str = wxT("SELECT idclient, name, created_by, created_at, modified_by, modified_at FROM client WHERE isdel=0 ORDER BY name ASC;");
mysql_query(&mysql, str.mb_str());
result = mysql_store_result(&mysql);
Обновление
Целью этого класса было просто использовать его из частей wxWidgets, не заботясь о преобразовании.
Я пытался отделиться, но, похоже, проблема не в wxString
.
Что-то действительно странное, что я не смог понять, это то, что если я позвоню:
MySQL sql;
sql.Query(wxT("blabla"), NULL)
от конструктора моего wxFrame
не вылетает. Если я сделаю то же самое для функции класса wxFrame
, которая сама вызывается из конструктора, она вылетает.
как:
constructor {
Query
}
Ok
constructor {
function()
}
fonction {
Query
}
Крах
Я действительно запутался ...