用query对数据库作了个简单查询语句,运行后系统报错如下project project1.exe raised exception class EListError with message 'List index out of bonds(0)'.请问是何原因,非常谢谢

解决方案 »

  1.   

    select 合同编号,客户名称,合同金额,销售员,签订日期 from 合同档案.db
    where 销售员=:name and 签订日期>:date1 and 签订日期<:date2:name,:date1, :date2的赋值在外面用窗体进行
      

  2.   

    query中与数据库中表的结构不一直
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls, Buttons, BaseGrid,
      AdvGrid, DBAdvGrd,math, ComCtrls, VrLabel, VrControls, VrDeskTop,
      AdvCombo, Lucombo, dblucomb, TodoList, DBTodoList, AdvEdit, DBAdvEd;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        Query1: TQuery;
        VrDeskTop1: TVrDeskTop;
        VrLabel1: TVrLabel;
        DateTimePicker1: TDateTimePicker;
        DateTimePicker2: TDateTimePicker;
        DBGrid1: TDBGrid;
        VrLabel2: TVrLabel;
        VrLabel3: TVrLabel;
        VrLabel4: TVrLabel;
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin  //DBGrid1.Enabled:=true;
      query1.Close;
      query1.sql.Clear;
      query1.Params[0].AsString:=trim(edit1.Text);
      query1.Params[1].AsDate:=DateTimePicker1.Date;
      query1.Params[2].AsDate:=DateTimePicker2.Date;
      query1.Open;
    end;end.
      

  4.   

    是不是你关联的DBGrid中的Columms字段数量小于选出的字段数?
      

  5.   

    你可能在随后的对query1各字段取值的代码有问题
      

  6.   

    在DBGrid中的Columms里我什么也没选字段
      

  7.   

    把Grid删除,重新放一个,再关联
      

  8.   

    去掉query1.sql.Clear;一行,我想你把SQL语句写在控件的SQLSTRING中了
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin  //DBGrid1.Enabled:=true;
      StrSql:='select 合同编号,客户名称,合同金额,销售员,签订日期 from 合同档案.db
    where 销售员=:name and 签订日期>:date1 and 签订日期<:date2';  query1.Close;
      query1.sql.Clear;
      query1.Params[0].AsString:=trim(edit1.Text);//query1.ParamByName('name').Asstring is useful
      query1.Params[1].AsDate:=DateTimePicker1.Date;
      query1.Params[2].AsDate:=DateTimePicker2.Date;
      query1.Sql.Add(StrSql);
      query1.Open;
    end;
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin  //DBGrid1.Enabled:=true;
      StrSql:='select 合同编号,客户名称,合同金额,销售员,签订日期 from 合同档案.db
    where 销售员=:name and 签订日期>:date1 and 签订日期<:date2';  query1.Close;
      query1.sql.Clear;
      query1.Sql.Add(StrSql);
      query1.Params[0].AsString:=trim(edit1.Text);//query1.ParamByName('name').Asstring is useful
      query1.Params[1].AsDate:=DateTimePicker1.Date;
      query1.Params[2].AsDate:=DateTimePicker2.Date;  
      query1.Open;
    end;
      

  11.   

    我觉得你写的程序比较难懂,为什么不用清楚的表示方法那!query1.ParamByName('name').AsString:=Trim(edit1.Text);不过你的问题好像已经解决了
      

  12.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin  //DBGrid1.Enabled:=true;
      StrSql:='select 合同编号,客户名称,合同金额,销售员,签订日期 from 合同档案.db
    where 销售员=:name and 签订日期>:date1 and 签订日期<:date2';  query1.Close;
      query1.sql.Clear;
      query1.Sql.Add(StrSql);
      query1.Params[0].AsString:=trim(edit1.Text);
      query1.Params[1].AsDate:=DateTimePicker1.Date;
      query1.Params[2].AsDate:=DateTimePicker2.Date;  
      query1.Open;
    end;
      

  13.   

    肯定是你那里的连接,错误导致如此查查你的query的设置