VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

SELECT與"&" 語法用途

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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 樓

發表發表於: 星期三 十二月 22, 2010 11:49 am    文章主題: 引言回覆

這篇參考看看 ~~
http://support.microsoft.com/kb/125046/en-us?spid=7992&sid=global
回頂端
檢視會員個人資料 發送私人訊息
tako15god



註冊時間: 2010-12-22
文章: 6


第 3 樓

發表發表於: 星期三 十二月 22, 2010 1:36 pm    文章主題: 引言回覆

pilipala 寫到:
這篇參考看看 ~~
http://support.microsoft.com/kb/125046/en-us?spid=7992&sid=global


感謝大大回覆

但不是很懂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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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 這種中間有空格的
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
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


這種指令如果是熟手會非常容易派上用場
由其是面對類似你所提的片段
經由一堆的判斷後組合出的文字
然後直接執行結合出的結果

比較要注意的如同樓上幾位有提到的空格問題
這種錯誤一定會發生讀取檔案之類的地方
切記一定要用()來取代&
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作