把一.dbf文件表导入到sqlserver表中
出现以下错误,请大虾指点
raised exception class Elisterror with message
"list index out of bounds(0)"
3ks
procedure TForm1.Button1Click(Sender: TObject);
var
  hssd,hxsd,jbxs,yhbh : string;
begin
  query1.close;
  query1.databasename:='c:\';
  query1.sql.clear;
  query1.sql.add('select * from swap.dbf ');
//取表中的记录值
  hssd := query1.Params[0].AsString;
  hxsd := query1.Params[1].AsString;
  jbxs := query1.Params[2].AsString;
  yhbh := query1.Params[3].AsString;  query1.open;
  while not query1.eof do
  begin    adoquery1.Close;
    adoquery1.sql.clear;
//追加到swap表中
    adoquery1.sql.add('insert into swap(HSSD,HXSD,JBXS,YHBH) values(:hssd,:hxsd,:jbxs,:yhbh) ');
   
    adoquery1.Parameters.ParamValues['hssd'] := strtofloat(hssd);
    adoquery1.Parameters.ParamValues['hxsd'] := strtofloat(hxsd);
    adoquery1.Parameters.ParamValues['jbxs'] := strtofloat(jbxs);
    adoquery1.Parameters.ParamValues['yhbh'] := strtofloat(yhbh);    adoquery1.Open;
  //........................
    adoquery1.next;//转到下一条记录
  end;

解决方案 »

  1.   

    query1.databasename:=';
      query1.sql.clear;
      query1.sql.add('select * from swap ');改成以上两句。
    然后把swap.dbf文件放到你的程序.exe文件同一目录下。再试试看.
    可以F7单步跟踪一下。
      

  2.   

    这时候的query1中还没有Params,你怎么能用query1.Params[0].AsString进行赋值呢?
    //取表中的记录值
      hssd := query1.Params[0].AsString;
      hxsd := query1.Params[1].AsString;
      jbxs := query1.Params[2].AsString;
      yhbh := query1.Params[3].AsString;
    当然会出现越界。
      

  3.   

    adoquery1.next;//转到下一条记录
    -->
    query1.next;//转到下一条记录
      

  4.   

    //取表中的记录值
      hssd := query1.fields[0].AsString;
      hxsd := query1.fields[1].AsString;
      jbxs := query1.fields[2].AsString;
      yhbh := query1.fields[3].AsString;