| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 1 樓
  | 
		
			
				 發表於: 星期四 一月 08, 2009 7:19 pm    文章主題: combox 使用時發生controlSource值被截掉問題 | 
				     | 
			 
			
				
  | 
			 
			
				有訂單檔orderitem(內有產品編號欄位itemn)及產品檔item(內有產品編號及產品名稱欄位分別為 itemn, desc),產品編號itemn欄位為數字型態。
 
在combox欄位下拉點選產品編號後在右邊欄位會出現產品名稱,
 
combox欄位物件內容:
 
controlSource=orderitem.itemn
 
GotFocus程序→this.rowsource='';this.rowsourcetype=3;this.rowsource='SELECT itemn, desc FROM item WHERE custn=custn_w INTO CURSOR TEMPB'
 
InterativeChange程序→ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
 
假設產品編號下拉選330005,combox欄位顯示出330005但this.value前面數字值會被截掉後變為5
 
假設產品編號下拉選330001,combox欄位顯示出330001但this.value前面數字值會被截掉後變為1
 
若將InterativeChange程序改→ this.value=tempb.itemn;ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
 
combox欄位物件卻顯示出空白,this.value內容卻為正常值330001
 
請教是哪裡出問題呢?  謝謝幫忙 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		DennisTsai
 
 
  註冊時間: 2005-07-26 文章: 178
 
  第 2 樓
  | 
		
			
				 發表於: 星期五 一月 09, 2009 8:10 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 把欄位的DESC改個名試試 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 一月 09, 2009 8:36 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | DennisTsai 寫到: | 	 		  | 把欄位的DESC改個名試試 | 	  
 
還是一樣,謝謝幫忙哦 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 4 樓
  | 
		
			
				 發表於: 星期五 一月 16, 2009 11:31 am    文章主題: Re: combox 使用時發生controlSource值被截掉問題 | 
				     | 
			 
			
				
  | 
			 
			
				InterativeChange程序→= MESSAGEBOX("test1:"+allt(str(this.value)),"訊息");= MESSAGEBOX("test2:"+allt(str(this.value));" 訊息");ThisForm.產品名稱.Text1.value=tempb.desc;ThisForm.單位.Text1.setfocus
 
訊息會出現test1:1 (前面被截掉)及 test2:330001
 
ControlSource之orderitem.itemn會存成1 而不是330001
 
是因為orderitem.itemn 及 item.itemn 欄位宣告數值的關係嗎?
 
究竟是哪裡出問題呢? 很傷腦筋耶~有沒有人可幫忙呢? | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 5 樓
  | 
		
			
				 發表於: 星期五 一月 16, 2009 11:37 am    文章主題: Re: combox 使用時發生controlSource值被截掉問題 | 
				     | 
			 
			
				
  | 
			 
			
				sorry第2個訊息打錯了應是= MESSAGEBOX("test2:"+this.Displayvalue" 訊息");
 
會出現 test2:330001 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 6 樓
  | 
		
			
				 發表於: 星期五 一月 16, 2009 5:06 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				如果你的 controlsource 是數值型態,
 
那它的 value 就是 .listindex
 
假設你沒有填任何字在 controlsource
 
在 value 填入空白字串,
 
則它的 value 跟 .displayvalue 一樣 _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 7 樓
  | 
		
			
				 發表於: 星期一 一月 19, 2009 9:03 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | garfield 寫到: | 	 		  如果你的 controlsource 是數值型態,
 
那它的 value 就是 .listindex
 
假設你沒有填任何字在 controlsource
 
在 value 填入空白字串,
 
則它的 value 跟 .displayvalue 一樣 | 	  
 
我在InterativeChange程序再多加入一行
 
= MESSAGEBOX("test3:"+allt(str(this.ListIndex))," 訊息");
 
顯示出來是test3:1 (前面33000被截掉,欄位畫面顯示正確,內容卻錯誤),跟allt(str(this.value))內容一樣。
 
如果我使用this.value= val(this.Displayvalue) or 
 
select tempb;this.value=tempb.itemn
 
那該欄位畫面卻出現空白(內容正確,欄位畫面卻顯示錯誤),
 
感謝幫忙 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		andywilliams
 
 
  註冊時間: 2004-10-23 文章: 111
 
  第 8 樓
  | 
		
			
				 發表於: 星期一 一月 19, 2009 11:13 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				在關鍵 DeBug點 如 GotFocus,InterativeChange,LossFocus..加入
 
@ 0,1 say ..combox.DisplayValue && combox顯示的值
 
@ 1,1 say ..combox.Value && combox存入的值
 
@ 2,1 say orderitem.itemn && combox.controlSource的值
 
inkey(1)
 
看看三個值如何變化...就知道問題在那裡 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		alung
 
 
  註冊時間: 2005-11-23 文章: 80
 
  第 9 樓
  | 
		
			
				 發表於: 星期一 一月 19, 2009 4:40 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | andywilliams 寫到: | 	 		  在關鍵 DeBug點 如 GotFocus,InterativeChange,LossFocus..加入
 
@ 0,1 say ..combox.DisplayValue && combox顯示的值
 
@ 1,1 say ..combox.Value && combox存入的值
 
@ 2,1 say orderitem.itemn && combox.controlSource的值
 
inkey(1)
 
看看三個值如何變化...就知道問題在那裡 | 	  
 
我在三個程序分別加入MESSAGEBOX後,先執行GotFocus
 
= MESSAGEBOX("G1→"+allt(this.Displayvalue),"訊息")
 
= MESSAGEBOX("G2→"+allt(str(this.value)),"訊息")
 
= MESSAGEBOX("G3→"+allt(str(orderitem.itemn )),"訊息")
 
G1(this.Displayvalue)、G2(this.value)、G3(orderitem.itemn)分別為空白、0、0
 
滑鼠下拉選擇33001產品編號後會執行InterativeChange
 
this.Displayvalue、this.value、orderitem.itemn 分別為33001、1、0
 
然後會接續執行LostFocus
 
this.Displayvalue、this.value、orderitem.itemn 分別為33001、1、1
 
(欄位畫面顯示正確,內容卻錯誤)倘若在LostFocus最後加入this.value=val(this.Displayvalue)再執行顯示指令
 
this.Displayvalue、this.value、orderitem.itemn 則分別為空白、33001、33001
 
(欄位畫面顯示錯誤→空白值,內容正確→33001)
 
感謝幫忙思考^^ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 10 樓
  | 
		
			
				 發表於: 星期一 一月 19, 2009 5:19 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				你的問題根源就是你的 ControlSource 裡所指定的欄位型態是數值,
 
當然.value 一定是.listindex 的數字,
 
它不會用 .list( .listindex,1 ) 來當 .value值,
 
就算你.list( .listindex,1 ) 的原本欄位型態也是數值,
 
combox 也不會將   .value = .displayvalue
 
請往如何解決這種特性的方式來思考,
 
不用再花時間去 debug .
 
提示:  controlSource='' _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		tigerlee39y
 
 
  註冊時間: 2007-11-26 文章: 132 來自: taipei
  第 11 樓
  | 
		
			
				 發表於: 星期四 一月 22, 2009 7:26 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				garfield兄說的不錯,在combox欄位下拉中的來源資料(controlSource)最好不要設成數值
 
*來源值如果為數值,當你選330005時,RETURN回來的值是330005在來源值的第5筆,也不是你所講的"數字值會被截掉後變為5"
 
*產品編號應設為文字欄才為正確
 
*原則:要作 +-*/的欄位,才設為數值 _________________ 各取所需 各盡所能 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |