  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 1 樓
  | 
		
			
				 發表於: 星期五 三月 25, 2005 9:19 pm    文章主題: 請教有關spt 建立cursor 的問題 | 
				     | 
			 
			
				
  | 
			 
			
				XKEYFIELDLIST = '出貨單號' 
 
XTABLES =  'c:\出貨表頭'
 
MYVIEW = 'V_出貨表頭'
 
*
 
M_COMM = "SELECT *  FROM  " + XTABLES    
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)
 
*
 
IF RESULT<0
 
    ?? CHR(7)
 
    =MESSAGEBOX("執行SPT語法不成功!")
 
ELSE
 
    SELECT (MYVIEW)
 
	m_fields=''
 
	m_sqlfields=''
 
	for i=1 to fcount(alias())
 
		m_fields=m_fields+alltrim(proper(fields[i]))+','
 
		m_sqlfields=m_sqlfields+alltrim(proper(fields[i]))+' '+ XTABLES +'.'+alltrim(proper(fields[i]))+','
 
	endfor
 
	m_fields=left(m_fields,len(m_fields)-1)
 
	m_sqlfields=left(m_sqlfields,len(m_sqlfields)-1)	
 
	
 
	=SQLSETPROP(THISFORM.CONNECTID,'Asynchronous',.T.)
 
	=CURSORSETPROP("BUFFERING",5)
 
	=CURSORSETPROP("TABLES",XTABLES)
 
	=CURSORSETPROP("KEYFIELDLIST",XKEYFIELDLIST)
 
	=CURSORSETPROP('UpdatableFieldList',m_fields)
 
	=CURSORSETPROP("UpdateNameList",m_sqlfields,(MyView))
 
	=CURSORSETPROP("WHERETYPE",3)
 
	=CURSORSETPROP("SENDUPDATES",.T.)
 
    *
 
    =CURSORSETPROP("BatchUpdateCount",1)
 
    =CURSORSETPROP("CompareMemo",.T.)
 
    =CURSORSETPROP("FetchAsNeeded",.F.)
 
    =CURSORSETPROP("FetchMemo",.T.)
 
    =CURSORSETPROP("FetchSize",100)
 
    =CURSORSETPROP("MaxRecords",-1)
 
    =CURSORSETPROP("Prepared",.F.)
 
    =CURSORSETPROP("UpdateType",1)
 
    =CURSORSETPROP("UseMemoSize",255)
 
ENDIF
 
*
 
************  
 
*
 
XKEYFIELDLIST = '出貨單號,SEQ' 
 
XTABLES =  'c:\出貨表身'
 
MYVIEW = 'V_出貨表身'
 
*
 
M_COMM = "SELECT *  FROM  " + XTABLES  + " WHERE 出貨單號  = ?V_出貨表頭.出貨單號" 
 
 
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)
 
*
 
IF RESULT<0
 
    ?? CHR(7)
 
    =MESSAGEBOX("執行SPT語法不成功!")
 
ELSE
 
    SELECT (MYVIEW)
 
	m_fields=''
 
	m_sqlfields=''
 
	for i=1 to fcount(alias())
 
		m_fields=m_fields+alltrim(proper(fields[i]))+','
 
		m_sqlfields=m_sqlfields+alltrim(proper(fields[i]))+' '+ XTABLES +'.'+alltrim(proper(fields[i]))+','
 
	endfor
 
	m_fields=left(m_fields,len(m_fields)-1)
 
	m_sqlfields=left(m_sqlfields,len(m_sqlfields)-1)	
 
	
 
	=SQLSETPROP(THISFORM.CONNECTID,'Asynchronous',.T.)
 
	=CURSORSETPROP("BUFFERING",5)
 
	=CURSORSETPROP("TABLES",XTABLES)
 
	=CURSORSETPROP("KEYFIELDLIST",XKEYFIELDLIST)
 
	=CURSORSETPROP('UpdatableFieldList',m_fields)
 
	=CURSORSETPROP("UpdateNameList",m_sqlfields,(MyView))
 
	=CURSORSETPROP("WHERETYPE",3)
 
	=CURSORSETPROP("SENDUPDATES",.T.)
 
    *
 
    =CURSORSETPROP("BatchUpdateCount",1)
 
    =CURSORSETPROP("CompareMemo",.T.)
 
    =CURSORSETPROP("FetchAsNeeded",.F.)
 
    =CURSORSETPROP("FetchMemo",.T.)
 
    =CURSORSETPROP("FetchSize",100)
 
    =CURSORSETPROP("MaxRecords",-1)
 
    =CURSORSETPROP("Prepared",.F.)
 
    =CURSORSETPROP("UpdateType",1)
 
    =CURSORSETPROP("UseMemoSize",255)
 
