3

delphi7からストアドプロシージャを呼び出そうとしています。プロシージャには、デフォルト値のパラメータも含まれています。私が理解している限り、デフォルトを使用して、パラメーターの値を明示的に渡さずにこのプロシージャを呼び出すことができます。それが私のdelphoコードで行ったことです。

だが..

の結果は紛らわしいように見えました。スキップしたパラメーターは、何らかの値を取得しました。それが次のパラメータの値でした。そして、最後にその値を取得しなかった最後のパラメーターが表示されました。

この記事を検索して見つけました。したがって、delphiは、TADOStoredProcのパラメーターに付けた名前を無視し、パラメーターのコレクションに追加した順序、つまり最後のパラメーターに渡しただけであることがわかりました(これもオプションであり、例外はありませんでした)。スローされました)プロシージャに渡されませんでした。

@crefirdによる回答があり、TADOStoredProcの代わりにTADOQueryを使用することを提案しています。しかし、私はそのアプローチが好きではありません。すべてのパラメーターに特定の値を指定し、オプションのパラメーター機能をまったく使用しない方がよいでしょう。

それで、TADOStoredProcを使用するときに、delphiにストアドプロシージャへのパラメータを名前で指定させるためのより良い解決策はありますか?

4

1 に答える 1

0

設計時に TADOStoredProc を作成し、そのパラメーター コレクションに入力することができます。それを置くフォームがない場合は、DataModule を使用できます。

何年も前に、私はあなたと同じ教訓を学びました - パラメータ名は無視されます。過去 10 年間、Delphi と SQL Server を使用するコードベースの維持と拡大は、新しい SP パラメータをパラメータ リストの末尾に配置し、必要に応じてオプションにすることで容易になりました。

TADOStoredProc オブジェクトを作成し、その refreshParams (または refreshParameters - 名前がわからない) メソッドを呼び出す人がいるようです。これには、おそらく避けるべきデータベースへの余分な移動が含まれます。

于 2012-11-28T07:30:50.167 に答える