關於List index out of bounds(0)的問題

來源:互聯網
上載者:User
關於List index out of bounds(0)的問題 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223203333140.html
運行輸入資料按確定按鈕後,彈出對話方塊說List   index   out   of   bounds(0),為什麼會有這樣的錯誤呢。代碼如下:  
  unit   Borrow;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   DB,   DBTables,   Mask,   DBCtrls,   StdCtrls;  
   
  type  
      TBorrowForm   =   class(TForm)  
          GroupBox1:   TGroupBox;  
          GroupBox2:   TGroupBox;  
          GroupBox3:   TGroupBox;  
          Label1:   TLabel;  
          Edit1:   TEdit;  
          Label2:   TLabel;  
          Edit2:   TEdit;  
          Button1:   TButton;  
          DBEdit1:   TDBEdit;  
          Query1:   TQuery;  
          Query2:   TQuery;  
          Query3:   TQuery;  
          Query4:   TQuery;  
          DataSource1:   TDataSource;  
          DataSource2:   TDataSource;  
          DataSource3:   TDataSource;  
          Label3:   TLabel;  
          Label4:   TLabel;  
          DBEdit2:   TDBEdit;  
          Label5:   TLabel;  
          DBEdit3:   TDBEdit;  
          Label6:   TLabel;  
          DBEdit4:   TDBEdit;  
          DBEdit5:   TDBEdit;  
          Label7:   TLabel;  
          Label8:   TLabel;  
          Label9:   TLabel;  
          Label10:   TLabel;  
          DBEdit6:   TDBEdit;  
          DBEdit7:   TDBEdit;  
          DBEdit8:   TDBEdit;  
          Button2:   TButton;  
          Button3:   TButton;  
          Button4:   TButton;  
          Button5:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
          procedure   Button4Click(Sender:   TObject);  
          procedure   Button5Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      BorrowForm:   TBorrowForm;  
   
  implementation  
   
  uses   Query,   Return;  
   
  {$R   *.dfm}  
   
  procedure   TBorrowForm.Button1Click(Sender:   TObject);  
  begin  
    if   Edit1.Text=''then  
          ShowMessage('請輸入書號和讀者編號!')  
      else  
          if   Edit2.Text=''   then  
                else  
                    begin  
                      Query1.Params[0].AsString:=Edit1.Text;  
                      Query1.ExecSQL;  
                      Query1.Active:=true;  
                      Query2.Params[0].AsString:=Edit2.Text;  
                      Query2.ExecSQL;  
                      Query2.Active:=true;  
                      Query3.Params[0].AsString:=Edit2.Text;  
                      Query3.ExecSQL;  
                      Query3.Active:=true;  
                    end;  
  end;  
   
  procedure   TBorrowForm.Button2Click(Sender:   TObject);  
  begin  
            if   DBEdit4.Text=''   then  
                    showmessage('該書已借出,請選擇其他!')  
            else  
                    begin  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('INSERT   INTO   借閱   VALUES(Edit1.Text,Edit2.Text,SYSDATE)');  
                        Query4.ExecSQL;  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('UPDATE   圖書   SET   借出否:=True   WHERE   書號=Edit1.Text');  
                        Query4.ExecSQL;  
                        Query4.Close;  
                    end;  
  end;  
   
  procedure   TBorrowForm.Button3Click(Sender:   TObject);  
  begin  
        QueryForm.show;  
  end;  
   
  procedure   TBorrowForm.Button4Click(Sender:   TObject);  
  begin  
        ReturnForm.show;  
  end;  
   
  procedure   TBorrowForm.Button5Click(Sender:   TObject);  
  begin  
        BorrowForm.Close;  
  end;  
   
  end.

天,你的命名太那個了吧...  
  不知道哪個是你的確定按鈕  
  這個錯誤是列表越界的通用提示,引用了一個空列表的值  
  再仔細找找原因

本人是菜鳥,請問"列表越界“是怎麼回事啊?

大俠門,幫我解決一下問題吧,感激不盡啊。

F8斷點調試吧

Query1.Params[0].AsString:=Edit1.Text;  
  Query2.Params[0].AsString:=Edit2.Text;  
  Query3.Params[0].AsString:=Edit2.Text;  
  ---------------------------------------  
   
  問題出在你的Query1~Query3的參數中。   你確定每個QUERY的SQL中都帶有參數嗎?可以肯定的是至少有一個沒有帶參數。請檢查。把參數加上後一切就會大大的OK的。

還是老馮厲害,和我所見略同,呵呵。

老馮說得對!   先檢查一下SQL中是否有參數,  
  另外你的代碼有錯誤:  
  Query4.SQL.Add('INSERT   INTO   借閱   VALUES(Edit1.Text,Edit2.Text,SYSDATE)');  
                        Query4.ExecSQL;  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('UPDATE   圖書   SET   借出否:=True   WHERE   書號=Edit1.Text');  
                        Query4.ExecSQL;  
                        Query4.Close;  
  Edit的值不能這樣引用到query4中,例如:Query4.SQL.Add('INSERT   INTO   借閱   VALUES('''+Edit1.Text+''','+'''+Edit2.Text+''',SYSDATE)');  
 

代碼中錯誤太多,像樓上各位說的。  
  還有ExecSql和Active   :=   True不要亂用,也不要混用。

我在Query1~Query3都有參數了,分別是:  
  query1:  
  select   *   from   圖書   where   書號='+''''+Edit1.Text+'''  
  Query2:  
  select   *   from   讀者   where   編號='+''''+Edit1.Text+'''  
  Query3:  
  select   str(count(*))+'本'   from   借閱   where   讀者編號='+''''+Edit1.Text+'''  
  請問老馮,我的這些參數對嗎?  
  我的上面給的程式是實現圖書館管理系統中的借書功能。

錯了Query1~Query3的參數應該是:  
  query1:  
  select   *   from   圖書   where   書號='+''''+Edit1.Text+'''  
  Query2:  
  select   *   from   讀者   where   編號='+''''+Edit2.Text+'''  
  Query3:  
  select   str(count(*))+'本'   from   借閱   where   讀者編號='+''''+Edit2.Text+'''  
  請問,我的這些參數對嗎?

呵呵,你這樣是沒有參數啊。

難怪越界呢。一個參數也沒有。  
  還有SQL語句裡是沒有:=的。  
  Query4.SQL.Add('UPDATE   圖書   SET   借出否:=True   WHERE   書號=Edit1.Text');

那請問怎麼設定參數呢?各位高手。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.