Delphi 6 BDE TUpdateSQL.ModifySQLにexecute procedure (...with arguments...)
(Firebird 2.1データベース用)を書くことはできますか?私は試しましたが、最も単純なSQLプロシージャの場合でも、エラーメッセージUpdate failed
が表示されます。ですから、ModifySQLで実行できる文にはいくつかの制限がありますか? Delphi IBX TIBDataSet.ModifySQL(またはIBXコンポーネントの他の同様のプロパティ)にexecute procedure
(およびより複雑なステートメント)を書くことが可能であることを私は広く知っています(広範囲に使用しています)。私はTUpdateSQLでプロシージャを実行するのを避けるべきですか、それとも考慮すべきトリックがありますか?Delphi 6 BDE TUpdateSQLでSQLプロシージャを実行することはできますか?
答えて
RenéHoffmannの考えは正しい - アップデートステートメントからプロシージャを実行することは可能です。例えば。次の文は、ModifySQLに受け入れられている:
update target_table set
id = :id,
field1 = :field1,
field2 = (select proc.field2 from additional_actions_procedure(:field2, :param1, :param2) proc)
where
id = :old_id
デルファイユニットDBTables
例外が発生した理由を説明するコードが含まれています
procedure TUpdateSQL.ExecSQL(UpdateKind: TUpdateKind);
begin
with Query[UpdateKind] do
begin
Prepare;
ExecSQL;
if RowsAffected <> 1 then DatabaseError(SUpdateFailed);
end;
end;
ので、影響を受けた行のカウントが発生します。しかし、明らかにDBTables
影響を受けた行の会計処理は、IBExpertの影響を受けた行数とは異なります。 IBExpertは、execute procedure
,update
ステートメントまたはその他のステートメントの影響を受ける実際の影響を受ける行を数えます。しかしDBTables
は、update
ステートメントによって更新されるターゲットテーブルの(私の推測)行だけをカウントします。 Delphiのコードをより深く理解すれば、より正確な説明が得られます。
このコメントhttp://www.delphisources.ru/pages/faq/base/tupdatesql_many_queries.htmlは、DBTables
ファイルの編集を推奨します。
Firebirdが影響を受けた行をどのようにカウントしているのかわかりません(私のプロファイルの脚注を参照してください)が、ストアドプロシージャのような 'SET NOCOUNT OFF'オプションはないようです。したがって、影響を受ける行数は、Delphiのすべてのデータベースコンポーネントで失われている可能性があります。長い間、彼らはこれを克服しません。 – Victoria
- 1. Delphi BDE PostgreSQLクエリの実行(構文エラー)
- 2. BDE with Delphi XE
- 3. Java 6でSpringクラウドを実行することはできますか?
- 4. プロシージャを実行するこの方法はSQLインジェクションから安全ですか?
- 5. Delphiアプリケーションで実行されるSQLクエリを監視する
- 6. Delphi 10.1 BerlinでBDE API(BdiCopyTable)を使用
- 7. トランザクションをコミットする前にSQLプロシージャを返すことはできますか?
- 8. ここでYii execute()でSQLインジェクションを実行できますか?
- 9. SQLトリガでAPI接続スクリプトを実行することはできますか?
- 10. Delphi 6をWindows 7/32にインストールすることができます
- 11. SQL Server 2008でプロシージャを実行
- 12. SQLプロシージャでサブタスクを並行して実行する方法
- 13. SQL Serverでこれを行うことはできますか?
- 14. PythonでPasslibを実行するとき、 `$ 6 $ rounds =`とは何ですか?
- 15. SQL Serverで現在実行中のsprocの行番号を取得できますか?
- 16. プロシージャでhqlクエリを実行するオプションはありますか?
- 17. PL/SQL実行のジョブ/プロシージャ?
- 18. フォームをタブレットで実行することはできますか?
- 19. モノでvbprojを実行することはできますか?
- 20. 「プルモード」でプレイブックを実行することはできますか?
- 21. SignalRでバックグラウンドタスクを実行することはできますか
- 22. グローバルタイマーをバックグラウンドで実行することはできますか?
- 23. Multimarkdownで「タブ」を実行することはできますか?
- 24. PyAutoGUIをヘッドレスモードで実行することはできますか?
- 25. Wicket 6でaspectJを使ってWicket-metricsを実行することはできますか?
- 26. Delphiでこれを行うにはどうすればいいですか?
- 27. BDEで作成したテーブルをC#で操作することはできますか?
- 28. BDEおよびAZURE SQLデータベース
- 29. Delphiのプロシージャは512文字以上のプログラムを実行します
- 30. SQLに「ヌル行」を含めることはできますか?
BDEの期間を避けてください。あなたはそれからアップグレードしないあなたの時間を無駄にしています。 – MartynA
それは私の決断ではありません。 – TomR
TUpdateSQLで?いいえ、TUpdateSQLは 'UPDATE'文を期待しています(これが' TUpdateSQL'と呼ばれています - 名前の** UpdateSQL **部分がそれを明確にするはずです)。 'TStoredProcedure'はストアドプロシージャを実行するためのものです。 –