第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我想用DBF格式的文件篩選數(shù)據(jù),需要用到VFP的語句,如下該怎么做?

我想用DBF格式的文件篩選數(shù)據(jù),需要用到VFP的語句,如下該怎么做?

比如slect……from……等等。請(qǐng)高手指點(diǎn)一下,以前學(xué)過,現(xiàn)在都忘了。最好能夠多舉幾個(gè)例子,那樣我看得就會(huì)明白些?謝謝~
查看完整描述

2 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

vfp的DBF格式的文件篩選數(shù)據(jù),方式有兩種,一種是 ...for 條件,一種是select ...form SQL語句,請(qǐng)參照以下語法:

select - sql 命令

從一個(gè)或多個(gè)表中檢索數(shù)據(jù)。

語法

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]]
[Alias.] Select_Item [AS Column_Name]
[, [Alias.] Select_Item [AS Column_Name] ...]

FROM [FORCE]
[DatabaseName!]Table [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
DatabaseName!]Table [[AS] Local_Alias]
[ON JoinCondition …]

[[INTO Destination]
| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT]
| TO SCREEN]]

[PREFERENCE PreferenceName]

[NOCONSOLE]

[PLAIN]

[NOWAIT]

[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]

[GROUP BY GroupColumn [, GroupColumn ...]]

[HAVING FilterCondition]

[UNION [ALL] SELECT命令]

[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]

參數(shù)

SELECT

在 SELECT 子句中指定在查詢結(jié)果中包含的字段、常量和表達(dá)式。

ALL

查詢結(jié)果中包含所有行 ( 包括重復(fù)值 )。ALL 是默認(rèn)設(shè)置。

DISTINCT

在查詢結(jié)果中剔除重復(fù)的行。

注意 每一個(gè) SELECT 子句只能使用一次 DISTINCT。

TOP nExpr [PERCENT]

在符合查詢條件的所有記錄中,選取指定數(shù)量或百分比的記錄。TOP 子句必須與 ORDER BY 子句同時(shí)使用。ORDER BY 子句指定查詢結(jié)果中包含的列上由Top字句決定的行數(shù), TOP 子句根據(jù)此排序選定最開始的 nExpr個(gè)或 nExpr% 的記錄。

您可以指定選取 1 到 32767 個(gè)記錄。使用 ORDER BY 子句指定的字段進(jìn)行排序,會(huì)產(chǎn)生并列的情況,比如,可能有多個(gè)記錄,它們?cè)谶x定的字段上相同;所以,如果您指定 nExpr 為 10,在查詢結(jié)果中可能多于 10 個(gè)記錄,因?yàn)榭赡苡袔讉€(gè)記錄位置并列。

如果包含 PERCENT 關(guān)鍵字指定查詢結(jié)果中的記錄數(shù),得到記錄數(shù)的可能是小數(shù),這時(shí)進(jìn)行取整。包含 PERCENT 關(guān)鍵字時(shí),nExpr 的范圍是 0.01 到 99.99。

Alias.

限定匹配項(xiàng)的名稱。 Select_Item 指定的每一項(xiàng)在查詢結(jié)果中都生成一列。如果多個(gè)項(xiàng)具有相同的名稱,則應(yīng)在這些項(xiàng)名前加上表的別名和一個(gè)句點(diǎn),以防止出現(xiàn)重復(fù)的列。

Select_Item 指定包括在查詢結(jié)果中的項(xiàng)。一個(gè)項(xiàng)可以是:

FROM 子句所包含的表中的字段名稱。

一個(gè)常量,查詢結(jié)果中每一行都出現(xiàn)這個(gè)常量值。

一個(gè)表達(dá)式,可以是用戶自定義函數(shù)名。
AS Column_Name

指定查詢結(jié)果中列的標(biāo)題。當(dāng) Select_Item 是一個(gè)表達(dá)式或一個(gè)字段函數(shù)時(shí),如果要給此列取一個(gè)有含義的名稱,一般可以使用這個(gè)子句。Column_Name可以是一個(gè)表達(dá)式,但不能包含那些表字段名稱中不允許出現(xiàn)的字符(如空格)。

