2012-03-28 14 views
0

正式名称がわからないので、私はオンラインで何かを見つけることができません。 基本的に、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の例が完全に役に立たないことに気付いたと思います。

+0

説明GetName()はローカルVFP側の関数ですか?または接続するSQL Serverのストアドプロシージャです。また、あなたが実際にやろうとしていることを示すことができますか? VFP Deosは、SQLPrepare()またはSQLExec()を介して実行されるSQL文字列を変更せずに、ローカル変数を使用してパラメータ化されたクエリであっても、SQL Serverへの複雑なサブクエリ呼び出しをサポートします。 – DRapp

答えて

0

投影でTOPは許可されていないようです。その場合は、代わりに次のようにしてください:

SELECT d2.id, (SELECT MAX(d1.lname) l FROM dpadd d1 WHERE d1.id== d2.id) FROM dpadd d2 

その他に何か問題がありますか?

Tamar

関連する問題