它应该如何工作:用户点击具有大量ID的列表框。然后,使用指定ID(行)中的数据归档编辑控件。
工作原理:它在res-> getString崩溃
case LBN_SELCHANGE:
{
string str;
int index = SendMessage(GetDlgItem(hwnd, IDC_lbList), LB_GETCURSEL, 0, 0);
string sint = boost::lexical_cast<std::string>(index);
string smt="SELECT client, telnr, atnrem, papatn, gedapr
FROM tremreg WHERE id = ";
string query = smt + sint;
res = stmt->executeQuery(query.c_str());
//starts crashing here
str = res->getString("client");
SetDlgItemText(hwnd, IDC_eClient, str.c_str());
str = res->getString("telnr");
SetDlgItemText(hwnd, IDC_eTelNr, str.c_str());
str = res->getString("antrem");
SetDlgItemText(hwnd, IDC_eRemAtn, str.c_str());
str = res->getString("paprem");
SetDlgItemText(hwnd, IDC_ePapAtn, str.c_str());
str = res->getString("gedapr");
SetDlgItemText(hwnd, IDC_eGedApr, str.c_str());
delete res;
delete stmt;
}
break;
崩溃信息:
Unhandled exception at 0x753C812F in Registracija.exe:
Microsoft C++ exception:sql::InvalidArgumentException at memory location 0x0018F7AC.
围绕谷歌挖掘我发现有人提到应该使用getBlob
获取VARCHAR类型值。但这根本没有帮助,而且崩溃的情况也一样。但是getInt可以工作,并且可以在程序的其他部分使用。
问题:我应该采取哪些措施才能使其发挥作用?
如果你直接在数据库中执行相同的查询运行吗?还有,所有返回的字段真的是字符串吗?通过名称而不是序列号来调用它们是否有效?即getString(1)等