ADO/OleDB、delphi TADOQuery/TADOCommand、およびパラメータの件名で互いに矛盾する回答があるようなStackOverflowに関するいくつかの質問があります。場合によっては、ADOコンポーネント、特にTADOCommandは、名前のない名前付きパラメータでより確実に動作しますか?
パラメータは、ADOコンポーネントのCommandTextまたはSQLプロパティに2つの方法で導入できます。私のためにほとんどの時間を作業名前付きパラメータは、コロンで導入されています
select a, b, c from bar where bat = :baz
これは、うまく私のために時間の99%を、動作します。 「:バズ」を毎日のようにして、私はADOまたはその周辺のDelphiのラッパーは、受け入れないことを見つけて、私が代わりにこれを書いている必要があります
select f, g, h from bar where bat = ?
これは無名のパラメータで、代わりに指定されたパラメータの結果。 ADOクエリまたはADOコマンドに1つのパラメータしか含まれていない場合、これは大きな問題ではありません。しかし、それはADOが私の上で行動するときではありません。
delete from bar where id = :id1
delete from bat where id = :id2
私はこれにそれを変更しなければならなかった:昨日は1つのCommandTextを文字列に2つのコマンドを使用して、このように、今日の単一TADOCommandはオブジェクト内のデュアルコマンドを使用して、別の方法を一方向に行動し、そして
delete from bar where id = ?
delete from bat where id = ?
昨日終わった。今日、私はそれを動作させるために最初のバージョンに戻す必要がありました。症状は、ADOパラメータが消えて戻ってこないということでした。コマンドを実行しようとすると、Parameters[0]
にアクセスしようとすると、インデックスが範囲外です。パラメータがなくなるという警告は表示されません。これは、ADOデータセットへのいくつかの接続が、デザイン時に、特にTADOCommand
コンポーネントをジョグしているように見えます。クエリやコマンドを記述しようとすると、特にうんざりしますが、ADOコンポーネントは "?"を受け入れないことに決めました。今すぐ ":x"を入力してください。あるものから別のものへ切り替えることによって、機能することができないことがあります。しかし、それは私を挫折させ、おそらく実際には他の人々を完全にブロックします。私は一部の人々が常に動的にコードでSQLを構築し、Parameters
を使用しないことを知っています。おそらくはこれが理由ですです。私は予想しています私の質問に
可能な答えは以下のとおりです。
ADOは、複数のコマンドをサポートしていない、または少なくともDelphiのラッパーにはありません。あるいは、
TADOCommand
はここではうまく動作しません。パラメータは、すべてのADO、またはすべてのDelphiのADOラッパーのバグ領域ですか?
あなたは間違っています。
私はDelphi XE2を使用していますが、2007年、2009年、2010年、およびXEで同様にdodgyの動作を見たことがあります。 私はOLEDBプロバイダとしてSQL Server用のMicrosoft OLEDB Providerを使用しています。
2つのコマンドを(SQL Serverの場合)セミコロンで区切ると違いがありますか? –
データ認識コントロールを必要としないプロジェクトでは、ADODBとADOIntを直接使用することに切り替えました。ここでは:http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/demo2/03%20Data/xxmData.pas?view=markupこれはパフォーマンスのために何をチェックしていませんが、本当にすべきですこれらの日のうちの1つをチェックしてください(私の結果を回答として投稿してください)。 –
SilentD:私はセミコロンを試します。私の想いは、DelphiのADコンポーネントはセパレータもうまくサポートしていないということです。 –