全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5537
推到 Plurk!
推到 Facebook!

BDE 連接 2008 SQL 因SQL字串太長,發生錯誤

缺席
garykao
一般會員


發表:2
回覆:7
積分:1
註冊:2015-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-01-19 14:18:39 IP:60.248.xxx.xxx 訂閱
各位大大
我公司有一支運用程式 BDE 5.2 SQL 2000 因為沒有程式碼,也找不到廠商,現在公司server 要升級成 2012 SQL 2008,
安裝ntwdblib.dll 後已經可connect to SQL 2008,但發生一個錯誤

從 sql monitor 中看 有一串 SQL 很長,最後是
WHERE (User_id = :1) ORDER BY
ORDER BY 後面的字串不見了,所以發生錯誤,但將BDE 指回原 SQL 2000 那台資料庫,又正常
查GOOGLE很久都查不到原因,不知道有哪位大大有碰過同樣問題,可否分享解決方式,感謝

------
garykao
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-01-19 14:33:55 IP:49.219.xxx.xxx 訂閱
請貼出完整sql句子(需了解語法與字串長度)。並貼出錯誤訊息。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
garykao
一般會員


發表:2
回覆:7
積分:1
註冊:2015-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-01-19 15:12:54 IP:60.248.xxx.xxx 訂閱
謝謝大大:
與法
SELECT CASE_NO ,CO_NO ,CASE_DATE ,CASE_DI ,STAT_NO ,PID ,INCOMENO ,PNAME ,MPERIOD ,GET_MONEY ,PUT_MONEY ,SUM_MONEY
,OWE_MONEY ,GET_YEAR ,GET_DATE ,DUE_DATE ,OBJFLAG ,PUT_OBJ ,TRI_NAME ,FALSE1 ,FALSE2 ,FALSE3 ,MAILCODE ,PADDR
,TEL ,SUM1 ,SUM2 ,REM ,MAILCODE1 ,PADDR1 ,TEL1 ,COMPNM ,CMAILCODE ,COMPaddr ,COMPTEL ,BIRTH ,ACCTNO ,ITEMS ,BORNO
,FSTAMT ,FSTDATE ,LSTDATE ,CAL_DATE ,CASENO1 ,CASENO2 ,CREA_DATE ,RETAMT1 ,RETAMT2 ,RETAMT3 ,FDATE ,BATNUM ,
NOPROMI ,STAGES ,PMONEY ,SPECSTR ,AMONEY ,FMONEY ,PTMONEY ,NEXTDATE ,PDATE ,CASE_MONEY ,OAMONEY ,OFDATE ,
OFMONEY ,OPENCASE ,TELING ,OUTM ,RETDATE ,RETREM ,REM1 ,NEXTSON ,SORTABC ,TEL01 ,TEL02 ,TEL11 ,TEL12 ,STAT_NO1
,KYAMTF ,PCELL ,CUS1 ,CUS2 ,CUS3 ,NOTE1 ,NOTE2 ,NOTE3 ,NOTE4 ,PROAMT ,SPEC1 ,SPEC2 ,SPEC3 ,SPEC4 ,PAY1 ,PAY2 ,PAY3
,PAY4 ,PAY5 ,PAY6 ,PAY7 ,PAY8 ,NOTE5 ,NOTE6 ,NOTE7 ,NOTE8 ,DEF_RATE ,PAPER_CK ,CALM_DATE ,MKIND ,PMAN ,AO ,CARDKD
,PRJNO ,SACCTNO ,RTDATE ,ENDDATE ,LOWMONEY ,SONMONEY ,CHFG ,CHDATE ,DATADATE ,OVER_DATE ,PROMONEY ,
DFMONEY ,RATEMONEY ,JOBKIND ,CASEKIND ,TRANSDATE ,BASEMONEY ,INTEREST ,SCH_INCOMENO ,TOTALOWE ,
BALANCE ,IssueDate ,OfDateMoney ,PenaltySDay ,OVERDUEDATE ,ClosingDate ,NormalDate ,CardState ,FreezTimes ,AssignDate ,
ReturnDate ,OAName ,CompenDate ,CompenBank ,CompenAcctno ,IsStop ,SMSCall ,SendAcct ,STAGES1 ,ComiRate ,CONSUMAMT
,ADVANCEAMT ,OVERCONSUME ,ATTRATE ,ATTINTEREST ,ATTDFMONEY ,PRESSRATE ,PRESSDFMONEY ,HalfCHDATE ,
CHOWEMONEY ,CHRATE ,ExtendMONEY ,Judgment ,SONMONEY1 ,ApplyNo ,CustomKind ,CanUseBalance ,IND ,CustGrade ,
IsMTSRemark ,DelayNum ,TotalMoney ,AccuMoney ,CurrDUE ,PastDUE ,DELQ30DAYS ,DELQ60DAYS ,DELQ90DAYS ,DELQ120DAYS
,DELQ150DAYS ,DELQ180DAYS ,DELQ210DAYS ,NewConsume ,Installment ,StartMoney ,LstRange ,YTDIntrBilled ,LSTYTDIntrBilled
,CutSalary ,COUC ,CredRight ,BLKCode ,ManageNo ,DelayDays ,EntrustBKDate ,M1Interest ,M1Fees ,M2Interest ,M2Fees ,M3Interest
,M3Fees ,CashCardNo ,MonName ,AssignNO ,PayDueDate ,caseREM ,BukeyNo ,AssignBukey ,PDORateMoney ,LOSTFEE ,CASHFEE
,CARDFEE ,STARTMONEY1 ,STARTMONEY2 ,RateMoney1 ,RateMoney2 ,AssignWhys ,DoDataDate ,OtherMoney ,GDate ,validnum ,
LOWMONEY4 ,DEBTRANS ,DEBMark ,SCardDate ,SCardMark ,SCardOverDate ,ExecKind ,NATIONALNM ,EDULEVEL ,NATKIND ,
PASSPORTNO ,MARITAL ,YINCOME ,SEX ,EMAIL ,VOCAYNO ,VISADATE ,CREADATE ,CONTACTMONEY ,VIRACCTNO ,M66ACCTNO
,WHACCTNO ,REACCTNO ,TPAYDUE ,PAYDUE ,THIRDRATE ,DEF_GATDATE ,EXECUTIVE ,COMMISSIONER ,SIGNERNO ,
CHECKHANDLE ,STAGEMONEY ,STAGESNUM ,BSTAGESNUM ,LASTBDATE ,NextBDATE ,DEBDATE ,CDEBDATE ,CSTAGESDATE ,
SACCTNOAMT ,AgreeKind ,RetLoanDate ,FirstPayDate ,DoorNUM
FROM GauUSR WHERE (nUserID = :1) ORDER BY

