  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		pilipala
 
 
  註冊時間: 2009-05-13 文章: 75
 
  第 16 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		CCB2000
 
 
  註冊時間: 2009-03-25 文章: 97
 
  第 17 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		fschern
 
 
  註冊時間: 2003-10-12 文章: 34
 
  第 18 樓
  | 
		
			
				 發表於: 星期一 五月 25, 2009 9:28 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				既然是使用sql2005,試試看將text欄位改用varchar(max)試試看能否解決問題.
 
 
我個人猜測試可能的原因如下:
 
一個可能是下載至client端時有部份字被載掉了,剛好最後一個中文字被截一半.
 
一個可能是sql server的內碼頁與vfp不同,導致自動轉碼時出現特殊字元.
 
一個可能是使用者是將excel(或word)的資料直接貼到vfp中,連特殊字元一起貼進來了...
 
 
不管那種原因都會造成下載的memo資料有特殊字元(內碼小於31或大於128),
 
在vfp9中開啟有特殊字元的memo欄時vfp9會當掉.
 
在vfp6中似乎會自動修正此類錯誤,所以vfp6不會當掉.
 
計算一段文字在sql上所需的欄位總長度時,必須將跳行(每個跳行佔兩個位元組)也要算進去,不要只算看得到的文字部份. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 19 樓
  | 
		
			
				 發表於: 星期五 七月 31, 2009 2:26 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | CCB2000 寫到: | 	 		  | 用VB或DELPHI寫個測試例子,確認是MSSQL的問題還是VFP的問題? | 	  
 
 
是vfp9的問題,因為我用vfp6+sp5是不會有此情形的,vfp9則不管是sp1或sp2都會 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 20 樓
  | 
		
			
				 發表於: 星期五 七月 31, 2009 2:56 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | fschern 寫到: | 	 		  既然是使用sql2005,試試看將text欄位改用varchar(max)試試看能否解決問題.
 
 
我個人猜測試可能的原因如下:
 
一個可能是下載至client端時有部份字被載掉了,剛好最後一個中文字被截一半.
 
一個可能是sql server的內碼頁與vfp不同,導致自動轉碼時出現特殊字元.
 
一個可能是使用者是將excel(或word)的資料直接貼到vfp中,連特殊字元一起貼進來了...
 
 
不管那種原因都會造成下載的memo資料有特殊字元(內碼小於31或大於128),
 
在vfp9中開啟有特殊字元的memo欄時vfp9會當掉.
 
在vfp6中似乎會自動修正此類錯誤,所以vfp6不會當掉.
 
計算一段文字在sql上所需的欄位總長度時,必須將跳行(每個跳行佔兩個位元組)也要算進去,不要只算看得到的文字部份. | 	  
 
 
 
已經將欄位型態改成varchar(max),還是照樣當!!
 
有沒有辦法將這些特殊字元先篩出來過濾掉,再存入或取出呢?
 
就像許功蓋的問題處理方法一樣.... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		saint
 
 
  註冊時間: 2003-07-14 文章: 211
 
  第 21 樓
  | 
		
			
				 發表於: 星期二 八月 04, 2009 6:48 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				太熱沒睡好,起來就看到這個問題,到現在還沒解決?
 
好久沒有寫VFP的CODE ,我在想會不會是ODBC 的 Driver 問題?
 
我先在WORD中產生出要的字元數,放到文字檔中,再取回。相同的東西也有在Form中依苦主的做法,放了Editbox 去做更新,都沒有出現你說的問題,如果再不行可能請苦主提供你的測試程式上來看看先了,我想。
 
 	  | 代碼: | 	 		  
 
*--1.要執行前要先在ODBC中建立 DataSource
 
*--2.ODBC 要用 sql native client
 
*--3.就降
 
CLEAR ALL
 
CLOSE DATABASES ALL    
 
CLEAR 
 
=SQLDISCONNECT(0)
 
LOCAL ln_handle as Integer,cmd as String ,ls_str as String 
 
USE 
 
ln_handle = SQLCONNECT("cd2140","apply","apply1234")
 
ss = FILETOSTR("d:\sql20001.TXT")
 
