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

List Index out of bound(1)的錯誤訊息

尚未結案
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-13 14:43:50 IP:211.75.xxx.xxx 未訂閱
請問一下各位大大 我利用adoquery中的parameter來導入參數 程式寫法:
for I:=1 to 7 do
 ADOQuery2.Parameters[i-1].value:=TEdit(FindComponent('Staff' intTostr(i))).text;
可是卻會出現List Index out of bound(1)的錯誤訊息 請問這是為什麼,謝謝?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-13 15:01:29 IP:218.16.xxx.xxx 未訂閱
1. 你肯定你有7 個 parameters 嗎 ?    2. 試試改成 :
for I:=1 to 7 do
  ADOQuery2.Parameters.items[i-1].value := TEdit(FindComponent('Staff' intTostr(i))).text;
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-13 15:30:00 IP:211.75.xxx.xxx 未訂閱
嗯`~~parmeters是共有16個 只是~出錯是在第二個 我也不懂為什麼 datatype設的定ftstring parameters[0..7]都是ftstring 若不利用迴路寫 ADOQuery2.Parameters[0].value:=Staff1.text; ADOQuery2.Parameters[1].value:=Staff2.text; 也是出錯在第二行 所以~~~~請問~~~~該如何解決 謝謝~~
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-13 15:46:45 IP:218.16.xxx.xxx 未訂閱
2 的方法你試了沒有,由為那個寫法才是正途 若還是不成你最好將設定 sql 的一段也貼出來才能看到問題出處
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-13 16:15:32 IP:211.75.xxx.xxx 未訂閱
有~~第2個方法也試過了~ 也是出現同樣的錯誤訊息 我的sql語法是 const SQL1:String='Insert Into employe1(EMP_NO,EMP_Name,EMP_ID,EMP_TADR,EMP_AADR,EMP_POSI,EMP_SCHOOL,EMP_BIR,EMP_TEL1 ,EMP_TEL2,EMP_INDate,EMP_OUTDate,EMP_SEX,EMP_MARRY,EMP_BLOCK,EMP_DEPA)'; VAL1:String=' Values(:Staff1,:Staff2,:Staff3,:Staff4,:Staff5,:Staff6,:Staff7,:Staff8,:Staff9,:Staff10,:Staff11,:Staff12,:Staff13,:Staff14,:Staff15,:Staff16)'; ADOQuery2.SQL.ADD(SQL1 VAL1) //有離職日期 ADOQuery2.ExecSQL; ADOQuery2.Close; 除了第一個parameter參數傳入是正確的之外 其餘的不論是均會出現錯誤訊息 設定都是一樣的~ 但是就是不懂為什麼 麻煩一下~~謝謝~~
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-13 16:27:25 IP:211.76.xxx.xxx 未訂閱
試用參數名稱做做看    var v:variant;
    i:integer;
begin
  v:=VarArrayOf(['Staff1','Staff2','Staff3','Staff4','Staff5','Staff6',
                 'Staff7','Staff8','Staff9','Staff10','Staff11',
                 'Staff12','Staff13','Staff14','Staff15','Staff16']);
  for i:=0 to VarArrayHighBound(v,1) do
      ADOQuery2.Parameters.ParamByName(v[i]).value:=
            TEdit(FindComponent('Staff' intTostr(i 1))).text;
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-13 16:46:02 IP:202.39.xxx.xxx 未訂閱
begin
  ADOQuery2.SQL.ADD(SQL1+VAL1);
  // 加這一句試試
  ADOQuery2.Parameters.ParseSQL(ADOQuery2.Text, True);
  ADOQuery2.ExecSQL;
end;
--- 每個人都是一本書
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-13 17:00:58 IP:211.75.xxx.xxx 未訂閱
嗯~~~~怪現象~~ 它居然出現ADOQuery2:Parameter 'Staff2' not found 可素~~~~我~~我真的有建立了16個丫~~
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-13 17:05:06 IP:211.75.xxx.xxx 未訂閱
to hagar大大 嗯~~~這招~還素不行 謝謝幫忙
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-13 17:28:40 IP:218.16.xxx.xxx 未訂閱
你試試不要寫在 Const 罷 像一般的直接寫 : ADOQuery2.SQL.Text := 'Insert Into employe1(EMP_NO,EMP_Name,EMP_ID,EMP_TADR,EMP_AADR,EMP_POSI,EMP_SCHOOL,EMP_BIR,EMP_TEL1 ,EMP_TEL2,EMP_INDate,EMP_OUTDate,EMP_SEX,EMP_MARRY,EMP_BLOCK,EMP_DEPA)' ' Values(:Staff1,:Staff2,:Staff3,:Staff4,:Staff5,:Staff6,:Staff7,:Staff8,:Staff9,:Staff10,:Staff11,:Staff12,:Staff13,:Staff14,:Staff15,:Staff16)' 我懷疑是 ShortString 255 位元的限置把你 Constance Staff1 之後切斷了所致 你也可試試用回你的版本試試 ADOQuery2.SQL.ADD(SQL1 VAL1) //有離職日期 [red]ShowMessage(ADOQuery2.SQL.Text); 看看是不是切斷了 發表人 - Justmade 於 2003/06/13 17:33:28
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-13 17:38:29 IP:211.75.xxx.xxx 未訂閱
有~~已有看過~~ 謝謝大大提醒 嗯~~看過SQL的語法上應該是沒有錯誤 就是錯在參數傳入的部份~
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-13 17:42:42 IP:202.39.xxx.xxx 未訂閱
小弟的想法, 都沒辦法的話就試一試 就是把每個 Parameter 之間都空一個空格.    還有一個: ADOQuery2.Parameters.Refresh;    --- 每個人都是一本書 發表人 - hagar 於 2003/06/13 17:45:27
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-13 17:55:27 IP:211.75.xxx.xxx 未訂閱
謝謝HARGAR大大 但素~~這招還是不行 SQL語法…應該是OK的 因為是錯在 for I:=1 to 7 do ADOQuery2.Parameters.Items[i-1].value:=TEdit(FindComponent('Staff' intTostr(i))).text; 除了第一個參數能正確丟入外 其餘的都會出現List Index Out of Bound(?) 的錯誤訊息
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-13 18:04:28 IP:202.39.xxx.xxx 未訂閱
您直接在 Design Time 的時候 把那些 SQL 設定好, 再看 Parameters 屬性中 會不會出現所有的 Parameter?    --- 每個人都是一本書
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-16 09:09:47 IP:211.75.xxx.xxx 未訂閱
謝謝hargar大大的幫忙 若我將sql語法直接在design time的時候寫進去 參數的傳遞就不會有問題 但是…因為我有兩種狀況 所以才會採用在run time時才將sql語法寫入 所以~~有沒有其他方法可以達到一樣是動態的sql
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-16 09:25:16 IP:202.39.xxx.xxx 未訂閱
您可以貼出這部份完整的碼嗎?    --- 每個人都是一本書
kan0515
中階會員


發表:56
回覆:120
積分:50
註冊:2002-06-24

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-06-16 18:20:45 IP:211.75.xxx.xxx 未訂閱
謝謝hargar大大的幫忙 我找到我的錯誤了 我想是因為我在design time時只有將parameters設定 並無將sql寫入 所以造成錯誤的訊息~ 謝謝
系統時間:2024-07-03 12:02:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!