【问题标题】:res->getString() crashes the applicationres->getString() 使应用程序崩溃
【发布时间】:2014-06-03 11:31:02
【问题描述】:

它应该如何工作:用户单击具有多个 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.

在 google 上一探究竟,我发现有人提到应该使用 getBlob 获取 VARCHAR 类型值。但这根本没有帮助,并且同样崩溃了。但是 getInt 可以工作,并用于程序的其他部分。

问题:我应该采取哪些步骤才能使其发挥作用?

【问题讨论】:

    标签: mysql winapi visual-c++ mysql-connector


    【解决方案1】:

    如果您直接在数据库中执行相同的查询,是否可以正常运行?另外,所有返回的字段真的是字符串吗?通过名称而不是序列号来调用它们是否有效? IE。 getString(1) 等

    【讨论】:

    • 是的,它们确实直接在数据库中运行。所有返回的字段都是数据库中的VARCHAR,我需要我的程序获取VARCHAR 并将它们填充到各自的编辑控件中。到目前为止,getStringgetBlob 都不起作用。按序列号调用它们也不起作用。
    • 如果通过序列号调用结果集中的元素,它是否也会崩溃?您是否真的有该结果集返回的任何内容,即您是否连接到数据库?你如何创建你的 stmt 对象?最后但并非最不重要的一点是,您的查询是否应该在末尾有一个分号?
    • 是的,即使我通过它们的序列号调用元素,它也会崩溃。是的,我连接到该数据库,因为它在程序的另一部分成功地获取了 ID (int)。 stmt = con-&gt;createStatement(); 是在 WinMain 中创建的,就在创建对话框之前。而且我的查询有效,所以它不是分号。吹奏的是琴弦检索部分。 试图在控制台程序中复制它会给我一个溢出缓冲区错误。
    • 有趣。看起来字符串太大了?也许您应该尝试检查警告(使用stmt-&gt;getWarnings
    • 进一步的测试让我怀疑它与编码有关。数据库使用 UTF-8。我正在使用...呃...字符串...因为在getstring 上不会崩溃的字段显示有很多奇怪的字符。
    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2017-11-10
    • 2012-08-18
    • 2012-02-12
    • 2014-03-18
    • 2014-11-14
    • 2018-12-05
    相关资源
    最近更新 更多