delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
关于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');

那请问怎么设置参数呢?各位高手。

posted on 2008-10-20 10:32 delphi2007 阅读(1427) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。