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远程连接几个数据库遇到的问题及解决方案!
。。。。。。