  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		shengyi
 
 
  註冊時間: 2004-07-14 文章: 35
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 二月 05, 2009 1:54 pm    文章主題: 請問如何把同一天的資料都印在同一個欄位 | 
				     | 
			 
			
				
  | 
			 
			
				假設 TABL1如下
 
date money 
 
1 AAA 
 
2 BBB 
 
5 CCC
 
5 DDD 
 
12 EEE
 
12 FFF
 
12 GGG 
 
22 MMM 
 
 
想得到TABL2
 
date money
 
1  AAA
 
2  BBB 
 
5  CCC  DDD
 
12 EEE  FFF  GGG
 
22 MMM
 
 
我的想法是用SCAN達成,先讀一筆把資料放至變數,
 
再判斷下一筆資料日期是否相同,相同則把MONEY資料APPEND至變數,不相同則寫至特定TABLE,有較簡單的方法?(TABLE2的MONEY欄位要放至報表中) | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期四 二月 05, 2009 6:28 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				你的問題只有一個.
 
和你其他的問題一樣.
 
 
 
 
你根本不了解你的武器. _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		shengyi
 
 
  註冊時間: 2004-07-14 文章: 35
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 二月 06, 2009 12:47 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				請問一下,下面這段程式最後一個repl有誤嗎 ?
 
?tempid有顯示資料,但後面repl卻沒寫資料進去?
 
 
SELE table2
 
	SCAN
 
		tempdate=table2.date
 
		
 
		SELE table1
 
		SCAN for table1.date=tempdate
 
		tempid = tempid + " " + table1.money 
 
				
 
		ENDSCAN
 
		? tempid
 
		REPL table2.money with tempid
 
		tempid= ""
 
	ENDSCAN | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		Terry1211
 
 
  註冊時間: 2008-03-13 文章: 63
 
  第 4 樓
  | 
		
			
				 發表於: 星期五 二月 06, 2009 7:12 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				擷取 Help裡 replace的說明
 
REPLACE 命令用運算式的值替換欄位中的資料。
 
若欄位不在選定工作區,則必須在欄位前加上資料表格別名。
 
注意: 如果省略 IN 子句,如果記錄指標位於目前工作區中檔案的尾部,
 
且指定了另一個工作區中的欄位,則不發生替換。 
 
 
replace前加上select table2試看看~~ | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		shengyi
 
 
  註冊時間: 2004-07-14 文章: 35
 
  第 5 樓
  | 
		
			
				 發表於: 星期五 二月 06, 2009 3:48 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				感謝Terry1211,加上sele真得可以了.
 
但有另外一個問題, 原本這一段是正常的
 
tempid = tempid + " " + table1.money 
 
 
但今天執行的時候會出現"運算子/運算元....不符"訊息,後來是先改成
 
tempid = tempid + table1.money 
 
發現可以執行,然後再改回tempid = tempid + " " + table1.money 又可以了,tempid是宣告為public charater(7),那裡有問題嗎? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		區榮熾
 
 
  註冊時間: 2005-11-14 文章: 191
 
  第 6 樓
  | 
		
			
				 發表於: 星期五 二月 06, 2009 9:57 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | shengyi 寫到: | 	 		  請問一下,下面這段程式最後一個repl有誤嗎 ?
 
?tempid有顯示資料,但後面repl卻沒寫資料進去?
 
 
SELE table2
 
	SCAN
 
		tempdate=table2.date
 
		
 
		SELE table1
 
		SCAN for table1.date=tempdate
 
		tempid = tempid + " " + table1.money 
 
				
 
		ENDSCAN
 
		? tempid
 
		REPL table2.money with tempid
 
		tempid= ""
 
	ENDSCAN | 	  
 
在 ENDSCAN  之後 要切回到  Table2 ,才能將 tempid Repl  進 table2.money | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		shengyi
 
 
  註冊時間: 2004-07-14 文章: 35
 
  第 7 樓
  | 
		
			
				 發表於: 星期六 二月 07, 2009 12:38 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 關於"運算子/運算元....不符"問題,我在前面加上tempid = " "就可以了! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		朱育興
 
 
  註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
  第 8 樓
  | 
		
			
				 發表於: 星期六 二月 07, 2009 5:03 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | shengyi 寫到: | 	 		  感謝Terry1211,加上sele真得可以了.
 
但有另外一個問題, 原本這一段是正常的
 
tempid = tempid + " " + table1.money 
 
 
但今天執行的時候會出現"運算子/運算元....不符"訊息,後來是先改成
 
tempid = tempid + table1.money 
 
發現可以執行,然後再改回tempid = tempid + " " + table1.money 又可以了,tempid是宣告為public charater(7),那裡有問題嗎? | 	  
 
建議不要亂用 PUBLIC,tempid 這個變數應該沒那麼偉大需要在各個程序中到處使用吧!
 
 
會出現"運算子/運算元....不符"訊息,是因為在執行 tempid = tempid + " " + table1.money 之前,tempid 已在它處被使用,但它的資料型態又不是字元型態,所以出現"運算子/運算元....不符"訊息是理所當然的事
 
 
SELE table2 
 
SCAN 
 
tempdate=table2.date 
 
 
SELE table1 
 
SCAN for table1.date=tempdate 
 
tempid = tempid + " " + table1.money 
 
 
ENDSCAN 
 
? tempid 
 
REPL table2.money with tempid 
 
tempid= "" 
 
ENDSCAN
 
 
改為
 
 
SELECT table2 
 
SCAN 
 
	tempid= "" 
 
	SELECT table1 
 
	SCAN FOR table1.date = table2.date 
 
		tempid = tempid + " " + table1.money 
 
	ENDSCAN 
 
	REPLACE table2.money WITH LTRIM(tempid)  && 去掉左邊空白
 