錯誤訊息
SQL Error: MSSQL - 接近 'BY' 之處的語法不正確。
===================引 用 aftcast 文 章===================
請貼出完整sql句子(需了解語法與字串長度)。並貼出錯誤訊息。
------
garykao
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-01-20 15:23:19 IP:36.229.xxx.xxx 訂閱
根據mssql的長度限制,你這個 2k 多的query應該不是問題,又依 bde 的先天限制,原則上也是至少 4k。
但bde前提是 在它的設定方式,比如 sharememory 的部份要設成大於 4096 (預設是2k),你這方面的設定都比對過了嗎?

此外,你給我的錯誤訊息是似乎是 sql 所發出來的,針對 你的應用程式方面,也是這樣的錯誤訊息? 沒有其他像是 out of memory之類的?

目前我能想的,就只有 bde 上的設定問題。先確認一下吧。(或是比照過去的bde設定,照抄過來)
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-01-20 15:26:34 IP:36.229.xxx.xxx 訂閱
似乎錯了,剛剛一分鐘靈光x現…怎麼好似問題在

(nUserID = :1)

而非長度?

你先確認 bde設定,若設定ok,那就往上面的方向想… (我應該近20年沒用bde,sorry,與它不算熟)
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-01-20 16:04:06 IP:36.229.xxx.xxx 訂閱
求救一下,我最近在忙手機上的案子,這個問題我恐怕要花一些時間來了解。因為我太久沒用bde,而且不太了解樓主說的 sql monitor 是指元件上的? 還是…