ENDIF
 
*
 
 
以下有幾個疑問想請教
 
 
1.上述程式寫在 FORM 的Dataenvironment 的 BeforeOpenTables 裡,這樣對嗎 ?好嗎 ?
 
2.建立  'V_出貨表頭'
 
   XKEYFIELDLIST = '出貨單號' 
 
   XTABLES =  'c:\出貨表頭'
 
   MYVIEW = 'V_出貨表頭'
 
   *
 
   M_COMM = "SELECT *  FROM  " + XTABLES    
 
   RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)
 
   *
 
   如 c:\出貨表頭 檔很大,SQLEXEC() 的時間會很久,請問各位前輩都用什麼方式來解決
 
        LOCAL VIEW 有一個 NODATAONLOAD 的屬性,那用 SPT 如何解決
 
 
3.建立  'V_出貨表身'
 
  XKEYFIELDLIST = '出貨單號,SEQ' 
 
  XTABLES =  'c:\出貨表身'
 
  MYVIEW = 'V_出貨表身'
 
  *
 
  M_COMM = "SELECT *  FROM  " + XTABLES  + " WHERE 出貨單號  = ?V_出貨表頭.出貨單號" 
 
  RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)
 
  *
 
  有一條件 WHERE 出貨單號  = ?V_出貨表頭.出貨單號
 
   出貨表頭 SKIP 時 V_出貨表身  重顯示
 
   LOCAL VIEW 寫法
 
     SELECT V_出貨表頭
 
     SKIP
 
    = REQUERY('V_出貨表身')
 
 
  SPT 應如何處理 ?
 
  = REQUERY('V_出貨表身')  出現
 
   此函數不支援 SQL pass-through 暫存資料表格
 
 
請問各位前輩,萬分感謝,謝謝 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		cchvfp
 
 
  註冊時間: 2003-07-05 文章: 18
 
  第 2 樓
  | 
		
			
				 發表於: 星期五 三月 25, 2005 9:34 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				1.寫在load就可以了
 
2.可用where 1=2,如此就沒有資料了
 
3.spt的cursor無法用requery()
 
需要重新sqlexec,然後重新設定cursorsetprop() | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 三月 25, 2005 10:46 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝 CCHVFP 大哥的回答 
 
需要重新sqlexec,然後重新設定cursorsetprop()
 
您的意思
 
=SQLSETPROP(THISFORM.CONNECTID,'Asynchronous',.T.) 
 
=CURSORSETPROP("BUFFERING",5) 
 
=CURSORSETPROP("TABLES",XTABLES) 
 
=CURSORSETPROP("KEYFIELDLIST",XKEYFIELDLIST) 
 
=CURSORSETPROP('UpdatableFieldList',m_fields) 
 
=CURSORSETPROP("UpdateNameList",m_sqlfields,(MyView)) 
 
=CURSORSETPROP("WHERETYPE",3) 
 
=CURSORSETPROP("SENDUPDATES",.T.) 
 
* 
 
=CURSORSETPROP("BatchUpdateCount",1) 
 
=CURSORSETPROP("CompareMemo",.T.) 
 
=CURSORSETPROP("FetchAsNeeded",.F.) 
 
=CURSORSETPROP("FetchMemo",.T.) 
 
=CURSORSETPROP("FetchSize",100) 
 
=CURSORSETPROP("MaxRecords",-1) 
 
=CURSORSETPROP("Prepared",.F.) 
 
=CURSORSETPROP("UpdateType",1) 
 
=CURSORSETPROP("UseMemoSize",255) 
 
都要重新做一次喔?! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 4 樓
  | 
		
			
				 發表於: 星期六 四月 02, 2005 2:42 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				因為出現很多問題,煩請各位前輩,如知道煩請回應一下,拜託
 
 
SELECT 出貨表頭
 
SKIP
 
*
 
XKEYFIELDLIST = '出貨單號,SEQ' 
 
XTABLES = 'c:\出貨表身' 
 
MYVIEW = 'V_出貨表身' 
 
* 
 
M_COMM = "SELECT * FROM " + XTABLES + " WHERE 出貨單號 = ?V_出貨表頭.出貨單號" 
 
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) 
 
* 
 
IF RESULT<0 
 
?? CHR(7) 
 
=MESSAGEBOX("執行SPT語法不成功!") 
 
ELSE 
 
SELECT (MYVIEW) 
 
m_fields='' 
 
m_sqlfields='' 
 
for i=1 to fcount(alias()) 
 
m_fields=m_fields+alltrim(proper(fields[i]))+',' 
 
m_sqlfields=m_sqlfields+alltrim(proper(fields[i]))+' '+ XTABLES +'.'+alltrim(proper(fields[i]))+',' 
 
endfor 
 