FROM

列出所有從中檢索數(shù)據(jù)的表。如果沒有打開表, Visual FoxPro 顯示“打開”對(duì)話框以便指定文件位置。表打開以后,直到查詢結(jié)束時(shí)才關(guān)閉。

如果您包含 FORCE 關(guān)鍵字,Visual FoxPro 在建立查詢時(shí)會(huì)嚴(yán)格按照您在FROM 子句中聲明的順序連接表;若不包含 FORCE 關(guān)鍵字,Visual FoxPro 會(huì)試圖對(duì)查詢進(jìn)行優(yōu)化。使用 FORCE 子句,避免了優(yōu)化過程,可能加快查詢執(zhí)行的速度。

DatabaseName!

當(dāng)包含表的數(shù)據(jù)庫不是當(dāng)前數(shù)據(jù)庫時(shí),DatabaseName! 指定這個(gè)數(shù)據(jù)庫的名稱。如果數(shù)據(jù)庫不是當(dāng)前數(shù)據(jù)庫,就必須指定包含表的數(shù)據(jù)庫名稱。應(yīng)在數(shù)據(jù)庫名稱之后表名之前加上感嘆號(hào)(!)分隔符。

[AS] Local_Alias

為 Table 中的表指定一個(gè)臨時(shí)名稱。如果指定了本地別名,那么在整個(gè)SELECT 語句中必須都用這個(gè)別名代替表名。本地別名不影響 Visual FoxPro環(huán)境。INNER JOIN 只有在其他表中包含對(duì)應(yīng)記錄(一個(gè)或多個(gè))的記錄才出現(xiàn)在查詢結(jié)果中。

INNER JOIN 只有在其他表中包含對(duì)應(yīng)記錄(一個(gè)或多個(gè))的記錄才出現(xiàn)在查詢結(jié)果中。

LEFT [OUTER] JOIN 在查詢結(jié)果中包含:JOIN 左側(cè)表中的所有記錄,以及JOIN 右側(cè)表中匹配的記錄。OUTER 關(guān)鍵字可被省略;包含 OUTER 強(qiáng)調(diào)這是一個(gè)外連接 (outer join)。

RIGHT [OUTER] JOIN 在查詢結(jié)果中包含:JOIN 右側(cè)表中的所有記錄,以及 JOIN 左側(cè)表中匹配的記錄。OUTER 關(guān)鍵字可被省略;包含 OUTER 強(qiáng)調(diào)這是一個(gè)外連接接 (outer join)。

FULL [OUTER] JOIN 在查詢結(jié)果中包含:JOIN 兩側(cè)所有的匹配記錄,和不匹配的記錄;包含 OUTER 強(qiáng)調(diào)這是一個(gè)外連接 (outer join)。

ON JoinCondition 指定連接條件。

INTO Destination

指定在何處保存查詢結(jié)果。如果在同一個(gè)查詢中同時(shí)包括了 INTO 子句和 TO 子句,則 TO 子句不起作用。如果沒有包括 INTO 子句,查詢結(jié)果顯示在“瀏覽”窗口中。也可以用 TO 將查詢結(jié)果定向輸出到打印機(jī)或文件。

Destination 可以是下列子句之一:

ARRAY ArrayName ,將查詢結(jié)果保存到變量數(shù)組中。如果查詢結(jié)果中不包含任何記錄,則不創(chuàng)建這個(gè)數(shù)組。

CURSOR CursorName將查詢結(jié)果保存到臨時(shí)表中。如果指定了一個(gè)已打開表的名稱,則 Visual FoxPro 產(chǎn)生錯(cuò)誤信息。執(zhí)行完 SELECT 語句后,臨時(shí)表仍然保持打開、活動(dòng)但只讀。一旦關(guān)閉臨時(shí)表,則自動(dòng)刪除它。臨時(shí)表作為 SORTWORK 指定驅(qū)動(dòng)器上的一個(gè)臨時(shí)文件存在。
包含NOFILTER是為了創(chuàng)建一個(gè)能用在后來的詢問中的指針。在Visual燜oxPro以前的版本需要一個(gè)額外的常量或表達(dá)式作為過濾器去創(chuàng)建一個(gè)能用在后來的詢問中的指針。