我用ms sql的時候,都是用 sql profile (ms sql上附的程式來查問題),不知樓主的 sql monitor是不是在這裡看到的字串? 如果是tsqlmonitor 元件? 我是沒用過。於是會有一個問題:

在那裡看到 abc = :1 這樣的法語時,算是正確的嗎?

照 tsql (mssql的語法,應該是 abc = ? ) 用問號。但我不清楚delphi最後是不是會轉 = :xxx 變成 ? (我記得會…)

至於是否因為字串太長? 查了 bde 與 sql server 的限制,基本上都有 4k 以上的能力,所以理當不會是無法接受 2k多。

換手吧… 誰目前一直在用資料庫的,或許比較快速可以幫忙。我需要建環境,還需要寫例子,還需要稍回憶… 時間不夠去幫忙。

術業有專攻,聞到有先後,若要求快,就要找目前專精這個的來幫了… 各位先進好友,看到此帖,有時間的話,還請忙他一下吧。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-01-20 16:48:31 IP:59.120.xxx.xxx 未訂閱
正確的 SQL 最後的 Order by 會接什麼內容?

可能用到 2008 不支援的老舊語法?

SQL Monitor 是 SQL Server 提供的,還是 Delphi 提供的?可以的話,也請提供它的畫面。


以上

===================引 用 garykao 文 章===================
謝謝大大:
與法
SELECT CASE_NO ,CO_NO ,CASE_DATE ,CASE_DI ,STAT_NO ,PID ,INCOMENO ,PNAME ,MPERIOD ,GET_MONEY ,PUT_MONEY ,SUM_MONEY
,OWE_MONEY ,GET_YEAR ,GET_DATE ,DUE_DATE ,OBJFLAG ,PUT_OBJ ,TRI_NAME ,FALSE1 ,FALSE2 ,FALSE3 ,MAILCODE ,PADDR
,TEL ,SUM1 ,SUM2 ,REM ,MAILCODE1 ,PADDR1 ,TEL1 ,COMPNM ,CMAILCODE ,COMPaddr ,COMPTEL ,BIRTH ,ACCTNO ,ITEMS ,BORNO
,FSTAMT ,FSTDATE ,LSTDATE ,CAL_DATE ,CASENO1 ,CASENO2 ,CREA_DATE ,RETAMT1 ,RETAMT2 ,RETAMT3 ,FDATE ,BATNUM ,
NOPROMI ,STAGES ,PMONEY ,SPECSTR ,AMONEY ,FMONEY ,PTMONEY ,NEXTDATE ,PDATE ,CASE_MONEY ,OAMONEY ,OFDATE ,
OFMONEY ,OPENCASE ,TELING ,OUTM ,RETDATE ,RETREM ,REM1 ,NEXTSON ,SORTABC ,TEL01 ,TEL02 ,TEL11 ,TEL12 ,STAT_NO1
,KYAMTF ,PCELL ,CUS1 ,CUS2 ,CUS3 ,NOTE1 ,NOTE2 ,NOTE3 ,NOTE4 ,PROAMT ,SPEC1 ,SPEC2 ,SPEC3 ,SPEC4 ,PAY1 ,PAY2 ,PAY3
,PAY4 ,PAY5 ,PAY6 ,PAY7 ,PAY8 ,NOTE5 ,NOTE6 ,NOTE7 ,NOTE8 ,DEF_RATE ,PAPER_CK ,CALM_DATE ,MKIND ,PMAN ,AO ,CARDKD
,PRJNO ,SACCTNO ,RTDATE ,ENDDATE ,LOWMONEY ,SONMONEY ,CHFG ,CHDATE ,DATADATE ,OVER_DATE ,PROMONEY ,
DFMONEY ,RATEMONEY ,JOBKIND ,CASEKIND ,TRANSDATE ,BASEMONEY ,INTEREST ,SCH_INCOMENO ,TOTALOWE ,
BALANCE ,IssueDate ,OfDateMoney ,PenaltySDay ,OVERDUEDATE ,ClosingDate ,NormalDate ,CardState ,FreezTimes ,AssignDate ,
ReturnDate ,OAName ,CompenDate ,CompenBank ,CompenAcctno ,IsStop ,SMSCall ,SendAcct ,STAGES1 ,ComiRate ,CONSUMAMT
,ADVANCEAMT ,OVERCONSUME ,ATTRATE ,ATTINTEREST ,ATTDFMONEY ,PRESSRATE ,PRESSDFMONEY ,HalfCHDATE ,
CHOWEMONEY ,CHRATE ,ExtendMONEY ,Judgment ,SONMONEY1 ,ApplyNo ,CustomKind ,CanUseBalance ,IND ,CustGrade ,
IsMTSRemark ,DelayNum ,TotalMoney ,AccuMoney ,CurrDUE ,PastDUE ,DELQ30DAYS ,DELQ60DAYS ,DELQ90DAYS ,DELQ120DAYS
,DELQ150DAYS ,DELQ180DAYS ,DELQ210DAYS ,NewConsume ,Installment ,StartMoney ,LstRange ,YTDIntrBilled ,LSTYTDIntrBilled
,CutSalary ,COUC ,CredRight ,BLKCode ,ManageNo ,DelayDays ,EntrustBKDate ,M1Interest ,M1Fees ,M2Interest ,M2Fees ,M3Interest
,M3Fees ,CashCardNo ,MonName ,AssignNO ,PayDueDate ,caseREM ,BukeyNo ,AssignBukey ,PDORateMoney ,LOSTFEE ,CASHFEE
,CARDFEE ,STARTMONEY1 ,STARTMONEY2 ,RateMoney1 ,RateMoney2 ,AssignWhys ,DoDataDate ,OtherMoney ,GDate ,validnum ,
LOWMONEY4 ,DEBTRANS ,DEBMark ,SCardDate ,SCardMark ,SCardOverDate ,ExecKind ,NATIONALNM ,EDULEVEL ,NATKIND ,
PASSPORTNO ,MARITAL ,YINCOME ,SEX ,EMAIL ,VOCAYNO ,VISADATE ,CREADATE ,CONTACTMONEY ,VIRACCTNO ,M66ACCTNO
,WHACCTNO ,REACCTNO ,TPAYDUE ,PAYDUE ,THIRDRATE ,DEF_GATDATE ,EXECUTIVE ,COMMISSIONER ,SIGNERNO ,
CHECKHANDLE ,STAGEMONEY ,STAGESNUM ,BSTAGESNUM ,LASTBDATE ,NextBDATE ,DEBDATE ,CDEBDATE ,CSTAGESDATE ,
SACCTNOAMT ,AgreeKind ,RetLoanDate ,FirstPayDate ,DoorNUM
FROM GauUSR WHERE (nUserID = :1) ORDER BY

