2012-01-18 8 views
0

私はMySQLデータベースに接続するDLLを持っています。私はOpen()、Close()、Update()、およびFind()関数を持っています。 Update()関数はテーブルにデータを挿入しますが、これはうまくいきます。ただし、Find()関数は同じテーブルに対して簡単なクエリを実行するだけです。結果セットgetXX()関数を呼び出すと、アクセス違反エラーが発生し、その理由がわかりません。私は何が欠けていますか?クエリはビューでありダイレクトテーブルではありませんが、それは重要ではないと思います。MySQL C++クエリアクセス違反

MT4_EXPFUNC int __stdcall Find(char* pair) 
{ 
try 
{ 
    sql::Statement *stmt; 
    sql::ResultSet* res; 
    string p = pair; 
    string buysell = ""; 
    string qry = "select * from forex.GPBUSD_CURRENT_PRICE"; 

    stmt = _connection->createStatement(); 

    res = stmt->executeQuery(qry); 

    // if we have a record it means we have a trade chance 
    if(res->next()) 
    { 
     buysell = res->getString(1);  // ACCESS VIOLATION ERROR HERE 
    } 

    // clean up 
    delete res; 
    delete stmt; 

    if(buysell == "SELL") 
     return 1; 
    else if(buysell == "BUY") 
     return 2; 
    else 
     return 0; 
} 
catch(sql::SQLException &e) 
{ 
    return -1; 
} 
} 

答えて

0

getStringがゼロのインデックス付けされたメソッドであるとみなしましたか?または、あなたがアクセスしようとしているデータ型がnullの場合? res-> next()が働いてクラッシュしないのでちょうど撃つことは、resが有効なptrであることを意味しません。

+0

私は1つ以上の列を持っているので、インデックスがゼロであっても列を引き出す必要があります。私はMySQLワークベンチでクエリを実行しているので、結果を返すので、nullであってはなりません。もしそれがNULLであれば、それを読む前にどうやってチェックするのですか? – user441521

+0

私はそれの前にif(!res-> isNull(1))を置いて、それがnullでないようにチェックを渡しました。 – user441521

+0

したがって、resが有効なポインタではない場合、何が原因である可能性がありますか?それが問題です。なぜそれは有効ではないでしょうか? – user441521

関連する問題