首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置/读取QSqlRelationalTableModel列属性和约束?

如何设置/读取QSqlRelationalTableModel列属性和约束?
EN

Stack Overflow用户
提问于 2012-04-13 04:06:11
回答 2查看 1.6K关注 0票数 3

有没有办法检查QSqlRelationalTableModel中每一列的属性和约束?例如,我想询问我的QSqlRelationalTableModel对象某个列是否可以包含空值,或者该列的数据类型是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-13 07:52:27

您需要为模型的每一列获取一个QSqlField值,该值由

代码语言:javascript
复制
QSqlRecord record = model->database().record(model->tableName());
QSqlField field = record.field(columnIndex);

然后,您将能够使用QSqlField::requiredStatus()检查字段是否可以为空(如果驱动程序支持查询该属性),并使用QSqlField::type()获取其数据类型。

票数 2
EN

Stack Overflow用户

发布于 2012-04-13 23:53:13

根据alexisdm上面的回答,我编写了这个简单的代码片段来输出表中每个字段的属性。在这里张贴它,以便为其他感兴趣的人节省键入内容。

我还发现了一个问题:如果你使用table_model::record()table_model::record(int),你会得到(对我来说)一些属性的意外结果,例如,isAutoValue似乎总是返回false,即使是数据库中指定为自动增量字段的字段也是如此。但是,您确实得到了typeID()的实际值(尽管我还不能确定typeID()是什么),而使用model->database().record(model->tableName())时,typeID()总是为我返回-1。

代码语言:javascript
复制
  QSqlRecord record = table_model->database().record(table_model->tableName());
  // the following get isAutoValue() wrong; but have a real typeID()
  //QSqlRecord record = table_model->record();  
  //QSqlRecord record = table_model->record(table_model->rowCount() - 1);
  qDebug() << "********** table" << table_model->tableName() << "*********";
  for (int i = 0; i < table_model->columnCount(); ++i) {
    QSqlField field = record.field(i);
    qDebug() << "---------- field" << i << field.name() << "--------";
    qDebug() << "default value" << field.defaultValue();
    qDebug() << "is auto value" << field.isAutoValue();
    qDebug() << "is generated" << field.isGenerated();
    qDebug() << "is null" << field.isNull();
    qDebug() << "is read only" << field.isReadOnly();
    qDebug() << "is valid" << field.isValid();
    qDebug() << "length" << field.length();
    qDebug() << "precision" << field.precision();
    qDebug() << "required status" << field.requiredStatus();
    qDebug() << "type" << field.type();
    qDebug() << "type id" << field.typeID();
    qDebug() << "value" << field.value();
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10130978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档