SELECT *, .T. FROM customers INTO CURSOR myquery

包含NOFILTER能夠減少詢問的發(fā)生是因?yàn)榕R時(shí)表是建立在磁盤上的,當(dāng)臨時(shí)表被刪除,指針就要被關(guān)閉。

DBF TableName | TABLE TableName ,將查詢結(jié)果保存到一個(gè)表中。如果指定的表已經(jīng)打開,并且 SET SAFETY 設(shè)置為 OFF,則 Visual FoxPro 在不給出警告的情況下改寫該表。如果沒有指定擴(kuò)展名,Visual FoxPro 指定表的擴(kuò)展名是 .DBF。SELECT 語句執(zhí)行結(jié)束后,表仍然保持打開活動(dòng)狀態(tài)。
包含DATABASE DatabaseName 以指定添加了表的數(shù)據(jù)庫。包含NAMELongTableName 可以為該表命一個(gè)最多可包括128個(gè)字符的并且可以在數(shù)據(jù)庫中代替短名字的長名。

TO FILE FileName

如果命令中包括了 TO 子句,但沒有包括 INTO 子句,則查詢結(jié)果定向輸出到名為FileName 的 ASCII 碼文件、打印機(jī)或 Visual FoxPro 主窗口。

ADDITIVE 把查詢結(jié)果定向輸出到由TO FILE FileName指定的文本文件的現(xiàn)存目錄上。

TO PRINTER [PROMPT] 使查詢結(jié)果定向輸出到打印機(jī)。在打印開始之前,使用可選的 PROMPT 子句顯示一個(gè)對(duì)話框。您可以根據(jù)當(dāng)前安裝的打印機(jī)驅(qū)動(dòng)程序調(diào)整打印機(jī)的設(shè)置。將 PROMPT 子句放置在緊跟 TO PRINTER 之后。

TO SCREEN 使查詢結(jié)果定向輸出到 Visual FoxPro 主窗口或活動(dòng)的用戶自定義窗口中。

PREFERENCE PreferenceName

如果查詢結(jié)果送往瀏覽窗口,就可以使用 PREFERENCE 保存瀏覽窗口的屬性和選項(xiàng)以備后用。PREFERENCE 把特征屬性或參數(shù)選項(xiàng)長期保存在 FOXUSER 的資源文件中,任何時(shí)侯都可以對(duì)它們進(jìn)行檢索。

第一次執(zhí)行有 PREFERENCE PreferenceName 的 SELECT 命令時(shí)創(chuàng)建參數(shù)選項(xiàng)。以后執(zhí)行有相同參數(shù)選項(xiàng)名的 SELECT 命令時(shí)便將瀏覽窗口恢復(fù)到原來的參數(shù)選項(xiàng)狀態(tài)。當(dāng)瀏覽窗口關(guān)閉時(shí),更新參數(shù)選項(xiàng)。

如果您按下CTRL+Q+W 鍵退出“瀏覽”窗口,您對(duì)“瀏覽”窗口所做的更改不會(huì)保存到資源文件中。

NOCONSOLE

不顯示送到文件、打印機(jī)或 Visual FoxPro 主窗口的查詢結(jié)果。

PLAIN

防止列標(biāo)題出現(xiàn)在顯示的查詢結(jié)果中。不管有無 TO 子句都可使用 PLAIN子句。如果 SELECT 語句中包括 INTO 子句,則忽略 PLAIN 子句。

NOWAIT

打開瀏覽窗口并將查詢結(jié)果輸出到這個(gè)窗口后繼續(xù)程序的執(zhí)行。程序并不等待關(guān)閉瀏覽窗口,而是立即執(zhí)行緊接在 SELECT 語句后面的程序行。

SELECT 命令中包括 TO SCREEN 可以把查詢結(jié)果定向輸出到 Visual FoxPro 主窗口或用戶自定義窗口。如果顯示時(shí) Visual FoxPro 主窗口或用戶自定義窗口中寫滿了一屏,就暫停輸出。按任意鍵可以查看查詢結(jié)果后面的內(nèi)容。但是,如果命令中包括了NOWAIT 子句,顯示查詢結(jié)果時(shí)就不會(huì)暫停,等待按鍵,而是在 Visual FoxPro 主窗口或用戶自定義窗口中連續(xù)滾過所有內(nèi)容。如果命令中包含有 INTO 子句,忽略NOWAIT 子句。