FOR i=1 TO 10
 
   ?i
 
   IF 0 > SQLEXEC(ln_handle,"update SCHOOL.DBO.PERSON set test = '" + ss +"' WHERE PERSONID=1") THEN 
 
         DIMENSION la_err[1]      
 
         =AERROR(la_err)
 
         ?la_err[2]
 
         SUSPEND 
 
   ENDIF
 
NEXT 
 
 | 	 
  | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 22 樓
  | 
		
			
				 發表於: 星期四 八月 13, 2009 4:53 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這邊的寫法我用的這樣:
 
 
ConnHandle = SQLStringConnect("Driver=Sql Server; Server=xxx.xxx.xx.xx; uid=XXXX; pwd=XXXXXX; database=XXXX; network=DBMSSOCN")
 
 
Driver應該是沒錯才對.....
 
我另外用個簡單的form來測測看好了~~
 
謝謝您! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 23 樓
  | 
		
			
				 發表於: 星期五 八月 14, 2009 5:55 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | saint 寫到: | 	 		  太熱沒睡好,起來就看到這個問題,到現在還沒解決?
 
好久沒有寫VFP的CODE ,我在想會不會是ODBC 的 Driver 問題?
 
我先在WORD中產生出要的字元數,放到文字檔中,再取回。相同的東西也有在Form中依苦主的做法,放了Editbox 去做更新,都沒有出現你說的問題,如果再不行可能請苦主提供你的測試程式上來看看先了,我想。
 
 	  | 代碼: | 	 		  
 
*--1.要執行前要先在ODBC中建立 DataSource
 
*--2.ODBC 要用 sql native client
 
*--3.就降
 
CLEAR ALL
 
CLOSE DATABASES ALL    
 
CLEAR 
 
=SQLDISCONNECT(0)
 
LOCAL ln_handle as Integer,cmd as String ,ls_str as String 
 
USE 
 
ln_handle = SQLCONNECT("cd2140","apply","apply1234")
 
ss = FILETOSTR("d:\sql20001.TXT")
 
FOR i=1 TO 10
 
   ?i
 
   IF 0 > SQLEXEC(ln_handle,"update SCHOOL.DBO.PERSON set test = '" + ss +"' WHERE PERSONID=1") THEN 
 
         DIMENSION la_err[1]      
 
         =AERROR(la_err)
 
         ?la_err[2]
 
         SUSPEND 
 
   ENDIF
 
NEXT 
 
 | 	 
  | 	  
 
 
另外,可以請教您,是如何將2千多個中文字放到Editbox物件中的嗎?
 
我的作法是建立一個Shortcut,在裡面增加"貼上"(_med_paste)的Bar,
 
讓使用者在Editbox物件上按滑鼠右鍵貼上文字串.
 
另外請教,您是使用Visual Foxpro 9嗎?
 
因為我使用VFP6這個版本是不會有這個情形的! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		saint
 
 
  註冊時間: 2003-07-14 文章: 211
 
  第 24 樓
  | 
		
			
				 發表於: 星期六 八月 15, 2009 11:15 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				Q:您是使用Visual Foxpro 9嗎? 
 
A:Yes
 
Q:可以請教您,是如何將2千多個中文字放到Editbox物件中的嗎? 
 
A:在WORD 中 COPY 再貼上去文字檔中,在 Form.Init 中用 THIS.EDit1.Value = FILETOSTR("d:\sql20001.TXT")
 
還是你要提供你的測試程式上來玩看看 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 25 樓
  | 
		
			
				 發表於: 星期一 八月 17, 2009 2:15 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | saint 寫到: | 	 		  Q:您是使用Visual Foxpro 9嗎? 
 
A:Yes
 
Q:可以請教您,是如何將2千多個中文字放到Editbox物件中的嗎? 
 
A:在WORD 中 COPY 再貼上去文字檔中,在 Form.Init 中用 THIS.EDit1.Value = FILETOSTR("d:\sql20001.TXT")
 
還是你要提供你的測試程式上來玩看看 | 	  
 
 
我是直接將2千多個中文字貼到editbox物件中,但是我試過用您的方法讀入文字檔內容,儲存後不會有問題,但關掉再開一次form時就當了,到Sql Server中查看該記錄,欄位值中尾部一些字被截掉了.
 
我要如何上傳程式,是將程式碼貼上來嗎? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 26 樓
  | 
		
			
				 發表於: 星期一 八月 17, 2009 2:54 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				[quote="catfish"] 	  | saint 寫到: | 	 		  Q:您是使用Visual Foxpro 9嗎? 
 
