2012-04-12 58 views

回答

2

你需要得到QSqlField值模型,這是由

QSqlRecord record = model->database().record(model->tableName()); 
QSqlField field = record.field(columnIndex); 

給出,那麼你就可以檢查是否字段可以爲null,與QSqlField::requiredStatus()的每一列(如果驅動程序支持查詢該屬性)並獲取其數據類型QSqlField::type()

2

從上面的alexisdm的回答中,我寫了這個簡單的代碼片段來輸出表中每個字段的屬性。張貼在這裏爲任何有興趣的人節省打字。

我還發現了一個疑難雜症:如果您使用table_model::record()table_model::record(int)你得到意想不到的(對我)的結果對於某些屬性,例如,isAutoValue似乎總是返回false,即使是指定在數據庫中的自動增量字段的字段。但是,對於typeID()(儘管我無法確定typeID()是什麼),您確實得到了實際值,而typeID()總是使用model->database().record(model->tableName())返回-1。

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(); 
    }