WHERE

通知 Visual燜oxPro 在查詢結(jié)果中僅包含一定數(shù)目的記錄。如果要從多個(gè)表中檢索數(shù)據(jù),WHERE 子句是必需的。

JoinCondition

指定一個(gè)字段,該字段連接 FROM 子句中的表。如果查詢中包括不止一個(gè)表,就應(yīng)該為第一個(gè)表后的每一個(gè)表指定連接條件。

連接多個(gè)查詢條件必須使用操作符 AND。每個(gè)連接條件都有下面的形式:

FieldName1 Comparison FieldName2

其中 FieldName1 是一個(gè)表中的字段名,F(xiàn)ieldName2 是另一表中的字段名,Comparison 是下表中列出的某一操作符。

操作符 比較關(guān)系
= 相等
== 完全相等
LIKE SQL LIKE
<>, !=, # 不相等
> 大于
>= 大于等于
< 小于
<= 小于等于

對(duì)字符串使用 = 操作符時(shí),所得結(jié)果與 SET ANSI 的設(shè)置有關(guān)。當(dāng) SET ANSI 設(shè)置為 OFF 時(shí), Visual FoxPro 比較字符串的方式與 Xbase 的用戶相同。當(dāng) SET ANSI 的設(shè)置為 ON 時(shí), Visual FoxPro 比較字符串時(shí)遵守 ANSI 標(biāo)準(zhǔn)。有關(guān) Visual FoxPro 字符比較方法的詳細(xì)內(nèi)容,請(qǐng)參閱 SET ANSI 和 SET EXACT。
WHERE子句支持ESCAPE操作符,允許執(zhí)行對(duì)包含有SELECT ?SQL %和通配符的數(shù)據(jù)的有意義的查詢。

ESCAPE子句允許指定一個(gè)可以看作文字字符的SELECT ?SQL通配符。 ESCAPE子句允許指定一個(gè)字符,一旦它被放到通配符字符之前,就表示這個(gè)通配符被看作一個(gè)文字字符。

FilterCondition

指定將包含在查詢結(jié)果中記錄必須符合的條件。使用 AND 或 OR 操作符,您可以包含隨意數(shù)目的過濾條件。您還可以使用 NOT 操作符將邏輯表達(dá)式的值取反,或使用 EMPTY() 函數(shù)以檢查空字段。

FilterCondition 可以是下面示例中的任何一種形式:

示例 1

示例 1 顯示 FieldName1 Comparison FieldName窗體中的Fliter Condition

customer.cust_id = orders.cust_id

示例 2

示例 2 顯示 FieldName Comparison Expression 窗體中的Fliter Condition

payments.amount >= 1000

示例 3

示例 3 顯示 FieldName Comparison ALL (Subquery) 窗體中的 Fliter Condition

當(dāng)篩選條件包括 ALL 時(shí),只有指定字段滿足所有子查詢結(jié)果后,它所在的記錄才能添加到查詢結(jié)果中。

company < ALL ;
(SELECT company FROM customer WHERE country = "UK")

示例 4

示例 4 顯示 FieldName Comparison ANY | SOME (Subquery) 窗體中的 Fliter Condition

當(dāng)篩選條件包含 ANY 或 SOME 時(shí),字段必須至少滿足一個(gè)由子查詢產(chǎn)生的值所決定的比較條件。

company < ANY ;
(SELECT company FROM customer WHERE country = "UK")

示例 5

示例 5 顯示 FieldName [NOT] BETWEEN Start_Range AND End_Range 窗體中的Fliter Condition

該示例檢查字段中的值是否在指定范圍內(nèi)。

customer.postalcode BETWEEN 90000 AND 99999

示例 6

示例 6 顯示 [NOT] EXISTS (Subquery) 窗體中的 Fliter Condition