A:Yes
 
Q:可以請教您,是如何將2千多個中文字放到Editbox物件中的嗎? 
 
A:在WORD 中 COPY 再貼上去文字檔中,在 Form.Init 中用 THIS.EDit1.Value = FILETOSTR("d:\sql20001.TXT")
 
還是你要提供你的測試程式上來玩看看 | 	  
 
 
 
以下是開啟檔案的程式:
 
 
if used('rv_emp_test')
 
	USE IN rv_emp_test
 
endif
 
 
cliptext = "select * from emp_test order by test_no"
 
 
result = sqlexec(ConnHandle,cliptext,'rv_emp_test')
 
if result < 0
 
	= messagebox("存取測試檔案錯誤!!"+chr(13)+chr(13)+"請洽程式設計人員...",0+16,"存取錯誤")
 
	return
 
endif
 
 
select rv_emp_test
 
declare FieldList[1]
 
FieldCount = afield(FieldList)
 
m_field = ''
 
m_sqlfield = ''
 
for i = 1 to FieldCount
 
	m_field = m_field + FieldList[i,1]+','
 
	m_sqlfield = m_sqlfield + FieldList[i,1]+' emp_test.'+ FieldList[i,1]+','
 
endfor
 
m_field = left(m_field,len(m_field)-1)
 
m_sqlfield = left(m_sqlfield,len(m_sqlfield)-1)
 
=cursorsetprop('buffering',5)
 
=cursorsetprop('tables','emp_test')
 
=cursorsetprop('keyfieldlist','test_no')
 
=cursorsetprop('updatablefieldlist',m_field)
 
=cursorsetprop('updatenamelist',m_sqlfield)
 
=cursorsetprop('sendupdates',.t.)
 
 
以下是回存的程式:
 
 
result = tableupdate(1,.t.,'rv_emp_test')
 
if result = .f.
 
	= MESSAGEBOX("更新失敗!!")
 
	thisform.refresh()
 
	return
 
endif
 
thisform.refresh() | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		saint
 
 
  註冊時間: 2003-07-14 文章: 211
 
  第 27 樓
  | 
		
			
				 發表於: 星期二 八月 18, 2009 12:38 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 附上程式碼!基本上我用你提供的程式在 GET 、SAVE 這兩個BUTTON 都可以,沒問題。如果再不行,你可能要提供更多資訊。哦..我的還沒有更新到SP2,因為原始檔不知去那了..XD | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 28 樓
  | 
		
			
				 發表於: 星期二 八月 18, 2009 3:41 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | saint 寫到: | 	 		  | 附上程式碼!基本上我用你提供的程式在 GET 、SAVE 這兩個BUTTON 都可以,沒問題。如果再不行,你可能要提供更多資訊。哦..我的還沒有更新到SP2,因為原始檔不知去那了..XD | 	  
 
 
您的程式我在執行寫入文字檔到editbox物件及回存時是ok的!
 
但當我重新對該欄位作異動,再回存就會當了!
 
到資料庫的table中查看,一樣是到某些固定字數就被截斷了,
 
會是SQL Server或VFP的環境有需要特別設定什麼嗎?
 
附上我的程式專案檔,麻煩您了!
 
我的資料庫是用SQL Server 2005. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		catfish
 
 
  註冊時間: 2003-05-29 文章: 45 來自: 台中
  第 29 樓
  | 
		
			
				 發表於: 星期二 八月 18, 2009 3:43 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | saint 寫到: | 	 		  | 附上程式碼!基本上我用你提供的程式在 GET 、SAVE 這兩個BUTTON 都可以,沒問題。如果再不行,你可能要提供更多資訊。哦..我的還沒有更新到SP2,因為原始檔不知去那了..XD | 	  
 
 
另外,有我測試過,不管有沒有更新到SP2,都是會當機的,
 
所以用VFP9或VFP9 SP1來測都可以吧! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		saint
 
 
  註冊時間: 2003-07-14 文章: 211
 
  第 30 樓
  | 
		
			
				 發表於: 星期四 八月 20, 2009 6:18 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| Catfish可以提供你DB的Schema 嗎..?不然沒有一致的環境也,我是用SQL 2005 express | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |