VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

請教sqlexec是否有長度限制?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
myc77



註冊時間: 2003-07-26
文章: 2


第 1 樓

發表發表於: 星期四 九月 04, 2014 3:51 pm    文章主題: 請教sqlexec是否有長度限制? 引言回覆

請教sqlexec是否有長度限制?超過255字元要如何處理?查詢前例並無解答,謝謝!
回頂端
檢視會員個人資料 發送私人訊息
asd89839032



註冊時間: 2012-10-15
文章: 49


第 2 樓

發表發表於: 星期四 九月 04, 2014 4:01 pm    文章主題: 引言回覆

VFP9中文HELP:

如果要傳遞的 SQL 敘述太長,請檢查是否超過 Visual FoxPro 最長 255 個字元的字串文字。字串太長則會產生 "命令中包含無法辨識的片語或關鍵字" 的錯誤。然而,如果將它們分開到幾個相連的文字中,就可以傳遞較長的 SQL 敘述。例如:

  複製程式碼
lnRetVal = SQLEXEC(lnHandle, "SELECT <長的欄位清單> " + ;
"FROM <數個資料表格> " + ;
"WHERE <複雜的過濾運算式>")



======================================
應該是在問這個!?

_________________
菜鳥路過...
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 3 樓

發表發表於: 星期四 九月 04, 2014 4:44 pm    文章主題: 引言回覆

以前討論過,sqlexec 中的sql 敘述總長度應該可以到8000 的樣子.

你可以用 text....endtext 或是上面說的字串相加的方式延長

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
ckp6250



註冊時間: 2004-07-30
文章: 1642


第 4 樓

發表發表於: 星期四 九月 04, 2014 6:28 pm    文章主題: 引言回覆

sql 敘述總長度應該是受到後端資料庫的限制

M$ SQL 我不知道
但若為 Mysql 的話,它的長度是 1 GB
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
myc77



註冊時間: 2003-07-26
文章: 2


第 5 樓

發表發表於: 星期五 九月 05, 2014 8:57 am    文章主題: 引言回覆

感謝各位解惑,就如同2樓大大所言,我目前是用這的方法,就是把字串拆成數個,然後再加起來,例如
Test_str1="update table set fields_1=?var1,fields_2=?var2,..."
Test_str2=",fields_20=?var20 where ...."
=sqlexec(ConnectionHandle,Test_str1+Test_str2)
原本只用1條字串只可以255個字元,但是拆開後Test_str1及Test_str2都可以<=255,這樣最多就有255*2個字元。
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 6 樓

發表發表於: 星期五 九月 05, 2014 11:07 am    文章主題: 引言回覆

255 印象中是指"單一命令敘述的長度".
例如 replace field01 with value01,field02 with value02,...........

雖然用 ";" 可以斷行,但是總長度還是限制在 255

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
syntech



註冊時間: 2003-05-16
文章: 4211
來自: Taipei,Taiwan

第 7 樓

發表發表於: 星期五 九月 05, 2014 11:13 am    文章主題: 引言回覆

上面說的是 vfp 9 help:
------
If the SQL statement you want to pass is quite long, check to see if it exceeds the maximum length of a string literal in Visual FoxPro, which is 255 characters. Longer strings will cause a "Command contains unrecognized phrase/keyword" error. However, you can pass long SQL statements if you break them up into several concatenated literals. For example:
------

但vfp 的限制:
Maximum # of characters per character string or memory variable.
16,777,184

Maximum # of characters per command line.
8,192

Maximum length of a string literal.
255


放在 sqlexec 裡面的是 字串變數,所以上限應該是 "16,777,184".
如果寫成以";"斷行的一條sqlexec命令,上限是"8,192"
但如果是 " select ....... from ....... order ......" 這樣一整句叫"string literal" ---- 字串常數,
上限是 255

二樓的說法,也就是 vfp9 的help 範例,上限是 8192

如果是
代碼:

csql =csql01+.......csql99

=sqlexec(X,csql,)

這種做法,就屬字串變數的作法,上限"16,777,184"


原來6樓是錯的,我一直用255當成上限.


-----
沒查不知道,查了嚇一跳. Laughing Laughing Laughing

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
goodnight



註冊時間: 2008-10-13
文章: 472
來自: 台南市

第 8 樓

發表發表於: 星期日 九月 21, 2014 10:55 am    文章主題: 引言回覆

小弟不才, 印象中, 字串是 255個字元
但 sql 語法應該可以大於 255, 也就是說, 字串變數的填入, 只能 255個字, 但可以字串+字串的方式來工作
如果有錯, 請指正

我在寫 sql 語法使, 光是 select xxx <-- 有時就超過 255了, 所以都用個別字串再合併一起處理

syntech 大大的解說比較詳細

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
whh



註冊時間: 2010-04-16
文章: 166


第 9 樓

發表發表於: 星期三 九月 24, 2014 9:53 am    文章主題: 引言回覆

myc77 寫到:
感謝各位解惑,就如同2樓大大所言,我目前是用這的方法,就是把字串拆成數個,然後再加起來,例如
Test_str1="update table set fields_1=?var1,fields_2=?var2,..."
Test_str2=",fields_20=?var20 where ...."
=sqlexec(ConnectionHandle,Test_str1+Test_str2)
原本只用1條字串只可以255個字元,但是拆開後Test_str1及Test_str2都可以<=255,這樣最多就有255*2個字元。


為什麼不直接用同一個字串變數就好了ar ?
EX:
Test_str1="Update myTable "
Test_str1= Test_str1+ "Set A='" + C_A + "'"
Test_str1= Test_str1 + Where id = '" + C_ID + "'"

&& _CLIPTEXT = Test_str1
_CLIPTEXT 真的世界無敵好用,不知道哪個天才發明的 Smile

話說單字串有字數上限
後我一直很疑惑,微軟為什麼要這樣設計.....
不讓變數字串可以直接無上限,搞得要用相加的方式,讓他幾乎無上限=.=
回頂端
檢視會員個人資料 發送私人訊息
goodnight



註冊時間: 2008-10-13
文章: 472
來自: 台南市

第 10 樓

發表發表於: 星期日 十月 05, 2014 8:48 pm    文章主題: 引言回覆

_CLIPTEXT 是不是代表剪貼簿內容的意思??

這就是 windows 下寫程式的好處, 有很多意想不到的資源可用

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
whh



註冊時間: 2010-04-16
文章: 166


第 11 樓

發表發表於: 星期二 十月 07, 2014 3:22 pm    文章主題: 引言回覆

goodnight 寫到:
_CLIPTEXT 是不是代表剪貼簿內容的意思??

這就是 windows 下寫程式的好處, 有很多意想不到的資源可用


沒錯!!

_CLIPTEXT = 其實就是幫你做 Ctrl +C 的意思

超級超級好用
回頂端
檢視會員個人資料 發送私人訊息
CPS0204



註冊時間: 2014-08-24
文章: 441


第 12 樓

發表發表於: 星期二 一月 07, 2020 6:55 pm    文章主題: 引言回覆

經多年實驗,SQLEXEC(CON,STR1)
STR1可能為 TXT1+TXT2+TXT3+TXT4....

最長為900多字元,超過就寫兩條SQLEXEC
回頂端
檢視會員個人資料 發送私人訊息
CCB2000



註冊時間: 2009-03-25
文章: 95


第 13 樓

發表發表於: 星期一 一月 13, 2020 4:05 pm    文章主題: 引言回覆

VFP 9: SQLEXEC()可以運行 8K SQL命令,
VFP Advanced: SQLEXEC()可以運行 16K SQL命令,
請參攷:
http://baiyujia.com/vfpdocuments/f_vfp9fix95.asp

_________________
VFP C++編譯軟件 (VFP C++ Compiler): http://www.baiyujia.com/vfpcompiler
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作