  | 
				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 文章: 4252 來自: 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 文章: 4252 來自: 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  | 	 
  | 	  
 
 
這種指令如果是熟手會非常容易派上用場
 
由其是面對類似你所提的片段
 
經由一堆的判斷後組合出的文字
 
然後直接執行結合出的結果
 
 
比較要注意的如同樓上幾位有提到的空格問題
 
這種錯誤一定會發生讀取檔案之類的地方
 
切記一定要用()來取代& | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |