0

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

4

1 回答 1

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();
}
于 2017-03-17T18:51:00.470 回答