检测到可写段中%n ***%n的问题*** C ++ i Qt

时间:2010-09-23 14:14:50

标签: c++ qt

检测到可写段中%n *%n的问题* C ++ i Qt

我有处理大数据的程序,无法修改。在一个文件中,我们遇到“100%na”和应用程序停止。

当我使用debuger检查时,它会在检测到的可写段中返回 *%n

我无法更改可见数据,用户必须看到“100%na”。我想在%之后插入除空格之外的一些空格。

重写整个应用程序不是重点。它运行在Windows和Linuks上。

目前问题出在此代码中。我在其他地方检查了这个,它是一样的。变量是QStrings。

QSqlQuery query;

query.exec("insert into table_name ("+variable_with_columns_names+" values ("+variable_with_data_to_insert+");");

你有什么想法可以逃避吗?

修改

准备查询解决了这个问题。但它在其他方面有所突破。更新,选择......其中... ='100%na'(作为变量),生成报告和其他内容。更多的是,这些数据至少由5个模块使用,每个模块使用5个以上的数据表。所以我会等一段时间,如果有人有其他解决方案。

PS。还有一个问题: 为什么“%n”被解释为“%n”,何时不应该?

有趣的是,如果我将“100%na”更改为“100 %% na”,我应该将数据库“100 %% na”更改为“100%na”。

2 个答案:

答案 0 :(得分:1)

使用prepare准备查询。然后使用bindValue插入值。在这种情况下,应始终使用准备好的语句,因为它们会为您处理特殊字符的转义。

答案 1 :(得分:0)

QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (:id, :forename, :surname)");
     query.bindValue(0, 1001);
     query.bindValue(1, "Bart");
     query.bindValue(2, "Simpson");
     query.exec();

 QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (:id, :forename, :surname)");
     query.bindValue(":id", 1001);
     query.bindValue(":forename", "Bart");
     query.bindValue(":surname", "Simpson");
     query.exec();

  QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (?, ?, ?)");
     query.bindValue(0, 1001);
     query.bindValue(1, "Bart");
     query.bindValue(2, "Simpson");
     query.exec();

QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (?, ?, ?)");
     query.addBindValue(1001);
     query.addBindValue("Bart");
     query.addBindValue("Simpson");
     query.exec();

这些都有帮助吗?