1

odbc を介して正しい値を取得するのに問題があります。テーブルに格納された値を変数 rezervovani に返す代わりに、odbc は値 -858993460 を返します。sqlbindparameter で間違ったデータ型を使用していると思われますが、どこにあるのかわかりません。

DSN 接続文字列は、エラー レポートと同様にコードから削除されます。アドバイスをください。

    int _tmain(int argc, _TCHAR* argv[])
{

SQLHENV hEnv; 
SQLRETURN ret;u
SQLHDBC hDB2dbc; 
SQLHSTMT hDB2stm; 

SQLINTEGER rezervovani, nts = SQL_NTS; 

string stm = "select"
" (select count(*) from bk_klienti_report where stav = 1) rezervovany,"
" (select count(*) from bk_klienti_report where stav = 2) konfigurace,"
" (select count(*) from bk_klienti_report where funkcni = 1) funkcni,"
" (select sum(zruseny) from bk_klienti_report where stav = 3) zruseny,"
" (select sum(nova_smlouva_dodatek) from bk_klienti_report) dodatek,"
" (select sum(funkcni) from bk_klienti_report where majitel = 'Podnikatel') podnikatel,"
" (select sum(funkcni) from bk_klienti_report where majitel = 'Obcan') obcan,"
" (select sum(funkcni) from bk_klienti_report where majitel = 'Zamestnanec') zamestnanec,"
" (select sum(disp_fo) from bk_klienti_report where funkcni = 1) + (select sum(disp_fo) from bk_klienti_report where pouze_smlouva = 1) disponenti_fo,"
" (select sum(disp_po) from bk_klienti_report where funkcni = 1) + (select sum(disp_po) from bk_klienti_report where pouze_smlouva = 1) disponenti_po"
" from bkdat001.bk_klienti_report";

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);

ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_UINTEGER);


ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDB2dbc);

ret = SQLConnectA(hDB2dbc, (SQLCHAR*)DB2DSN.c_str(), DB2DSN.length(), (SQLCHAR*)DB2USR.c_str(), DB2USR.length(), (SQLCHAR*)DB2PWD.c_str(), DB2PWD.length());


ret = SQLAllocHandle(SQL_HANDLE_STMT, hDB2dbc, &hDB2stm);


ret = SQLPrepareA(hDB2stm, (SQLCHAR *)stm.c_str(), SQL_NTS);

ret = SQLBindParameter(hDB2stm, 3, SQL_PARAM_INPUT, SQL_C_SSHORT,  SQL_INTEGER, NULL, 0, &rezervovani, sizeof(rezervovani), (SQLINTEGER *)nts);


ret = SQLExecute(hDB2stm);


cout << rezervovani


SQLDisconnect(hDB2dbc);
SQLFreeHandle(SQL_HANDLE_DBC, hEnv);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}
4

0 に答える 0