【问题标题】:How to declare a public database for all forms如何为所有表单声明一个公共数据库
【发布时间】:2017-05-01 18:40:39
【问题描述】:

我有一个需要始终打开数据库的 atm 应用程序(用户登录,所有信息都被收集并显示在下一个表单上)。目前我在每个表单的开头添加数据库,但我想知道是否有办法让我在程序开始时自动并通过公共中的 db.start() 和 db.end() 函数访问它类。

atmDB = QSqlDatabase::addDatabase("QSQLITE");
atmDB.setDatabaseName(Path_to_DB);
QFileInfo checkFile(Path_to_DB);

if(!atmDB.open()){
    ui->regStatus->setText("No connection to log-in database!");
}
else
    ui->regStatus->setText("Database connected!");enter code here

我在每个表单源文件的开头都有这个。

【问题讨论】:

标签: c++ qt sqlite


【解决方案1】:

看看下面的做法对你有没有用..

在您的 mainwindow 构造函数中添加您的数据库并提供连接名称。

QSqlDatabase atmDB = QSqlDatabase::addDatabase("QSQLITE","myConnection");
//Do all DB settings
atmDB.setDatabaseName(.....);
atmDB.setUserName(.....);
atmDB.setPassword(.....); 

现在在您的 .cpp 文件中,无论您需要在哪里调用 ::database 并使用它...

QSqlDatabase mydb = QSqlDatabase::database("myConnection",true);//by defualt second parameter is true,which opens the connection.
//
//
//YOUR BUSINESS
// 
//
mydb.close();

::addDatabase::database 都是 QSqlDatabase 的静态函数。

所以上面的做法应该可行。

【讨论】:

  • 嘿,伙计,由于某种原因,当我第一次调用 QSqlDatabase::database() 时,我的数据库被打开了,但是当我在按钮推送函数中调用它来进行查询时,我收到错误 QSqlQuery::exec : 数据库未打开
【解决方案2】:

你应该定义一个单一的实例类,并在其中设置数据库像

class DB
{
public:
static DB& instance();
bool getDB();
bool isOpen();
bool open();
bool close();
}

在函数中

bool getDB()
{
Mutex mutex;
if (!isOpen())
{
return open();
}
return true;
}

所以了解你的主要功能

int main()
{
DB::instance().open()
// you code...
DB::instance().close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2011-01-09
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2017-05-15
    相关资源
    最近更新 更多