簡體   English   中英

使用帶有wxWidgets的mysql lib的類崩潰

[英]Crash using a class using mysql lib with wxWidgets

我已經在一個問題上停留了一段時間,找不到一個好的解決方案。

我寫了一個小類在項目中使用c mysql lib。

我從另一個班級使用了這個班級,編譯進行得很好,但是當我稱它為軟件崩潰時。

我相信我做錯了什么,但我找不到。 也許某些高級的ppl會知道。

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
}

constructor {
 function()
}

fonction {
    Query
}

崩潰

我真的很困惑

為什么要混合wxStrings和MySQL? 這似乎不是一個好主意。 我強烈建議僅在任何地方使用普通字符串,並將WxWidgets代碼和MySQL代碼完全分開,這樣您就可以正確地找出問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM