#include <QSqlDatabase> #include <QSqlQuery> #include <QSqlRecord> #include <QDebug> int main(int argc, char *argv[]) { QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); QString name = "DSN=dmtest;server=localhost;TCP_PORT=5236;uid=SYSDBA;pwd=*********"; db.setDatabaseName(name); if(!db.open()) //打开数据库 { qDebug()<<"i am wrong"; return false; //打开失败 } else { QSqlQuery query(db); //查询Card表并输出,测试可否正常操做数据库 bool a=query.exec("CREATE TABLE TESTDM.MB(ADDRESSID INT PRIMARY KEY,ADDRESS1 VARCHAR(60) NOT NULL,ADDRESS2 VARCHAR(60))"); if(a) { qDebug()<<"database open success!"; } while(query.next()) { qDebug()<<query.value(0).toString() <<query.value(1).toString() <<query.value(2).toInt(); } }return true; }
若是想使达梦数据库可以正常运行,首先要保证DM-SQL语句的格式正确性,例如代码中数据库
CREATE TABLE TESTDM.MB(ADDRESSID INT PRIMARY KEY,ADDRESS1 VARCHAR(60) NOT NULL,ADDRESS2 VARCHAR(60))
其中TESTDM是模式名,MB是该模式下的表名测试
后记:我认为之因此会成功是由于TESTDM模式的模式拥有者是SYSDBA,而数据源的的ID也是SYSDBA,而且SYSDBA权限最大(我的认为是最大),因此能执行成功,而且在SYSDBA帐号下,由于权限最大因此基本上全部的模式都能进行SQL语句处理,而若是当初设置数据源时用的不是SYSDBA帐号而是其余用户帐号,可能非用户下的模式就没法进行SQL语句执行ui