問題タブ [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.
qt - Qt-「WHERE...IN」句を使用してQListをQSqlQueryにバインドする方法は?
注:これはSQLiteの場合ですが、問題はQt側にあると思います。
まず、SQLiteコマンドラインツールからデータベーステーブルを設定します。
次に、クエリをテストします。
(これらは期待される結果です。)
次に、このC++コードを実行します。
これを印刷します:
前後
_
行は印刷されませんでした。これは、「in」句でリストをプレースホルダーに直接バインドできないためだと思います。しかし、それを行う方法はありますか?私はこれについて何も見つけることができませんでした。
c++ - Qt5.2.0; Debian Wheezy: QSqlDatabase デストラクタが segfault を引き起こす
ラッパー クラスを使用して MySQL データベースにアクセスするアプリがあります。データベースはアプリ内のさまざまな場所でアクセスされ、アプリはマルチスレッドであるため、ラッパー クラスを使用して、DB へのアクセスに必要な反復コードの量を最小限に抑えます。
QSqlDatabase
同じスレッド内で a を構築、使用、および破棄する必要があることをどこかで読みました。あるスレッドで接続を作成し、別のスレッドで破棄すると、文書化されていない/サポートされていない動作が発生する可能性があります。これを防ぐために、ラッパーは を設定する直前に接続を作成しQSqlQuery
、クエリが完了するとその接続を閉じて削除します。接続のプールを設定し、アプリの実行中にそれらを維持することは、実際には実行可能ではありません。これは、任意の時点で実行されているスレッドの数が多く、それぞれが複数の DB タスクを非同期で実行する必要がある場合があるためです。まず、スレッドとデータベース接続の間の 1 対 1 の相関関係。
問題は、アプリがしばらく実行された後、デストラクタを非難する segfault でクラッシュすることQSqlDatabase
です。奇妙なことは、アプリがしばらく実行され、多数のクエリが実行された後にのみエラーが表示されることです。(15 分後にクラッシュすることもあれば、数時間後にクラッシュすることもあります)。最新のスタック トレース:
ラッパー クラスのヘッダー ファイルは次のとおりです。
ラッパー クラス CPP ファイル:
このかなり単純なデストラクタがセグメンテーション違反を引き起こし、アプリをクラッシュさせるのはなぜでしょうか?
database - QtでPostgresに接続しようとしています
現在、データベースを使用してデータを保存するプロジェクトを行うことで、学習に取り組んでいます。Qt C++ を使用しており、postgres.app をインストールしました。
接続メソッドを作成する最初の試みは、主にこのソース ( http://www.youtube.com/watch?v=3XE2bKUAxfw ) から取得され、いくつかの変更後に次のようになります。
この最初の方法では、「サーバーに接続できませんでした: そのようなファイルまたはディレクトリはありませんサーバーはローカルで実行されており、Unix ドメイン ソケットで接続を受け入れていますか "/var/pgsql_socket/.s.PGSQL.5432"? QPSQL: 接続できません」というエラーが発生します。 "
この問題を解決できなかったので、この方法を最初からやり直すことにしました。これは、いくつかのインターネット調査とQtドキュメントを読んだ後、私が思いついたものです:
この方法では、「FATAL: ユーザー "janhettenkofer" のパスワード認証に失敗しました」というエラーが発生しました。
ここで説明されている方法で PostgreSQL の別のインストールを取り除きました: https://stackoverflow.com/a/20010057。2 番目の関数でこのエラーが発生しました (最初のエラー メッセージは変更されませんでした): "FATAL: database "mydb" does not exist QPSQL: Unable to connect"
上記のスレッドでは、最初のエラーを修正する別の方法が提案されましたが、ターミナルを開いて「which psql」と入力しても何も起こらず、「コマンドが見つかりません」というメッセージさえ表示されません。そして、エクスポート PATH に関するアドバイスを適用する方法がわかりません。Google は、私がそれを行うべきだと教えてくれるだけで、方法については教えてくれません。ターミナルは、私が使用することを学んでいる別のものです。
事前に端末の使用方法に関するアイデアやアドバイスをありがとうございます。
編集:
わかりました、psql を PATH に追加する方法を見つけました。走れるようになりwhich psql
ました。これは、私が使用している Postgres.app インストールを示しています。その後、ユーザー データベース データベースを作成しました。Qt またはターミナルを使用して、このデータベースに接続できます。ただし、他のデータベースを作成することはできません。私が理解しているように、あなたはそうしcreatedb mydb
ますCREATE DATABASE
。これを行った後も\list
、ユーザー データベース、postgres データベース、および template0 と template1 のみが表示されます。mydb はありません。
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
すべてが正常に構築されます。
現在、QSQLITE2 Qt プラグインを使用する別の DLL (Qt プラグイン、カスタム プラグインとしても実装されています) があります。私自身の dll も sqlite.dll にリンクされています。したがって、次のようになります。
問題は、私のアプリケーションが my.dll を読み込めないinvalid location access
ことです。詳細はわかりませんが、それが問題です。
はsqlite.dll
、実行時にアプリケーション ディレクトリにあります。
アプリケーションをデバッグ モードで実行すると、一部のアセンブリ ファイルでクラッシュしますが、スタック トレースでは、sqlite_step シンボルの sqlite.dll 内のどこかにあることがわかります。私が知っているのはそれで全てです。
注1)my3.dll
QSQLITEプラグイン(sqlite3用)を使用し、リンクされている別のプラグインdll、があり、これは問題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 -これは公式ビルドですが、私が持っていたのとまったく同じファイルであり、失敗します同じ方法。
c++ - SQLデータベースの変更に対するqtシグナルはありますか?
Qt を使用して C++ プログラムを作成しました。アルゴリズム内のいくつかの変数が、プログラムの外部と Web ページで変更されています。ユーザーが Web ページの変数値を変更するたびに、作成済みの SQL データベースを変更します。ここで、コードを停止することなく、実行時にコードで変数の値を変更する必要があります。2 つのオプションがあります。
n 秒ごとにデータベースをチェックし、変数を取得します
value
-> n 秒ごとにデータベースの内容が変更されているかどうかを確認する必要があるため、これは良くありません (何年も変更されていない可能性があります。また、データベースが内容が変わります)データベースが変更されるたびに、私の Qt プログラムはシグナルを発するので、このシグナルをキャッチすることで変数の値を更新できます。これは最適な解決策のようで、この部分のコードを書きたいと思います。
私のコードのC++部分は次のとおりです。