2012-03-28 106 views
0

我不知道它的官方名稱是什麼所以也許這就是爲什麼我不能找到任何東西在線。 基本上,當你在vfp中使用sql時,它會在不移動記錄光標或保存結果的情況下進行初始傳遞(有時是2?)。 不幸的是我有我的sql中的子例程運行,並在最初的傳遞過程中改變的東西。VFP SQL預測

爲什麼我在sql查詢中使用子例程?因爲vfp不支持在選擇項目內的子查詢之外引用(我再次不知道正式名稱)。

實施例:select id, (select detail.name from detail where master.id == detail.id) name from master

這並不工作,但:select id, getname(id) from master

其中getname()是含有從第一示例中的SQL的子程序。

你也可以使用連接,但上面只是一個例子,連接在我的情況下不起作用。

有什麼辦法來處理初始通過? vfp是否創建了一個像firstpass之類的布爾值?我想我可以添加一個計數到我的子程序中,但似乎比現在更加混亂。

另外有人可以解釋或鏈接我對vfp的初步通行證的解釋?我相信這只是做了一次最初的通過,但現在它在更改一些代碼之後做了兩次。

編輯:好吧,我錯了。上面的例子確實有效。不起作用的是:
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支持對SQL Server進行復雜的子查詢調用,甚至可以使用本地變量進行參數化查詢,而無需更改要通過SQLPrepare()或SQLExec()執行的SQL字符串。 – DRapp 2012-03-28 16:38:51

回答

0

看起來TOP在預測中是不被允許的。對於這個例子,你可以這樣做:

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

還有什麼會給你一個問題?

tamar