Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql QSqlRecord:从QT中的SQLite表访问数值,结果为空_Mysql_Qt_Sqlite_Record - Fatal编程技术网

Mysql QSqlRecord:从QT中的SQLite表访问数值,结果为空

Mysql QSqlRecord:从QT中的SQLite表访问数值,结果为空,mysql,qt,sqlite,record,Mysql,Qt,Sqlite,Record,我的问题与我见过的一些问题类似,但解决方案似乎对我不起作用,因此我将添加一个新的问题: 我正试图通过以下查询将SQLite表中最高用户ID的数值访问到我的QT程序中: SELECT Name, MAX(ID) FROM User_lib; 这在命令shell中工作,并获得预期的结果 然后,我尝试通过以下方式访问最大ID值: QSqlQuery qry_ID; qry_ID.prepare("SELECT Name, MAX(User_lib.ID) FROM User_lib");

我的问题与我见过的一些问题类似,但解决方案似乎对我不起作用,因此我将添加一个新的问题:

我正试图通过以下查询将SQLite表中最高用户ID的数值访问到我的QT程序中:

SELECT Name, MAX(ID) FROM User_lib;
这在命令shell中工作,并获得预期的结果

然后,我尝试通过以下方式访问最大ID值:

QSqlQuery qry_ID;    
qry_ID.prepare("SELECT Name, MAX(User_lib.ID) FROM User_lib");   
qry_ID.exec()
qDebug() << qry_ID.record().value("ID").toInt();
我在其他几个答案中看到的结果给了我-1。 另一方面,

qDebug() << "Number of columns: " << qry_ID.record().count();
按预期为我提供列数2。查询似乎没有给出任何结果


起初,我认为我的查询有问题,但当我试图计算查询中的行数时,同样的事情也发生了。当查询表显示时,我可以正确地添加元素,等等,所以我想我一定是在QT中做错了什么

让我们看看您在命令行shell中实际得到了什么:

sqlite> .mode columns sqlite> .header on sqlite> SELECT Name, MAX(ID) FROM User_lib; Name MAX(ID) ---------- ---------- user30248 8562493 因此,在从查询获得的输出中,第二列的名称不是ID,而是MAXID

事实上,报告说:

如果存在AS子句,则结果列的名称是该列的AS子句的值。如果没有AS子句,则列的名称未指定,并且可能会从一个SQLite版本更改为下一个版本

因此,使用AS或通过其索引访问列


SQLite根据需要计算输出行,因此在读取所有行之前不可能给出行的计数。因此,SQLite驱动程序不支持它。

我还没有检查上面CL的答案,我相信它也会起作用,但我已经设法找到了一个对我有用的替代解决方案,可能会很有趣。由于QsqlQuery的内部指针设置为第一条记录前面的一个字段,因此我必须继续下一条记录。这是有效的代码:

QSqlQuery qry_ID;
qry_ID.prepare("SELECT Name, MAX(ID) FROM User_lib");
qry_ID.exec();   
qry_ID.next();

QString name = qry_ID.value(0).toString();
int IDmax = qry_ID.value(1).toInt();                

如果需要访问不同的行,则需要while循环,但这是另一个问题。

如何获取qry\u ID值?这是查询名称:qry\u ID.prepareSELECT name,来自User\u lib的MAXUser\u lib.ID;将相应地编辑我的问题。但您执行了吗?如果是,如何进行?请显示更多的代码。我刚刚澄清了上面的代码。回答您的问题:是的,我执行了它。qry_ID.lastError.text返回什么?
QSqlQuery qry_ID;
qry_ID.prepare("SELECT Name, MAX(ID) FROM User_lib");
qry_ID.exec();   
qry_ID.next();

QString name = qry_ID.value(0).toString();
int IDmax = qry_ID.value(1).toInt();