該示例檢查是否至少有一行滿足子查詢中的條件。當(dāng)篩選條件包括 EXISTS 時(shí),只要子查詢不為空集,篩選的條件就為“真”(.T.)。

EXISTS ;
(SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)

示例 7

示例 7 顯示 FieldName [NOT] IN Value_Set 窗體中的 Fliter Condition

當(dāng)篩選條件中包含 IN 時(shí),把字段所在記錄添加到查詢結(jié)果中的條件是字段必須包含值集合的一個(gè)元素。

customer.postalcode NOT IN ("98052","98072","98034")

示例 8

示例 8 顯示 FieldName [NOT] IN (Subquery) 窗體中的 Fliter Condition

這里,記錄包含在查詢結(jié)果中的條件是:字段必須包含一個(gè)子查詢的返回值。

customer.cust_id IN ;
(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")

示例 9

示例 9 顯示 FieldName [NOT] LIKE cExpression 窗體中的 Fliter Condition

customer.country NOT LIKE "UK"

這個(gè)篩選條件查找每個(gè)與字符串表達(dá)式相匹配的字段。

在字符串表達(dá)式中可以使用百分號(hào) (%) 和下劃線 ( _ ) 通配符。下劃線表示字符串中一個(gè)任意字符。

GROUP BY GroupColumn [, GroupColumn ...]

按列的值對(duì)查詢結(jié)果的行進(jìn)行分組。GroupColumn 可以是常規(guī)的表字段名,也可以是一個(gè)包含 SQL 字段函數(shù)的字段名,還可以是一個(gè)數(shù)值表達(dá)式,指定查詢結(jié)果表中的列位置(最左邊的列編號(hào)為 1 )。

HAVING FilterCondition

指定包括在查詢結(jié)果中的組必須滿足的篩選條件。HAVING 應(yīng)該同 GROUP BY一起使用。它能包含數(shù)量不限的篩選條件,篩選條件用 AND 或 OR 連接,還可以使用 NOT 來對(duì)邏輯表達(dá)式求反。

FilterCondition 不能包括子查詢。

使用 HAVING 子句的命令如果沒有使用 GROUP BY 子句,則它的作用與WHERE 子句相同。可以在 HAVING 子句中使用本地別名和字段函數(shù)。如果HAVING 子句不包含字段函數(shù)的話,使用 WHERE 子句可以獲得較快的速度。

[UNION [ALL] SELECT命令]

把一個(gè) SELECT 語句的最后查詢結(jié)果同另一個(gè) SELECT 語句最后查詢結(jié)果組合起來。默認(rèn)情況下,UNION 檢查組合的結(jié)果并排除重復(fù)的行。要組合多個(gè)UNION 子句,可使用括號(hào)。

ALL 防止 UNION 刪除組合結(jié)果中重復(fù)的行。

UNION 子句遵守下列規(guī)則:

不能使用 UNION 來組合子查詢。

兩個(gè) SELECT 命令的查詢結(jié)果中的列數(shù)必須相同。

兩個(gè) SELECT 查詢結(jié)果中的對(duì)應(yīng)列必須有相同的數(shù)據(jù)類型和寬度。

只有最后的 SELECT 中可以包含 ORDER BY 子句,而且必須按編號(hào)指出所輸出的列。如果包含了一個(gè) ORDER BY 子句,它將影響整個(gè)結(jié)果。
ORDER BY Order_Item

根據(jù)列的數(shù)據(jù)對(duì)查詢結(jié)果進(jìn)行排序。每個(gè) Order_Item 都必須對(duì)應(yīng)查詢結(jié)果中的一列。它可以是下列之一:

FROM 子句中表的字段,同時(shí)也是 SELECT 主句(不在子查詢中)的一個(gè)選擇項(xiàng)。

一個(gè)數(shù)值表達(dá)式,表示查詢結(jié)果中列的位置(最左邊列編號(hào)為 1 )。
ASC 指定查詢結(jié)果根據(jù)排序項(xiàng)以升序排列。它是 ORDER BY 的默認(rèn)選項(xiàng)。

DESC 指定查詢結(jié)果以降序排列。

如果不使用 ORDER BY 指定查詢結(jié)果的排列順序,則查詢結(jié)果不排序。

說明

同其他 Visual FoxPro 命令一樣,SELECT 是 Visual FoxPro 的一個(gè)內(nèi)部 SQL 命令。當(dāng)使用 SELECT 進(jìn)行查詢時(shí),Visual FoxPro 先解釋查詢要求,然后從表中查詢并檢索指定數(shù)據(jù)。可以在下列環(huán)境內(nèi)建立 SELECT 查詢:

命令窗口

一個(gè) Visual FoxPro 程序(與使用其他 Visual FoxPro 命令一樣)

查詢?cè)O(shè)計(jì)器
如果執(zhí)行了 SET TALK ON 命令后再執(zhí)行 SELECT 命令,則 Visual FoxPro 顯示出執(zhí)行查詢所用的時(shí)間和查詢結(jié)果中記錄的數(shù)目。_TALLY 包含了查詢結(jié)果中記錄的數(shù)目。

