|
问题是这样的:
QT程序在Fedora14下运行,连接MYSQL一切正常,驱动安装正常,可以实现正常的增删查改操作。
我现在需要的功能是,程序里面可以添加一个数据库A,并且将已有的模板库复制给新添加的数据库A。
在控制台下面
1、create database
2、use database
3、source /WS2014QT/build-WS2014-Debug/data/cg2004_empty.sql
红色部分为模板库所在的位置。以上3步骤在控制台中一切正常,实现了我要的,但是在程序里面,就不好用了。
程序里面一样的顺序:
1、创建数据库:(代码如下)该步骤执行正常,可以通过控制台输入命令,看到新建立的数据库
bool linkdata::createDatabase(QString dataBaseName)
{
QString sql = tr ("create database %1").arg(dataBaseName);
QSqlQuery sqls;
sqls.prepare(sql);
if(!sqls.exec())
{
QMessageBox::warning(0,"警告","新建变电站数据库失败!");
qDebug()<<"error"<<sqls.lastError().text();
return false;
}
else
{
qDebug()<<"Create DataBase success!";
return true;
}
}
2、使用数据库:(代码如下)该步骤执行正常,在程序中可以输出当前的数据库名称
bool linkdata::setDataBaseName(QString name)
{
database.close();
database = QSqlDatabase::addDatabase("QMYSQL");
database.setHostName("localhost");
database.setDatabaseName(name);
if(!database.open())
{
QMessageBox::warning(0,"警告","数据库连接错误!");
qDebug()<<"error"<<database.lastError().driverText();
}
else
{
qDebug()<<tr("Change DataBase %1 success!").arg(name);
}
return true ;
}
3、还原数据库:(代码如下)这里出问题了,执行不了,而且不输出最后的错误是什么。
bool linkdata::copyDataBase(QString targetDataBaseName, QString sourceDataBaseName)
{
QString Path=QCoreApplication::applicationDirPath()+"/data/";
sourceDataBaseName=Path+sourceDataBaseName;
setDataBaseName(targetDataBaseName);
// QString sql = "source ";
// sql.append(sourceDataBaseName);
QString sql = "source /WS2014QT/build-WS2014-Debug/data/cg2004_empty.sql";改为和控制台一样的指令也不行
qDebug()<<sql;
QSqlQuery sqls;
sqls.prepare(sql);
if(!sqls.exec())
{
QMessageBox::warning(0,"警告","复制空库至目标数据库失败!");
qDebug()<<"error"<<sqls.lastError().text();
return false;
}
else
{
qDebug()<<"Copy DataBase success!";
return true;
}
}
|
|