問題タブ [tadoquery]
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.
delphi - Delphi - アクセス違反が発生するのはなぜですか? ADOQuery パラメータに制限はありますか?
アクセス違反 (「モジュール 'sqloledb.dll' のアドレス 74417E44 でのアクセス違反。アドレス 786E3552 の読み取り」) を返すこのコードがあり、問題の場所を特定できません。私の唯一の推測は、ADOQuery には渡すことができるパラメーターの数に制限があるということです。コードは次のとおりです。
次の行にエラーが表示されます。
これは、insert ステートメントの 11 番目のパラメーターです。この行にコメントすると、次のパラメーターでエラーが発生します。次のように値を直接入力すると:
正常に動作しますが、次のパラメーターでエラーが発生します。
ADOQuery には、処理できるパラメーターの数に制限があるのでしょうか。または、これが本当の問題ではない場合、これを修正する方法の手がかりを誰かが持っていますか?
ノート:
Delphi 7 と Windows 8.1 を使用しています。
AVはデバッグ時にのみ(そして常に)表示されます。「.exe」を介してアプリケーションを直接実行すると、AVは表示されません。
エラーが表示された後も「実行」を押し続けると、アプリケーションが正常に動作し続けるまで、AV がどんどん表示されます (AV の数は、10 番目以降に追加されたパラメーターの数と同じだと思います)。
挿入は、すべての AV が画面に表示された後に機能します。すべてが正常に見えるのに、なぜこのエラーが発生するのかを理解したいだけです。
delphi - Delphi TADOQuery: SavetoFile の前にデータをフォーマットする
ユーザーが TADOQuery コンポーネントを使用してリモート データベースに対してクエリを実行できるようにするアプリケーションがあります。照会結果は、TADOQuery の SaveToFile メソッドを使用して XML ファイルに保存されます。
最近、フィールドの 1 つに改行文字 (16 進数の "0A") が存在する場合、そのフィールドのデータが切り捨てられる (つまり、ファイルに部分的にしか保存されない) 問題に遭遇しました。フィールドにヌル文字があると、同様の問題が発生します。
私がしなければならないことは、SaveToFile メソッドを呼び出す前に問題のフィールドをスキャンし、「問題のある」文字を別のもの (スペースなど) に置き換えることです。ただし、データベース内のデータを更新することは許可されていないため、変更をデータベースにプッシュすることはできません (つまり、TADOQuery を編集モードにすることはできません)。
これを達成する方法はありますか (つまり、データベース内のデータを変更せずにフィールドを編集し、SELECT を実行した後、SaveToFile を呼び出す前に)? 私は回避策を考えていますが、かなり長くて非効率的ですが、サーバー上のデータに触れることなく XML ドキュメントを編集できます (基本的に、問題のフィールドを読み取り、変更を加え、更新されたバージョンのフィールドを一時ファイルに保存するには、SaveToFile を呼び出してから、XML ドキュメント内のフィールドを更新されたバージョンに置き換えます)。これが私の最善の選択肢ですか、それとももっと良い方法がありますか?
delphi - 非同期 TADOQuery の OnFetchComplete がメイン スレッドに同期されない
TADOQuery
withを使用してイベントに[eoAsyncFetchNonBlocking]
アタッチすると、メイン スレッドで実行されていないことがわかりました (XE4 および XE8 でテスト済み)。私たちのほとんどは、これらのタイプのイベントで UI で作業を行うため、これはバグ* だと思います。これが大規模なプロジェクトでの問題の原因であると考えており、回避策が必要です。OnFetchComplete
OnFetchComplete
[編集] *ADO のドキュメントを読んだ後、これがバグではない可能性があることを認めますが、マルチスレッドの問題は残っています。
このハンドラーにコードを強制的に実行させてメイン スレッドで実行させるエレガントな方法はありますか? 私はタイマーを使いたくありません(しかし、それが唯一の解決策である場合はそれを採用します)。または、ここで待機できる ADO 同期オブジェクト、または ADO プロバイダーへの他の形式のシグナリングはありますか?
問題を示す簡単なサンプルを次に示します。私のプロジェクトは、ファクトリがこれらのデータセットを作成して埋めることでより複雑になりますが、ここではデータセットを内部のグリッドにアタッチすることに似ていますADOQuery1FetchComplete
。
そして、dfm はクエリを設定しExecuteOptions = [eoAsyncFetchNonBlocking]
てOnFetchComplete
処理するだけです。
[編集] を使用するよう提案されましたTThread.Sychronize
が、これは Delphi スレッドではありません。
ハンドラーが別のスレッドから呼び出されたという十分な証拠がない場合は、GetCurrentThreadId
ここにメインスレッドと問題のあるスレッドのコールスタックがあります (適切な測定のためにメインスレッドにスリープを追加しました)
メインスレッドのスリープ
ハンドラーを呼び出す他のスレッド
delphi - Delphi : 動的クエリのフィールドに OnGetText イベント ハンドラを設定する
動的クエリのフィールドの OnGetText イベントに独自のプロシージャを設定したい
私の手順は次のとおりです:
- 「...キャプション」は文字列配列定数です
ADOQuery の OnAfterOpen イベントでイベント ハンドラーを設定します。
しかし、ADOQuery を開いた後、表示するテキストがありません。テキスト値が空であるように見えます。
空のプロシージャ(コードなし)を設定すると、テキストも表示されないため、プロシージャが何をするかは問題ではないようです
何がうまくいかないのですか?
ありがとう ...
sql - クイック レポートで Delphi7 TADOQuery フィルタが正確でない
日付範囲でレポートを表示したい
コードがあります
そして私は4つのテストレコードをtablenameに入れました
ボタンをクリックすると、このように、選択した日付に関係なく、最初のレコードのみを表示するクイックレポート
クイック レポート プロパティ
qrband title = qrlabel1 キャプション ' quickreport '
qrband column header = qrlabel2 キャプション ' number '、qrlabel3 キャプション ' date '
qrband detail = qrdbtext1 & qrdbtext2 、データセット ' adoquery1 '、データフィールド ' numberfield ' on qrdbtext1 および ' qrdbtext2の datefield '
日付範囲フィルターですべてのデータを表示する方法は?
ご清聴ありがとうございました
delphi - Adoquery1にSQLプロパティがありません - Delphi
アクセス データベースにデータを追加しようとしています。しかし、これがエラーを返すため、問題が発生しています:
コードにいくつかの変更を加えましたが、これまでのところ何も機能していません。
私は何を間違っていますか?
sql-server - Delphi AdoQuery を使用して挿入後に最後の行のデータを取得する
Delphi 2007 では、挿入を使用してテーブルに行を追加するときに ADOQuery を使用して、最後の行を取得するにはどうすればよいですか?
これで行を追加しています。
execsql の後に最後に追加された行を取得するにはどうすればよいですか?