SET FILTER 設(shè)置的篩選條件對(duì)SELECT 命令不起作用。

下面部分將多次提到子查詢 (subquery),子查詢是指在 SELECT 命令中包含的SELECT 命令。在 SELECT 命令的 WHERE 子句中可以包含最多兩個(gè)平級(jí)的(非嵌套)的子查詢。子查詢中可以有多個(gè)連接條件 (join conditions)。

創(chuàng)建查詢輸出時(shí),列的命名遵循如下規(guī)則:

如果選擇項(xiàng)是具有唯一名稱的字段,則用字段名作為輸出列名。

如果多個(gè)選擇項(xiàng)具有相同名稱。例如,如果名為 Customer 的表有一個(gè)STREET 字段,而名為 Employees 的表也有一個(gè) STREET 字段,則輸出列命名為 Extension_A 和 Extension_B (STREET_A 和 STREET_B)。如果選擇項(xiàng)名稱有 10 字符長,可以將名稱截短后再加下劃線和字母。例如,DEPARTMENT 變?yōu)?DEPARTME_A。

如果選擇項(xiàng)是表達(dá)式,它的輸出列命名為 EXP_A。其他表達(dá)式分別命名為EXP_B、EXP_C,依此類推。

如果選擇項(xiàng)包含諸如 COUNT() 這樣的字段函數(shù),則輸出列命名為CNT_A。如果另一個(gè)選擇項(xiàng)包含 SUM(),它的輸出列命名為 SUM_B。
SELECT 子句中的用戶自定義函數(shù): 在 SELECT 子句中使用用戶自定義函數(shù)有明顯優(yōu)點(diǎn),但使用時(shí)應(yīng)考慮以下限制:

SELECT 子句的運(yùn)行速度會(huì)受用戶自定義函數(shù)執(zhí)行速度的影響。因此,如果使用戶自定義函數(shù)的操作量很大,則這些函數(shù)的功能最好調(diào)用 C 語言或匯編語言編寫的 API 或用戶自定義函數(shù)來完成。

在 SELECT 激活的用戶自定義函數(shù)中,很難預(yù)測 Visual FoxPro 輸入/輸出(I/O)和表的環(huán)境。一般來說,不知道選擇的工作區(qū)是哪一個(gè),不知道當(dāng)前表的名稱,甚至不知道正在處理的字段名。這些變量的值完全取決于用戶自定義函數(shù)在優(yōu)化過程的什么地方激活。

在 SELECT 子句調(diào)用的用戶自定義函數(shù)中修改 Visual FoxPro I/O 或表的環(huán)境是很不安全的。一般來說,這樣做的結(jié)果難以預(yù)料。

從 SELECT 將值傳遞給用戶自定函數(shù)唯一可靠的方法,是激活用戶自定義函數(shù)時(shí)以參數(shù)的形式傳遞。

經(jīng)過實(shí)踐,有可能發(fā)現(xiàn)某種被認(rèn)為是違法的操作在某種 FoxPro 版本中運(yùn)行正確,但這并不保證它在以后的版本中也能正確運(yùn)行。
拋開這些限制不說,用戶自定義函數(shù)在 SELECT 語句中還是可接受的。但不要忘記使用 SELECT 可能要降低性能。

