TableSchema::TableSchema(const QString &table, const QString &env) : tablename(table) { if (!dbSettings) { QString path = QLatin1String("config") + QDir::separator() + "database.ini"; if (!QFile::exists(path)) { qCritical("not found, %s", qPrintable(path)); } dbSettings = new QSettings(path, QSettings::IniFormat); } if (openDatabase(env)) { if (!tablename.isEmpty()) { QSqlTableModel model; model.setTable(tablename); tableFields = model.record(); if (model.database().driverName().toUpper() == "QPSQL") { // QPSQLResult doesn't call QSqlField::setAutoValue(), fix it for (int i = 0; i < tableFields.count(); ++i) { QSqlField f = tableFields.field(i); if (f.defaultValue().toString().startsWith(QLatin1String("nextval"))) { f.setAutoValue(true); tableFields.replace(i, f); } } } } else { qCritical("Empty table name"); } } }