正式名称がわからないので、私はオンラインで何かを見つけることができません。 基本的に、vfpでsqlを使用すると、レコードカーソルを移動したり結果を保存することなく、最初のパススルー(時には2?)を行います。 残念ながら私は実行し、その最初のパス中に物事を変更する私のSQLのサブルーチンがあります。VFP sql prepass
なぜSQLクエリでサブルーチンを使用していますか? vfpはselect項目内のサブクエリの外部での参照をサポートしていないので(もう一度私は正式な名前は分かりません)。
例:select id, (select detail.name from detail where master.id == detail.id) name from master
これはんが作業:getname()
が最初の例からSQLを含むサブルーチンであるselect id, getname(id) from master
。
また、結合を使用することもできますが、上記は単なる例であり、私の場合は結合が機能しません。
初期パススルーに対処する方法はありますか? vfpはfirstpass
または何かのようなブール値を作成しますか?私はサブルーチンにカウントを追加することができると思うが、それはすでにそれよりも厄介であるようだ。
また、誰かがvfpの初期パスに説明を説明したりリンクしたりできますか?私はそれが前に1つの初期パスを行っていたと信じていますが、今はいくつかのコードを変更した後に2つのことをしています
編集:ok、間違っていました。上の例はうまくいきます。何がうまくいかないのは以下の通りです:
SELECT d2.id, (SELECT TOP 1 d1.lname l FROM dpadd d1 WHERE d1.id== d2.id ORDER BY l) FROM dpadd d2
「SQL:このタイプのクエリはサポートされていません」というエラーが表示されます。私は次の操作を行う場合
は不思議なこと、それは動作します:サブルーチンについて
SELECT d2.id, (SELECT COUNT(d1.lname) FROM dpadd d1 WHERE d1.id == d2.id) FROM dpadd d2
、彼らは私のフォームの方法があります。データベースはローカルの.dbfファイルです。私はどんなサーバーともやり取りしておらず、ちょうどinto cursor
句で直接SQLコマンドを実行してからレポートを生成します(通常は)。
「サポートされていません」という実際に便利なselect文で数分間で返信します。 top 1
の例が完全に役に立たないことに気付いたと思います。
説明GetName()はローカルVFP側の関数ですか?または接続するSQL Serverのストアドプロシージャです。また、あなたが実際にやろうとしていることを示すことができますか? VFP Deosは、SQLPrepare()またはSQLExec()を介して実行されるSQL文字列を変更せずに、ローカル変数を使用してパラメータ化されたクエリであっても、SQL Serverへの複雑なサブクエリ呼び出しをサポートします。 – DRapp