下列字段函數(shù)可以與選定項(xiàng)一起使用,選定項(xiàng)可以是一個(gè)字段或包含字段的表達(dá)式:

AVG(Select_Item) ,計(jì)算列中數(shù)值的平均值。

COUNT(Select_Item) ,計(jì)算列中選定項(xiàng)的數(shù)目。計(jì)算查詢輸出的行數(shù)。

MIN(Select_Item),確定列中 Select_Item 的最小值。

MAX(Select_Item),確定列中 Select_Item 的最大值。

SUM(Select_Item),計(jì)算列中數(shù)值的和。
字段函數(shù)不能嵌套使用。

連接 (Join) Visual FoxPro 支持 ANSI SQL '92 連接 (Join) 語法,通過比較兩個(gè)或多個(gè)表中的字段,將它們的記錄連接到一起,生成查詢。例如,內(nèi)部連接 (inner join) 是將兩個(gè)表中連接字段 (joined field) 值相同的記錄選取到查詢中。Visual FoxPro 支持嵌套連接(nested joins)

重要事項(xiàng) 創(chuàng)建連接條件時(shí),請(qǐng)記住如下幾點(diǎn):

如果在查詢中包括兩個(gè)表,又沒有指定連接條件,那么第一個(gè)表中每一個(gè)記錄同第二個(gè)表中每一記錄之間,只要滿足篩選條件,就連接起來。這種查詢產(chǎn)生的結(jié)果很長。

在連接條件中使用 DELETED(),EOF(),F(xiàn)OUND(),RECCOUNT(),和 RECNO() 等支持可選別名或工作區(qū)的函數(shù)時(shí)要小心。在這些函數(shù)中包括別名或工作區(qū)可能導(dǎo)致不可預(yù)料的結(jié)果。SELECT 不使用工作區(qū),它執(zhí)行與 USE ... AGAIN 相同的操作。在不帶可選別名和工作區(qū)的情況下使用這些函數(shù)進(jìn)行單表查詢時(shí),可得到正確的結(jié)果。但是,使用這些函數(shù)進(jìn)行多表查詢時(shí),即使不帶可選別名或工作區(qū),也可能得到一些莫明其妙的結(jié)果。

當(dāng)連接含有空字段 (empty field) 的表時(shí)也要注意。這是因?yàn)?Visual FoxPro匹配空字段。例如,連接 CUSTOMER.ZIP 和 INVOICE.ZIP 兩個(gè)表。如果CUSTOMER 表中的 100 條記錄中沒有給出郵政編碼,INVOICE 表中也有400 條記錄沒有給出郵政編碼,那么查詢結(jié)果中將會(huì)由于空字段的匹配而出現(xiàn) 40000 條多余的記錄。要去除查詢結(jié)果中的空記錄,可以使用 EMPTY() 函數(shù)。
有關(guān)連接的其它情況,請(qǐng)參閱《Microsoft Visual FoxPro 6.0 中文版程序員指南》第八章“創(chuàng)建視圖”。
---------------------------------------------
以下是本人商用軟件《建筑機(jī)具租賃結(jié)算系統(tǒng)》的各單位日租租賃情況統(tǒng)計(jì)子過程,這里多處用到...for條件,請(qǐng)參考指正:

proce sdl95_1
*各單位日租租賃情況統(tǒng)計(jì)
use .\dbf\system
bfb0=dtqfbfb &&冬停的百分比
use
use .\dbf\dwname
mchoice=zldm
rq0=ctod(alltrim(c)) &&日期,表示統(tǒng)計(jì)到這天,這天算租費(fèi)
use

create table .\dbf\temp1 (;
rq d,; &&日期
zldm c(3),; &&租賃單位代碼
rzjzj n(12,3),; &&增加租金
rzjjs n(12,3),; &&減少租金
rzj n(12,3),; &&日租金緩沖
rzjhj n(12,3),; &&日租金合計(jì)
ts n(4),; &&天數(shù)
zlf n(12,3),; &&分步租金
zlflj n(12,3); &&租金累計(jì)
)
use
&&以上建立目的是計(jì)算一個(gè)客戶的租金
&&以下建立各單位的租金、租賃費(fèi)統(tǒng)計(jì)情況表