錯誤訊息
SQL Error: MSSQL - 接近 'BY' 之處的語法不正確。
===================引 用 aftcast 文 章===================
‚ 請貼出完整sql句子(需了解語法與字串長度)。並貼出錯誤訊息。
garykao
一般會員


發表:2
回覆:7
積分:1
註冊:2015-01-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-01-20 16:49:45 IP:60.248.xxx.xxx 訂閱
大大:
先謝謝你,我使用的是Delphi5,他有一個工具叫SQL Monitor 可監看程式中所執行的每一段SQL指令,我想他的程式應該沒錯,BDE的參數也如您說的沒錯,我的舊環境SQL 2000 win 2003 RUN 是OK的,還有一件奇妙的事,如果我將 BDE 中的 MAX ROWS 從 -1 改成 500 他就正常了,我實在想不出來,因為沒有程式碼,所以測不出錯誤原因,請個位大大幫幫忙, 謝謝
------
garykao
編輯記錄
garykao 重新編輯於 2015-01-20 16:51:18, 註解 無‧
garykao 重新編輯於 2015-01-20 16:53:15, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-01-20 16:55:38 IP:59.120.xxx.xxx 未訂閱
所以現在在 2008 下是正常的?

===================引 用 garykao 文 章===================
大大:
先謝謝你,我使用的是Delphi5,他有一個工具叫SQL Monitor 可監看程式中所執行的每一段SQL指令,我想他的程式應該沒錯,BDE的參數也如您說的沒錯,我的舊環境SQL 2000 win 2003 RUN 是OK的,還有一件奇妙的事,如果我將 BDE 中的 MAX ROWS 從 -1 改成 500 他就正常了,我實在想不出來,因為沒有程式碼,所以測不出錯誤原因,請個位大大幫幫忙, 謝謝
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-01-21 09:01:38 IP:210.61.xxx.xxx 未訂閱
SQL Monitor(以Delphi7為例)

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-01-21 09:34:08 IP:59.120.xxx.xxx 未訂閱
原來它在這裡啊!(大悟)