m_fields=left(m_fields,len(m_fields)-1) 
 
m_sqlfields=left(m_sqlfields,len(m_sqlfields)-1) 
 
 
=SQLSETPROP(THISFORM.CONNECTID,'Asynchronous',.T.) 
 
=CURSORSETPROP("BUFFERING",5) 
 
=CURSORSETPROP("TABLES",XTABLES) 
 
=CURSORSETPROP("KEYFIELDLIST",XKEYFIELDLIST) 
 
=CURSORSETPROP('UpdatableFieldList',m_fields) 
 
=CURSORSETPROP("UpdateNameList",m_sqlfields,(MyView)) 
 
=CURSORSETPROP("WHERETYPE",3) 
 
=CURSORSETPROP("SENDUPDATES",.T.) 
 
* 
 
=CURSORSETPROP("BatchUpdateCount",1) 
 
=CURSORSETPROP("CompareMemo",.T.) 
 
=CURSORSETPROP("FetchAsNeeded",.F.) 
 
=CURSORSETPROP("FetchMemo",.T.) 
 
=CURSORSETPROP("FetchSize",100) 
 
=CURSORSETPROP("MaxRecords",-1) 
 
=CURSORSETPROP("Prepared",.F.) 
 
=CURSORSETPROP("UpdateType",1) 
 
=CURSORSETPROP("UseMemoSize",255) 
 
ENDIF 
 
 
 
上列的程式碼,是否表頭SKIP 一筆, 就要重新執行一次
 
 RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) 
 
每次執行 SQLEXEC() 會產生 MYVIEW ,那在執行前要不要先 USE IN MYVIEW ,還是不用關檔,產生MYVIEW 直接覆蓋
 
*
 
SELECT V_出貨表頭
 
.....
 
 RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)   && 這一行執行的結果應會產生 MYVIEW 
 
? ALIAS()  結果是 V_出貨表頭,為何不是 MYVIEW
 
已困擾很久,請各位前輩幫忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 5 樓
  | 
		
			
				 發表於: 星期日 四月 03, 2005 3:05 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				"MYVIEW = 'V_出貨表身' "
 
"RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) "
 
 
很明顯的,
 
MYVIEW 的值是 'V_出貨表身' ,
 
所以? ALIAS() 結果是 V_出貨表頭,
 
 
應該是"RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,"MYVIEW") "
 
其中差異你能體會嗎?
 
傳一個字串與傳一個字串變數是不同的. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 6 樓
  | 
		
			
				 發表於: 星期日 四月 03, 2005 11:08 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝 syntech 前輩的回答
 
但不懂前輩 MYVIEW = 'V_出貨表身'
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,"MYVIEW") 
 
? alias() 應為 MYVIEW , 還是 V_出貨表身,還是V_出貨表頭
 
*
 
我現在的問題
 
   SELECT V_出貨表頭
 
   MYVIEW = 'V_出貨表身'
 
  RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) 
 
  ? ALIAS() 結果是 V_出貨表頭 ,我覺得應為 V_出貨表身 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 7 樓
  | 
		
			
				 發表於: 星期一 四月 04, 2005 9:23 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				ALIAS() 有的時候會有非預期的情況出現,
 
我也有發現,
 
你的疑問是這個嗎?
 
 
所以我現在不太使用 ALIAS() 取回目前的工作區,
 
還是以自己指定的方式處理. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		bin1x
 
 
  註冊時間: 2004-08-27 文章: 462
 
  第 8 樓
  | 
		
			
				 發表於: 星期一 四月 04, 2005 9:54 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | syntech 寫到: | 	 		  ALIAS() 有的時候會有非預期的情況出現,
 
我也有發現,
 
你的疑問是這個嗎?
 
 
所以我現在不太使用 ALIAS() 取回目前的工作區,
 
還是以自己指定的方式處理. | 	  
 
select() 可能來的好 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 9 樓
  | 
		
			
				 發表於: 星期一 四月 04, 2005 9:58 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				兩個函式的機制不知道一不一樣.....
 
 
ALIAS() 傳回目前工作區的名稱(字串),
 
SELECT() 傳回目前工作區的編號(整數),
 
因為公司的習慣是以名稱當是識別基礎,所以代號就暫時不考慮. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 10 樓
  | 
		
			
				 發表於: 星期三 四月 06, 2005 6:11 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝 bin1x 及 syntech 的回答, 我的問題不在 select() 及 alias() 
 
我的問題在
 
SQLEXEC(THISFORM.CONNECTID,"SELECT * FROM CUSTOMER","MYVIEW") 
 
為何找不到 MYVIEW 這個 CURSOR ,但發現用 VFP6.0 及 VFP8.0 SP1  有問題,用 VFP8.0 是正常
 
