|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
pilipala
註冊時間: 2009-05-13 文章: 75
第 16 樓
|
|
回頂端 |
|
|
CCB2000
註冊時間: 2009-03-25 文章: 95
第 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 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|