謝謝指導!

===================引 用 老大仔 文 章===================
SQL Monitor(以Delphi7為例)

garykao
一般會員


發表:2
回覆:7
積分:1
註冊:2015-01-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-01-21 13:08:17 IP:60.248.xxx.xxx 訂閱
大大好
sql 2000 環境是正常的,sql 2008 是不正常的,不過在 SQL 2008 環境下 MAX Rows 設為 500 又可正常使用,唯一次只能收詢500筆資料
===================引 用 GrandRURU 文 章===================
所以現在在 2008 下是正常的?

===================引 用 garykao 文 章===================
大大:
先謝謝你,我使用的是Delphi5,他有一個工具叫SQL Monitor 可監看程式中所執行的每一段SQL指令,我想他的程式應該沒錯,BDE的參數也如您說的沒錯,我的舊環境SQL 2000 win 2003 RUN 是OK的,還有一件奇妙的事,如果我將 BDE 中的 MAX ROWS 從 -1 改成 500 他就正常了,我實在想不出來,因為沒有程式碼,所以測不出錯誤原因,請個位大大幫幫忙, 謝謝
------
garykao
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-01-21 14:37:44 IP:59.120.xxx.xxx 未訂閱
BDE 應該只支援的 TOP 語法,和 ORDER BY 還差得很遠

不知道正常的 SQL 後面多了什麼東西?


===================引 用 garykao 文 章===================
大大好
sql 2000 環境是正常的,sql 2008 是不正常的,不過在 SQL 2008 環境下 MAX Rows 設為 500 又可正常使用,唯一次只能收詢500筆資料
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#14 引用回覆 回覆 發表時間:2015-01-21 15:05:51 IP:202.39.xxx.xxx 訂閱
BDE 與 Oracle 8i、9i、10g、11g 配合未出現異常,
WHERE ColumnName = :Var 及 ORDER BY 也都正常。

目前發現的 BUG,只有當傳遞 VARCHAR2 給 Oracle 的 PACKAGE 時,
若字串長度恰為 255 會發生 BDE Exception。

又,為避免 SQL 的 SELECT 指令太長,通常我會先 CREATE VIEW,
然後用 SELECT * FROM ViewName WHERE .... 方式,
可減輕 BDE 負擔。

編輯記錄
herbert2 重新編輯於 2015-01-21 15:10:25, 註解 無‧
系統時間:2024-04-19 23:04:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!