也不知是我的問題還是VFP的問題,想用 VFP 9.0 跑跑看,目前 VFP 9.0 還沒有出貨,程式不能不寫,
 
暫時用 VFP 8.0 來寫了,還是感謝前輩的回答 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 11 樓
  | 
		
			
				 發表於: 星期三 四月 06, 2005 9:06 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				奇怪,
 
你一開始的問題,和你最後一次POST的問題不一樣.   
 
 
一開始是 RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)
 
因為 MYVIEW 是一個變數,其值為 'V_出貨表身' 
 
所以傳回的 CURSOR 應該叫做 'V_出貨表身' (我前面好像剪刀漿糊貼錯了)
 
如果你要讓傳回的CURSOR 叫 "MYVIEW",
 
應該是  RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,"MYVIEW")
 
加上 " 或 ' .
 
 
不過,後面的問題似乎變成沒有傳回 result cursor,
 
你應該要用 利用 AERROR() 查看命令是否正確執行,
 
及 利用 SELECT ("MYVIEW") 驗證是否確實產生一個CURSOR (若傳回值 >0 ,則傳回值為其工作區編號)
 
 
因為你沒有作驗證的動作,
 
也許 M_COMM 中包含的SQL 命令是錯的(中途更動過也說不一定),也許 THISFORM.CONNECTID 連線已經中斷 ,
 
而你還是以為命令正常執行,而會產生CURSOR
 
 
我說的異常情況是指VFP 會偷偷摸摸切換工作區,
 
造成 ALIAS()傳回的工作區名稱在沒有人為切換工作區 (SELECT alias)的情況下,
 
得到不同的結果. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ms0800
 
 
  註冊時間: 2004-07-23 文章: 65
 
  第 12 樓
  | 
		
			
				 發表於: 星期四 四月 07, 2005 12:35 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				不好意思,讓syntech 前輩費心了,
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,"MYVIEW") 
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) 
 
 
我知道上兩行不一樣,如果正常執行 第一行 CURSOR 叫 "MYVIEW"
 
第二 行 CURSOR 叫 'V_出貨表身' 
 
對不起,前後所舉的例子不一樣,讓您誤解了,
 
那我重新再闡述我的問題
 
 
為何執行RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW) 
 
這行後不會產生 &myview ->V_出貨表身 這個 cursor ,而且有時可以 ,有時不可以,我並沒有懷疑 thisform.connectid 有沒有斷線
 
也沒有用 aerror 來檢查命令是否正確執行,但讓我很奇怪的 vfp6.0 及 vfp8.0 SP1
 
RESULT=SQLEXEC(THISFORM.CONNECTID,M_COMM,MYVIEW)  無法正確產生 &myview ->V_出貨表身, VFP8.0 就正常
 
因為第一次用 SPT 語法,也不知道寫法對不對,如果前輩還願意聴我說,還望前輩給予指導,
 
 
表單的 LOAD 寫
 
RESULT=SQLEXEC(THISFORM.CONNECTID,'SELECT * FROM 表頭 WHERE 1 =  2','V_出貨表頭')
 
*
 
USER 查詢 '表頭'符合條件後開始秀資料,這時'表頭'的RECNO()一定停在符合條件的第一筆 所以 USER 
 
下查詢指令後 RESULT=SQLEXEC(THISFORM.CONNECTID,'SELECT * FROM 表頭 WHERE 出貨日期 = DATE()','V_出貨表頭')
 
 查詢表身      RESULT=SQLEXEC(THISFORM.CONNECTID,'SELECT * FROM 表身 WHERE 出貨單號 =?V_出貨表頭.出貨單號,'V_出貨表身')
 
這時應可秀出第一筆符合條件的出貨單,要查詢第二張出貨單,我寫的程序是
 
  SELECT V_出貨表頭
 
  SKIP
 
 RESULT=SQLEXEC(THISFORM.CONNECTID,'SELECT * FROM 表身 WHERE 出貨單號 =?V_出貨表頭.出貨單號,'V_出貨表身')
 
*
 
 如果再查下一張出貨單,一樣
 
  SELECT V_出貨表頭
 
  SKIP
 
 RESULT=SQLEXEC(THISFORM.CONNECTID,'SELECT * FROM 表身 WHERE 出貨單號 =?V_出貨表頭.出貨單號,'V_出貨表身')
 
 我很想知道我這個方法對不對,目前為止,好像沒有人正面囋聲可以,還是不好,因為自已沒有把握這種寫法,又碰到完全沒有修改程式
 
VFP 6.0 會找不到 V_出貨表身,VFP 8.0 又可以正常,VFP 8.0 SP1 一樣會找不到 V_出貨表身,讓我的心不安且迷惘,
 
如果前輩如果知道,煩請告之,謝謝 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |