|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
tako15god
註冊時間: 2010-12-22 文章: 6
第 1 樓
|
發表於: 星期三 十二月 22, 2010 11:37 am 文章主題: SELECT與"&" 語法用途 |
|
|
大家好,我是VFP的新手
最近接手一個案子要看懂舊有系統寫的程式,
日後可能需要增加新功能(?)
以下是我的程式片斷
這是一支讀取SQL資料並顯示到畫面的程式,
程式本身的邏輯不是提問的重點,只是想表達我的疑問語法被使用在什麼情況下,
其中 SELECT的用法與&S的用法並不是很懂
SELECT是類似MSSQL中的USE 'DB'嗎?
&S的用法很常在程式中看到,但&運算元用法我找不到,請各位大大解答,感謝
程式片斷
代碼: |
PROCEDURE m_readtexttocursor
LOCAL c1,c2,n,s,cs
SELECT showgrid
s='REPLACE ALL '+THISFORM.p_tablefield+' WITH (THISFORM.ptxt_keyno.VALUE) IN showgrid'
&s
FOR n=1 TO 200
c1=THISFORM.p_txtvsfld[n]
IF TYPE('c1')='C'
c2=c1
m=AT('.',c2)
DO WHILE m>0
c2=SUBSTR(c2,m+1)
m=AT('.',c2)
ENDDO
c2=SUBSTR(c2,4)
IF (THISFORM.p_secret)
s="c=THISFORM."+c1+".VALUE"
&s
IF TYPE('c')='C'
c=sf_strxor(c)
ENDIF
s='REPLACE ALL '+c2+' WITH c IN showgrid'
&s
ELSE
s='REPLACE ALL '+c2+' WITH THISFORM.'+c1+'.VALUE IN showgrid'
&s
ENDIF
ELSE
EXIT
ENDIF
ENDFOR
RETURN
ENDPROC |
很抱歉程式碼的部份弄的不好,這此先更正過來
tako15god 在 星期三 十二月 22, 2010 2:40 pm 作了第 2 次修改 |
|
回頂端 |
|
|
pilipala
註冊時間: 2009-05-13 文章: 75
第 2 樓
|
|
回頂端 |
|
|
tako15god
註冊時間: 2010-12-22 文章: 6
第 3 樓
|
發表於: 星期三 十二月 22, 2010 1:36 pm 文章主題: |
|
|
感謝大大回覆
但不是很懂Marco Substitution 實際對程式意義為何,
此文章上面寫了2點Marco Substitution 的缺點
對於實際應用有何幫助嗎?
謝謝 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 4 樓
|
發表於: 星期三 十二月 22, 2010 2:08 pm 文章主題: |
|
|
如果是指 SELECT <TABLE ALIAS> ,
確實與 USE <DB> 類似,
因為 FOXPRO 是以TABLE 操作為主的, SELECT <TABLE ALIAS> 就是用來切換操作TABLE,
當然 FOXPRO 也有 USE <DB> ,但是意義稍有不同,
有開啟資料庫的意思在.
& 是FOXPRO優於其他資料庫設計軟體的部分
FOXPRO是基於早期直譯式資料庫操作工具 DBASE而來,
可以把要執行的命令在RUNTIME重新組合,
然後用&執行.
例如:
代碼: |
S = "SELECT * FROM TABLE "
IF F1 = 'A'
S = S+" WHERE F1 = 'A' "
ELSE
S = S+" WHERE F1 != 'A' "
ENDIF
&S
|
如果是其他軟體,可能得寫死在程式中
代碼: |
IF F1 = 'A'
GET_DATA("SELECT * FROM TABLE WHERE F1 = 'A' ")
ELSE
GET_DATA("SELECT * FROM TABLE WHERE F1 != 'A' ")
ENDIF
|
_________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
tako15god
註冊時間: 2010-12-22 文章: 6
第 5 樓
|
發表於: 星期三 十二月 22, 2010 2:45 pm 文章主題: |
|
|
感謝syntech的解答,
再請教一下,
當&s執行完後,
其執行結果會儲存在...?
代碼: |
S = "SELECT * FROM TABLE "
IF F1 = 'A'
S = S+" WHERE F1 = 'A' "
ELSE
S = S+" WHERE F1 != 'A' "
ENDIF
&S |
|
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 6 樓
|
發表於: 星期三 十二月 22, 2010 4:06 pm 文章主題: |
|
|
那就請你多加油,看一下 FOXPRO 的 SELECT - SQL 說明.
& 不只可以用在這裡,
大多數的命令都可以在RUNTIME重新組合,即時運算出結果 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
tako15god
註冊時間: 2010-12-22 文章: 6
第 7 樓
|
發表於: 星期三 十二月 22, 2010 5:26 pm 文章主題: |
|
|
syntech 寫到: | 那就請你多加油,看一下 FOXPRO 的 SELECT - SQL 說明.
& 不只可以用在這裡,
大多數的命令都可以在RUNTIME重新組合,即時運算出結果 |
ok~非常感謝^^ |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 8 樓
|
發表於: 星期三 十二月 22, 2010 10:16 pm 文章主題: |
|
|
提醒一下 在路徑上使用時盡量以()取代& 可以避免掉一些錯誤
例如 Microsoft Visual Studio 9.0 這種中間有空格的 |
|
回頂端 |
|
|
genta
註冊時間: 2005-06-01 文章: 1
第 9 樓
|
發表於: 星期日 一月 30, 2011 3:06 pm 文章主題: |
|
|
宏替换 |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 10 樓
|
發表於: 星期日 一月 30, 2011 8:02 pm 文章主題: |
|
|
tako15god 寫到: | 感謝syntech的解答,
再請教一下,
當&s執行完後,
其執行結果會儲存在...?
代碼: |
S = "SELECT * FROM TABLE "
IF F1 = 'A'
S = S+" WHERE F1 = 'A' "
ELSE
S = S+" WHERE F1 != 'A' "
ENDIF
&S |
|
這種指令如果是熟手會非常容易派上用場
由其是面對類似你所提的片段
經由一堆的判斷後組合出的文字
然後直接執行結合出的結果
比較要注意的如同樓上幾位有提到的空格問題
這種錯誤一定會發生讀取檔案之類的地方
切記一定要用()來取代& |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|