QSqlDatabase :: record(const QString& tablename)返回空记录

时间:2017-03-17 17:19:30

标签: c++ qt qsqldatabase

我已经阅读了this个问题。我想使用方法QSqlDatabase :: record(const QString& tablename)获取表的字段名称。但它总是返回一个空记录。我可以通过QSQLQuery正确查询数据库表。我的数据库是SQL Server数据库。

1 个答案:

答案 0 :(得分:0)

其实你应该得到。

正如您所说的SQL服务器,请尝试使用“@yourtablename”。我的意思是说在你的QString中的表名之前加上“@”。

如果没有运气,

检查您的表名。 (空格或其他字符等。)

输入QString(安全方)。或者使用表名创建一个QString对象并传递它。

在传递之前修剪QString。

由于某种原因,如果您没有获得字段名称,请尝试以下步骤。

您的QSqlRecord QSqlDatabase::record(const QString &tablename) const将返回QSqlRecord对象

首先获取记录中的数字字段

int QSqlRecord::count() const

循环计数(例如:使用for)并使用以下函数获取每个索引的字段名称

QString QSqlRecord::fieldName(int index) const

下面的一些伪代码:(假设您已成功建立连接,未编译且未经过测试。)

QSqlRecord rec = QSqlDatabase::record("Your table name");

int count = rec.count();

QStringList fieldNames;

For (int i =0; i<count; i++)
{
    fieldNames.push_back(rec.fieldName(i);
}

按选择查询:

QSqlQuery select;
select.prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'");

if (select.exec() && select.next()) {
  QSqlRecord record = select.record();
}