• 1159阅读
  • 5回复

QSqlDatabase无法在开机自启动时加载数据 [复制链接]

上一主题 下一主题
离线wlq19911021
 

只看楼主 倒序阅读 楼主  发表于: 2022-04-23
QSqlDatabase无法在开机自启动时加载数据
环境:Win10 X64 + mingw64 + Qt5.12.0
数据库类型:SQLite3
目前手动启动是正常的,开机自启自动加载就没有数据(且没有任何报错);程序文件夹放在非系统目录,理应不涉及权限问题;有用过QSqlDatabase + SQLite开机自启加载的大哥麻烦帮个小忙,小弟先谢过了
离线liudianwu

只看该作者 1楼 发表于: 2022-04-24
延时启动试试
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线spygg

只看该作者 2楼 发表于: 2022-04-24
打印下日志呢? 如果你的是在注册表设置的开机启动会出好多问题,比如各种com加载可能会出问题
签名就是这么浪
离线clickto

只看该作者 3楼 发表于: 2022-04-24
没遇到过。我们开发工控软件,也是开机启动,也是使用的sqlite3,环境是mingw32,Qt5.11,没遇到过你所说的情况。
你可以在程序启动若干时间后再初始化数据库试试看?
离线圣域天子

只看该作者 4楼 发表于: 2022-04-25
DB服务可能还没有启动好,如果你做的也是服务,需要加一个依赖
如果不是,我以前做法是半分钟连接一次,三分钟后还不行,才退出程序并报错
离线spygg

只看该作者 5楼 发表于: 2022-04-25
回 圣域天子 的帖子
圣域天子:
DB服务可能还没有启动好,如果你做的也是服务,需要加一个依赖
如果不是,我以前做法是半分钟连接一次,三分钟后还不行,才退出程序并报错

用这种添加启动快捷方式的方法安全无痛.....
1.适应各种情况
2.不会被杀软拦截
  1. /*!
  2. * \brief runWithWindows
  3. * \param autoRun
  4. * \param exeName     should be QCoreApplication::applicationFilePath()
  5. * \param linkName    whatever
  6. */
  7. void runWithWindows(bool autoRun, QString exeName, QString linkName)
  8. {
  9. #ifdef Q_OS_WIN
  10.     QString startUpPath = QString("%1/%2")
  11.             .arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation))
  12.             .arg("Startup");
  13.     QDir dir;
  14.     if(!dir.exists(startUpPath)){
  15.         startUpPath = QString("%1/%2")
  16.                 .arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation))
  17.                 .arg("启动");
  18.     }
  19.     QString linkFull = QString("%1/%2.lnk")
  20.             .arg(startUpPath)
  21.             .arg(linkName);
  22.     if(autoRun){
  23.         //如果文件不一致,则创建
  24.         if(QFile::symLinkTarget(linkFull) != exeName){
  25.             QFile::link(exeName, linkFull);
  26.         }
  27.     }
  28.     else{
  29.         if(QFile::exists(linkFull)){
  30.             QFile::remove(linkFull);
  31.         }
  32.     }
  33. #else
  34.     /// 编写 etc/rc.local 编辑“/etc/rc.local”,把启动程序的shell命令输入进去即可(要输入命令的全路径),类似于windows下的“启动”
  35. #endif
  36. }

签名就是这么浪
快速回复
限100 字节
 
上一个 下一个