Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyQt错误:QSqlDatabasePrivate::数据库:无法打开数据库_Qt_Sqlite_Pyqt - Fatal编程技术网

PyQt错误:QSqlDatabasePrivate::数据库:无法打开数据库

PyQt错误:QSqlDatabasePrivate::数据库:无法打开数据库,qt,sqlite,pyqt,Qt,Sqlite,Pyqt,以下错误的原因是什么: QSqlDatabasePrivate::数据库:无法打开数据库:无法打开数据库 打开数据库时发生文件错误 代码是100%正确的,当我重新安装Windows、Python和PyQt时出现此消息 编辑:我在具有.db文件属性的文件夹中有“只读”标志。当我取消设置并再次打开文件夹属性时,它将保持灰色(半选中)。我在文件夹属性中取消设置了“使用简单共享”标志,我有管理员权限,正如我所看到的,我的计算机上没有病毒。这个讨厌的问题在超级用户身上也没有解决方案。如何为此文件夹和文件设

以下错误的原因是什么: QSqlDatabasePrivate::数据库:无法打开数据库:无法打开数据库 打开数据库时发生文件错误

代码是100%正确的,当我重新安装Windows、Python和PyQt时出现此消息


编辑:我在具有.db文件属性的文件夹中有“只读”标志。当我取消设置并再次打开文件夹属性时,它将保持灰色(半选中)。我在文件夹属性中取消设置了“使用简单共享”标志,我有管理员权限,正如我所看到的,我的计算机上没有病毒。这个讨厌的问题在超级用户身上也没有解决方案。如何为此文件夹和文件设置sqlite的适当权限?

在以下情况下会发生上述错误:

  • Qt认为数据库有效
  • 数据库未打开,并且
  • 它无法打开数据库
您可以从src/sql/kernel/qsqldatabase.cpp(从4.6.2开始)中的以下代码中看到:

QSqlDatabase QSqlDatabasePrivate::database(const-QString&name,bool-open)
{
常量QConnectionDict*dict=dbDict();
Q_断言(dict);
dict->lock.lockForRead();
QSqlDatabase db=dict->value(名称);
dict->lock.unlock();
if(db.isValid()&&!db.isOpen()&&open){
如果(!db.open())

qWarning()这个问题的另一个原因可能是路径编码。在我的例子中,使用
unicode(name)
解决了这个问题

QSqlDatabase QSqlDatabasePrivate::database(const QString& name, bool open)
{
    const QConnectionDict *dict = dbDict();
    Q_ASSERT(dict);

    dict->lock.lockForRead();
    QSqlDatabase db = dict->value(name);
    dict->lock.unlock();
    if (db.isValid() && !db.isOpen() && open) {
        if (!db.open())
            qWarning() << "QSqlDatabasePrivate::database: unable to open database:" << db.lastError().text();                                                                                                                                

    }
    return db;
}