基本的に、sqlite3 データベースを使用する pyqt アプリケーションがありますが、Cx_Freeze を使用して実行可能ファイルに変換しました。
データベースとクエリは .py として実行すると完全に実行されますが、cx_freeze を .exe に変換した後、GUI は問題なく動作しますが、データベースはクエリに応答しません。
セットアップ スクリプトのコードは次のとおりです。
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(packages = [],
excludes = [],
includes = ["sip", "PyQt5.QtSql"],
include_files = ["tpaData.db"])
import sys
base = 'Win32GUI' if sys.platform=='win32' else None
executables = [Executable('testTpa.py', base=base)]
setup(
name='Tpa APP',
version = '0.1',
description = 'A PyQt TPA Program',
options = dict(build_exe = buildOptions),
executables = executables
)
データベースとアプリをインスタンス化するために使用するコードは次のとおりです。
def __init__(self, dialog):
Ui_Form.__init__(self)
self.setupUi(dialog)
self.createConnection()
def createConnection(self):
self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName("tpaData.db")
self.db.open()
self.query = QtSql.QSqlQuery()
self.query.exec_("create table doses(dose text, bolus text, discard text, remaining text, time1 text, time2 text, time3 text, comment text)")
アプリの後半で、query.prepare メソッドを使用して入力の文字列を作成し、次に query.bind メソッドを使用して値を query.prepare 文字列にバインドします。最後に、query.exec_() を使用して、準備された文字列を送信します。
開発環境(.pyファイル)では動作しますが、cx_freezeを投稿するだけで失敗します。
助けてくれてありがとう。