ENDSCAN _________________ 希望有更多人來參與
 
 VFP wiki - 需要大家一起完成的VFP電子書與FAQ  | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		Terry1211
 
 
  註冊時間: 2008-03-13 文章: 63
 
  第 9 樓
  | 
		
			
				 發表於: 星期六 二月 07, 2009 6:29 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 引言回覆: | 	 		  | 感謝Terry1211,加上sele真得可以了.  | 	  
 
 
你該了解工作區在VFP裡的觀念
 
 
 
 
如同朱大所說,Public 不要亂用,
 
了解一下Public、Private,Local的差別吧 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		區榮熾
 
 
  註冊時間: 2005-11-14 文章: 191
 
  第 10 樓
  | 
		
			
				 發表於: 星期一 二月 09, 2009 11:20 pm    文章主題: TO : 朱育興老師請教我.... | 
				     | 
			 
			
				
  | 
			 
			
				(VFP6.0)在不同工作區的資料寫入動作,是一定要切回原工作區,才能寫入嗎?(除了使用INSERT INTO 就不需切回) 對?
 
如在  Table2  Scan  DATA  SELECT SCAN Table1 找到了 Table2要的資料 ENDSCAN SELECT Table2(如不切回,則工作區仍在 TABLE1)  REPL  TABLE2.DATA  with  TABLE1.DATA  ENDSCAN (這樣可以成功的寫入資料?)
 
我的概念混淆? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		fschern
 
 
  註冊時間: 2003-10-12 文章: 34
 
  第 11 樓
  | 
		
			
				 發表於: 星期二 二月 10, 2009 9:08 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				以下摘錄VFP9.0的HELP=>
 
 
REPLACE Command (Visual FoxPro)
 
 
REPLACE FieldName1 WITH eExpression1 [ADDITIVE]
 
   [, FieldName2 WITH eExpression2 [ADDITIVE]] ... [Scope]
 
   [FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias]
 
   [NOOPTIMIZE]
 
.........
 
Note  
 
If the IN clause is omitted, no replacement occurs if the record pointer is at the end of the file in the current work area and you specify a field in another work area. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 12 樓
  | 
		
			
				 發表於: 星期二 二月 10, 2009 10:24 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				也許這個問題在不同版本或是在其他 xbase 語法的工具上,做法有些差異,
 
 
但是最不會出問題的做法,
 
還是再做任何動作前 select alais ,直接設定工作區,
 
尤其是工作區傻傻分不清楚的時候
 
(只是我也還是會用 alias.field ,因為這樣還是比較清楚,我不在乎增加肌鍵炎的機會)
 
 
 
另外,由於foxpro屬於弱型態的工具,
 
變數的型態可以被自由改變,
 
所以宣告成public或是指定型態,並不能保證沒事.
 
還是要注意變數可視性,生命週期等變數管理動作
 
 
還是一句,要用心了解你的武器 _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		區榮熾
 
 
  註冊時間: 2005-11-14 文章: 191
 
  第 13 樓
  | 
		
			
				 發表於: 星期二 二月 10, 2009 11:08 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | syntech 寫到: | 	 		  也許這個問題在不同版本或是在其他 xbase 語法的工具上,做法有些差異,
 
 
但是最不會出問題的做法,
 
還是再做任何動作前 select alais ,直接設定工作區,
 
尤其是工作區傻傻分不清楚的時候
 
(只是我也還是會用 alias.field ,因為這樣還是比較清楚,我不在乎增加肌鍵炎的機會)
 
 
 
另外,由於foxpro屬於弱型態的工具,
 
變數的型態可以被自由改變,
 
所以宣告成public或是指定型態,並不能保證沒事.
 
還是要注意變數可視性,生命週期等變數管理動作
 
 
還是一句,要用心了解你的武器 | 	  
 
根據Syntech兄所述,已瞭解我的概念正確,謝謝!
 
至於其他版本的優異,我不會去研究.............VFP6.0 已經很好用了 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 14 樓
  | 
		
			
				 發表於: 星期二 二月 10, 2009 11:22 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				區兄,
 
 
====
 
SELECT table2 
 
SCAN 
 
tempid= "" 
 
SELECT table1 
 
SCAN FOR table1.date = table2.date 
 
tempid = tempid + " " + table1.money 
 
ENDSCAN 
 
SELECT TABLE2
 
REPLACE table2.money WITH LTRIM(tempid) && 去掉左邊空白 
 
ENDSCAN
 
====
 
 
應該問題是出在紅字上吧.
 
習慣上,我會這樣做沒錯,
 
可以避免很多問題.
 
尤其是loop太大的時候.
 
 
當然,關鍵還是在 scan....endscan 時,vfp知不知道是對哪個工作區作業,
 
如果vfp知道,當然就沒問題,
 
如果不是,當然就是完蛋.
 
 
如果使用 do while(!eof()) ...... skip enddo ,不注意工作區切換就一定出問題.  XD _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		區榮熾
 
 
  註冊時間: 2005-11-14 文章: 191
 
  第 15 樓
  | 
		
			
				 發表於: 星期二 二月 10, 2009 4:58 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				TO Syntech兄:
 
我在 Shengyi兄說Repl 不進資料時,就請在 ENDSCAN後(也就是說您加上的紅字)
 
加 SELECT TABLE2後 VFP 才知道 REPL 的標的....
 
我都是如此更改資的,但看了秀出的程式碼(缺少紅字部份),就對自己的概念沒信心(因學得不深之故),才向朱育興老師請教,現經您的回答,我已清楚了,謝謝您啦! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |