问题标签 [qsqldatabase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8605 浏览

qt - Qt - 如何使用“WHERE ... IN”子句将 QList 绑定到 QSqlQuery?

注意:这是使用 SQLite,尽管我预计问题出在 Qt 方面。

首先,我通过 SQLite 命令行工具设置了一个数据库表:

然后我测试我的查询:

(这些是预期的结果。)

然后我运行这个 C++ 代码:

打印这个:

之前
之后

没有打印行。我认为这是因为我无法将列表直接绑定到“in”子句中的占位符。但是有没有办法做到这一点?我无法找到任何关于此的信息。

0 投票
2 回答
166 浏览

c++ - 无法通过可执行文件连接到数据库

我写了一个程序,需要连接到数据库来插入一些数据,我的可执行文件没有连接到数据库但是当我检查代码连接建立时!我不知道是什么问题,你知道是什么问题吗?我使用 Qt 连接到数据库,我的数据库在 mySql 上,这是我的连接方式:

0 投票
3 回答
8458 浏览

c++ - Qt5.2可以找到mysql驱动但是加载不出来

操作系统:win7 编译器:mingw4.8(Qt5.2 附带)链接到:Fedora 核心版本 5,内核 2.6.15-1.2054_FC5 smp on an i686

消息

QSqlDatabase:未加载 QMYSQL 驱动程序 QSqlDatabase:可用驱动程序:QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL 7 “未找到共享库。” 驱动程序:(“QSQLITE”、“QMYSQL”、“QMYSQL3”、“QODBC”、“QODBC3”、“QPSQL”、“QPSQL7”)

“未加载驱动程序未加载驱动程序”</p>

0 投票
2 回答
1222 浏览

c++ - Qt5.2.0;Debian Wheezy:QSqlDatabase 析构函数导致段错误

我有一个利用包装类来访问 MySQL 数据库的应用程序。由于在应用程序的不同位置访问数据库,并且应用程序是多线程的,因此使用包装器类来最小化访问数据库所需的重复代码量。

我在某处读到QSqlDatabase必须在同一个线程中构造、使用和销毁 a 。如果您在一个线程中创建连接,然后在另一个线程中破坏它,则可能会出现未记录/不受支持的行为。为了防止这种情况,包装器在设置之前创建连接QSqlQuery,然后在查询完成时关闭并删除该连接。建立一个连接池并在整个应用程序执行期间保持它们处于活动状态实际上并不可行,因为在任何给定时间都有任意数量的线程在运行,每个线程可能需要异步执行多个数据库任务,因此不完全是线程和数据库连接之间的 1-1 关联开始。

问题是应用程序运行一段时间后,它会因段错误而崩溃,这归咎于QSqlDatabase析构函数。奇怪的是,该错误仅在应用程序运行一段时间并完成大量查询后才会出现。(有时它会在 15 分钟后崩溃,有时会在几个小时后崩溃)。最近的堆栈跟踪:

这是包装类头文件:

包装类 CPP 文件:

为什么这个相当简单的析构函数会导致段错误并使应用程序崩溃?

0 投票
1 回答
8312 浏览

database - 尝试使用 Qt 连接到 Postgres

目前,我正在开展一个边做边学的项目,该项目应该使用数据库来保存数据。我正在使用 Qt C++ 并且我已经安装了 postgres.app。

我第一次尝试编写连接方法主要取自这个来源(http://www.youtube.com/watch?v=3XE2bKUAxfw),经过一些修改后看起来像这样:

第一种方法产生错误:“无法连接到服务器:没有这样的文件或目录服务器是否在本地运行并接受 Unix 域套接字上的连接“/var/pgsql_socket/.s.PGSQL.5432”?QPSQL:无法连接"

在我无法解决这个问题之后,我决定从头开始这个方法。这是我在一些互联网研究和阅读 Qt 文档后得出的结论:

此方法导致错误“致命:用户“janhettenkofer”的密码验证失败”

我用这里解释的方法摆脱了另一个 PostgreSQL 安装:https ://stackoverflow.com/a/20010057 。现在我用第二个函数得到这个错误(它没有改变第一个错误消息):“致命:数据库“mydb”不存在 QPSQL:无法连接”

在上面提到的线程中,提出了另一种修复第一个错误的方法,但是当我打开终端并输入“which psql”时什么也没发生,甚至没有显示“command not found”消息。而且我不知道如何应用有关导出路径的建议。谷歌只告诉我应该这样做,但不告诉我怎么做。终端是我刚刚学习使用的另一件事。

感谢您提前提供有关如何使用终端的任何想法或建议。

编辑:

好的,我发现了如何将 psql 添加到 PATH 中。现在我可以跑了which psql。这指向我正在使用的 Postgres.app 安装。之后,我创建了用户数据库数据库。我可以使用 Qt 或终端连接到该数据库。但是我无法创建任何其他数据库。据我了解,你这样做createdb mydb,然后CREATE DATABASE。在我这样做之后\list仍然只显示用户数据库、postgres 数据库和 template0 和 template1。没有mydb。

0 投票
1 回答
639 浏览

qt - 无法使用 QSQLITE2 Qt 插件加载 sqlite.dll

我使用 QtCreator + mingw。

我已经编译了 QSQLITE2 插件。我只是在 Qt 源代码中输入了插件目录:

c:\Qt\Qt5.2.0\5.2.0\Src\qtbase\src\plugins\sqldrivers\sqlite

我用我在本地拥有的 sqlite 2.8.17 构建了它(作为 dll 和标题):

qmake "LIBS+=-Lc:\projects\lib -lsqlite" "INCLUDEPATH+=c:\projects\include"
make
make install

一切正常。

现在,我有另一个 DLL(也实现为 Qt 插件,一个自定义的),它使用 QSQLITE2 Qt 插件。我自己的 dll 也链接到 sqlite.dll。所以它看起来像这样:

问题是我的应用程序无法加载 my.dll,因为invalid location access或类似的原因。我不知道任何细节,这就是问题所在。

sqlite.dll运行时位于应用程序目录中。

当我在调试模式下运行应用程序时,它在某个程序集文件中崩溃,但在堆栈跟踪中我可以看到它位于 sqlite.dll 内的某处,在 sqlite_step 符号中。这是我所知道的一切。

注意 1)我有另一个插件 dll,my3.dll它使用 QSQLITE 插件(它用于 sqlite3)并与之链接,sqlite3.dll并且这个加载得很好。我自己也编译了 QSQLITE 插件(即使有 Qt 提供的插件,那是因为 Qt 静态链接到 sqlite3 而我希望它动态链接到sqlite3.dll)。

注 2)这两个插件在 Linux 下都可以正常工作。

任何提示可能有什么问题?我还能检查什么?

编辑:

我刚刚进行了一个测试:我my.dll从插件中删除以避免加载它。然后我将代码添加到main.cpp

事情是,它也崩溃了,具有相同的堆栈跟踪(在这一行,我调试了它)。因此我认为 sqlite2 Qt 插件有问题,但我仍然无法判断是什么。我查找了其他sqlite.dll,我刚刚从 sqlite.org 下载了一个:http ://www.sqlite.org/sqlitedll-2_8_17.zip - 所以它是官方构建,但它与我拥有的完全相同的文件,它也失败了一样的方法。

0 投票
1 回答
569 浏览

qt - QSqlDatabase:未加载 QTDS 驱动程序

我有一个使用 QTDS 驱动程序的程序。

在开发环境中一切正常。在生产中,我同时拥有具有适当权限的 TDS 插件和 sybdb。

  1. -rwxr-xr-x 1 foxprd foxprd 47880 Jan 29 17:33 libqsqltds.so*
  2. -rwxr-xr-x 1 foxprd foxprd 472579 Jan 29 17:33 libsybdb.so*

它们都在已添加到 LD_LIBRARY_PATH 的目录中

然而我得到了

编辑 我也可以说:

指向一个目录,其中有一个包含所有库的 sqldrivers/ 目录如果我在 dev 中重命名这个目录,我会得到同样的错误,如果我把它放回去,它会再次工作。

  1. MyappDir/sqldrivers/libqsqltds.so
  2. MyappDir/sqldrivers/libsybdb.so
  3. MyappDir/sqldrivers/libsybdb.so.5

在 dev 中,当且仅当此目录在这里时,它才有效。在 Prod 中,这两种情况都不起作用。虽然“MyappDir/”总是列在

0 投票
1 回答
364 浏览

qt - QtSql 模糊搜索

我正在使用 qt 中的 QSQLITE 数据库并尝试在我们的程序中实现模糊搜索,我们的 sql 查询是这样的:

它是不一样的查询更长有连接等。我尝试使用 SOUND 和 SOUNDEX() 但我认为 QSQLITE 不支持它们有什么方法可以在这里实现模糊搜索?

0 投票
1 回答
541 浏览

sql - QSqlField 真实类型名

我正在寻找一种从 qtsql 模型中检索真实数据库类型名称的方法。

很遗憾

字段是QSqlField类型

给了我已经映射到某些 Qt 类型的类型。是否可以使用 Qt 获得真实姓名?

0 投票
2 回答
5704 浏览

c++ - sql数据库更改是否有任何qt信号?

我使用 Qt 编写了一个 C++ 程序。我的算法中的一些变量在我的程序之外和网页中发生了变化。每次用户更改网页中的变量值时,我都会修改预先创建的 SQL 数据库。现在我希望我的代码在运行时更改变量值而不停止代码。有两种选择:

  1. 每 n 秒检查一次数据库并检索变量value- > 这不好,因为我必须检查数据库内容是否每 n 秒更改一次(可能多年来没有任何变化。另外我不想检查数据库是否内容变了)

  2. 每次更改数据库时,我的 Qt 程序都会发出一个信号,因此通过捕获该信号,我可以刷新变量值,这似乎是一个最佳解决方案,我想为此部分编写代码

我的代码的 C++ 部分是: