Qt连接access、Oracle、MySql、SqlServer数据库

时间:2021-05-10 13:10:48

1.连接access数据库

/*连接access数据库*/
QString sDbNm = "accessDb.mdb";
void MainDialog::connectAccess()
{
    db = QSqlDatabase::addDatabase("QODBC");
    QString dsn = QString("DRIVER={Microsoft Access Driver (*.mdb)}; FIL={MS Access};DBQ=%1;").arg(sDbNm);
    db.setDatabaseName(dsn);
    //db.setUserName(UserName);
    //db.setPassword(Password);
    if (db.open())
    {
        QMessageBox::information(this, tr("提示"), tr("数据库连接成功!"), tr("确定"));
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("数据库连接失败!"), tr("确定"));
        qDebug() <<"error_Access:\n" << db.lastError().text();
    }
    db.close();
}

2.连接SQLServer2000数据库

/**连接sql server数据库
  *数据库名:abc
  *表名:SQL_2000
  *用户名:sa
  *密码:123
  *端口号:(默认)1433
*/
void MainDialog::connectSql(QString sIp, int iPort,  QString sDbNm, QString sUserNm, QString sPwd)
{
    db = QSqlDatabase::addDatabase("QODBC");
    QString dsn = QString("Driver={sql server};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;")
                  .arg(sIp)
                  .arg(iPort)
                  .arg(sDbNm)
                  .arg(sUserNm)
                  .arg(sPwd);
    db.setDatabaseName(dsn);


    /*连接sql 2000*/
    bool r = db.open();
    if (r)
    {
        qDebug() << "SQL Server 2000 Connect OK!";

        /* 计算当前表中id*/
        QSqlQuery query1 = QSqlQuery(db);
        query1.clear();
        query1.prepare("select top 1 ID from SQL_2000 order by ID desc");
        bool a = query1.exec();
        int id;
        if (a)
        {
            while(query1.next())
            {
                id = query1.value(0).toInt();
            }
        }

        /*插入数据*/
        QSqlQuery query2 = QSqlQuery(db);
        QString sq1 = QObject::tr("insert into SQL_2000(Id,Ip,Port,UserName,Password,DbType,DbName)"
                                  "values (?, ?, ?, ?, ?, ?, ?)");
        bool b = query2.prepare(sq1);
        if(b)
        {
            qDebug() << "insert data success!";
        }
        query2.bindValue(0, id+1);
        query2.bindValue(1, sIp);
        query2.bindValue(2, iPort);
        query2.bindValue(3, sUserNm);
        query2.bindValue(4, sPwd);
        query2.bindValue(5, sDbType);
        query2.bindValue(6, sDbNm);

        /*查询数据*/
        QSqlQuery query3 = QSqlQuery(db);
        query3.prepare("select * from SQL_2000 where Id=1");
        bool c = query3.exec();
        if (c)
        {
            qDebug() << "select data success!";
            while(query3.next())
            {
                qDebug() << query3.value(0);
                qDebug() << query3.value(1);
                qDebug() << query3.value(2).toInt();
            }
        }
        else
        {
            qDebug() << query3.lastError().text().data();
        }

        /*删除数据*/
        QSqlQuery query4 = QSqlQuery(db);
        query4.prepare("delete from SQL_2000 where Id=1");
        bool d = query4.exec();
        if (d)
        {
            qDebug() << "delete data success!";
        }
        else
        {
            qDebug() << query3.lastError().text().data();
        }
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("Sql Server数据库连接失败!"), tr("确定"));
        qDebug() <<"error_SqlServer:\n" << db.lastError().text();
    }

    db.close();
}

3.连接oracle数据库
/**连接Oracle数据库
  *数据库名:abc
  *表名:my_oracle
  *用户名:system
  *密码:123
  *端口号:(默认)1521
*/
void MainDialog::connectOracle(QString sIp, int iPort,  QString sDbNm, QString sUserNm, QString sPwd)
{
    db = QSqlDatabase::addDatabase("QOCI");
    db.setHostName(sIp);
    db.setPort(iPort);
    db.setDatabaseName(sDbNm);
    db.setUserName(sUserNm);
    db.setPassword(sPwd);
    if (db.open())
    {
        QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接成功!"), tr("确定"));
    }
    else
    {
        QMessageBox::information(this, tr("提示"), tr("Oracle数据库连接失败!"), tr("确定"));
        qDebug() <<"error_Oracle:\n" << db.lastError().text();
    }
}
4.连接MySql数据库

/**连接MySql数据库
  *数据库名:abcn
  *表名:my_sql
  *用户名:root
  *密码:123
  *端口号:3306
*/
void MainDialog::connectMySQL(QString sIp, int iPort,  QString sDbNm, QString sUserNm, QString sPwd)
{
    db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
    db.setHostName(sIp);        // IP地址
    db.setPort(iPort);          // 端口号
    db.setDatabaseName(sDbNm);  // 数据库名称
    db.setUserName(sUserNm);    // 用户名
    db.setPassword(sPwd);       // 密码
    bool ok = db.open();        // 尝试连接数据库
    if(ok)
    {
        qDebug() << "connect MySql success!";
      
    }
    else // 打开数据库失败
    {

        QMessageBox::information(this, tr("提示"), tr("MySql数据库连接失败!"), tr("确定"));
        qDebug() <<"error_MySql:\n" << db.lastError().text();
    }

}

对写入ip的控件设置:

//设置ip号

    QRegExp rx1("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$");
    QValidator* inputValueValidator = new QRegExpValidator(rx1, this);
    ui->ipLine->setValidator(inputValueValidator);


ok!以上是Qt连接几个数据库的代码(本机访问与远程访问代码是相同的。)

后边的博客我将慢慢归纳Qt远程连接几个数据库遇到的问题及解决方案!

。。。。。。