QString Qid = uilineEdit-text; id = QidtoStdString; if idempty QString text = QStringLiteral输入编号为空!; emit sendtexttext; 传出子窗体信号 newW-show; else 查询数据 char value100; sprintfvalue SELECT FROM m
在上述代码中,m[1]为空是因为在获取查询结果时,使用了错误的索引。在while循环中的代码中,row[0]表示查询结果的第一列,而row[1]表示查询结果的第二列。
因此,正确的代码应该是将m[1]替换为m[0],如下所示:
QString text = QString::fromStdString(m[0]);
另外,还需要将获取查询结果的代码放在while循环的外部,以便在循环结束后进行相应的操作。修改后的代码如下所示:
QString Qid = ui.lineEdit->text();
id = Qid.toStdString();
if (id.empty())
{
QString text = QStringLiteral("输入编号为空!");
emit sendtext(text); //传出子窗体信号
newW->show();
}
else
{
//查询数据
char value[100];
sprintf(value, "SELECT * FROM measurement WHERE id = %d", atoi(id.c_str()));
//const char* value = "select * from measurement where id = '22050534'";
if (mysql_query(&m, value))
{
printf("未查到记录:%s \n", mysql_error(&m));
QString text = QStringLiteral("未查到记录!");
emit sendtext(text); //传出子窗体信号
newW->show();
}
else
{
printf("查询成功 \n");
//获取查询结果
res = mysql_store_result(&m);
if (res)
{
printf("获取到数据\n");
//设置表格行数列数
ui.tableWidget->setRowCount(11);
ui.tableWidget->setColumnCount(3);
//设置表格中每一行的表头
QString tablehead1 = QStringLiteral("实测值"), tablehead2 = QStringLiteral("理想值"), tablehead3 = QStringLiteral("误差");
ui.tableWidget->setHorizontalHeaderLabels(QStringList() << tablehead1 << tablehead2 << tablehead3);
//设置表格数据区内的所有单元格都不允许编辑
ui.tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
//设置指定行的宽度
ui.tableWidget->setColumnWidth(0, 260);
ui.tableWidget->setColumnWidth(1, 260);
ui.tableWidget->setColumnWidth(2, 260);
//打印获取到的数据
printf(" id \t\t v0\t v1\t v2\t v3\t v4\t v5\t v6\t v7\t v8\t v9\t v10\n");
while (row = mysql_fetch_row(res))
{
float k = (stof(row[11]) - stof(row[1])) / 10;
printf("%s\t", row[0]);
string m[11];
for (int i = 0; i < 11; i++)
{
printf("%s\t", row[i + 1]);
m[i] = row[i + 1];
//v[i] = stof(row[i + 1]);
//s[i] = stof(row[1]) + i * k;
//vs[i] = stof(row[i + 1]) - stof(row[1]) - i * k;
i++;
}
printf("\n");
/**/
//QString text = QString::fromStdString(to_string(v[1]));
QString text = QString::fromStdString(m[0]);
emit sendtext(text); //传出子窗体信号
newW->show();
//设置表格中每一行的内容
for (int i = 0; i < 11; i++)
{
ui.tableWidget->setItem(i, 0, new QTableWidgetItem(QString::fromStdString(row[i + 1])));
}
for (int i = 0; i < 11; i++)
{
ui.tableWidget->setItem(i, 1, new QTableWidgetItem(QString::number(stof(row[1]) + i * k)));
}
for (int i = 0; i < 11; i++)
{
ui.tableWidget->setItem(i, 2, new QTableWidgetItem(QString::number(stof(row[i + 1]) - stof(row[1]) - i * k)));
}
}
}
else
{
printf("未获取到数据:%s \n", mysql_error(&m));
QString text = QStringLiteral("未获取到数据!");
emit sendtext(text); //传出子窗体信号
newW->show();
}
}
//释放资源
mysql_free_result(res);//释放结果集
//mysql_close(&m);//关闭数据库
}
请注意,这只是修复了m[1]为空的问题,并对代码进行了一些调整。如果仍然存在其他问题,可能需要进一步检查代码和调试
原文地址: https://www.cveoy.top/t/topic/iq0P 著作权归作者所有。请勿转载和采集!