create table .\dbf\tempX (;
dw c(38) ,; &&單位名稱
rzjhj n(12,3),; &&日租金合計(jì)
zlflj n(12,3),; &&租金累計(jì)
dtf n(12,3),; &&扣冬停費(fèi)
sjzlf n(12,3); &&實(shí)際租賃費(fèi)=租金累計(jì)-扣冬停費(fèi)
)
use

&&以下將小于等于rq0日期的所有單位的租賃數(shù)據(jù)拷貝到temp2表中
use .\dbf\zlmxb
copy to .\dbf\temp2 for rq<=rq0
use
&&以下將小于等于rq0日期的所有單位的回收數(shù)據(jù)拷貝到temp3表中
use .\dbf\hsmxb
copy to .\dbf\temp3 for rq<=rq0
use

*select 2
*use .\dbf\temp2
*select 3
*use .\dbf\temp3

select 1
use .\dbf\temp1
select 8
use .\dbf\tempX &&目的表
select 9
use .\dbf\tempzydwmc
delete all for zldm=" " &&刪除那些無租賃代碼的行
pack
go top

do while .not. eof()
select 1 &&選擇temp1將其內(nèi)容刪除
zap

append from .\dbf\temp2
delete all for zldm <> tempzydwmc.zldm &&租賃
pack
replace all rzjzj with rzj,rzjjs with 0

jjj=reccount()

append from .\dbf\temp3
delete all for zldm <>tempzydwmc.zldm .and. recno()>jjj &&回收
pack
replace all rzjjs with rzj,rzjzj with 0 for recno()>jjj

append blank
replace rq with rq0+1, rzjjs with 0,rzjzj with 0 &&要統(tǒng)計(jì)的那一天日期必須加進(jìn)去,并且天數(shù)+1,因?yàn)楹裉?br/>
index on rq to .\idx\rq
total on rq to .\dbf\temp4

select 4 &&4工作區(qū)
use .\dbf\temp4
go bottom
replace ts with 0
rq1=rq
if !bof()
skip -1
endif
*以下計(jì)算天數(shù)
do while .not. bof()
replace ts with rq1-rq
rq1=rq
skip -1
enddo

rzj0=0 &&日租金初值=0
go top
do while .not. eof()
replace rzjhj with rzj0+rzjzj-rzjjs
replace zlf with ts*rzjhj
rzj0=rzjhj
skip
enddo

*以下****行間一步一步計(jì)算租賃累計(jì)
****
go top
zlflj0=0
do while .not. eof()
replace zlflj with zlflj0+zlf
zlflj0=zlflj
skip
enddo

sum zlf to zlf00 for rq>=tempzydwmc.dt1 .and. rq<tempzydwmc.dt2 &&這里一定是日期>=冬停1 而 小于< 冬停2
zlf00=zlf00*bfb0 &&bfb0表示冬停取費(fèi)系數(shù)

&& locate for rq=rq0 &&定位到指定的日期
go bottom
select 8
append blank
replace dw with tempzydwmc.zlmc,rzjhj with temp4.rzjhj,zlflj with temp4.zlflj,dtf with zlf00
replace sjzlf with zlflj - dtf

select 4 && temp4表
use

select 9
skip

enddo

close database
return



查看完整回答
反對(duì) 回復(fù) 2022-05-23
?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

slect * form 學(xué)員 where 姓名=樓主 into 臨時(shí)表5 group by 年齡
估計(jì)就這幾個(gè)也足夠樓主用了
上句解釋為
從學(xué)員表中查詢所有姓名為“樓主”的字段,然后把查詢的結(jié)果導(dǎo)入到臨時(shí)表5,按年齡來排序...(好好消化消化)
在表單上新建個(gè)表格,然后指定數(shù)據(jù)源為臨時(shí)表5,那就可以直接顯示查詢結(jié)果在表單了

查看完整回答
反對(duì) 回復(fù) 2022-05-23
  • 2 回答
  • 0 關(guān)注
  • 603 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)