在程序中有一个tadoquery组件qry1,其connection已经设置为一个打开的connection组件.qry1的状态为关闭.下列代码在执行第一次的时候没有错误,在执行第二次的时候发生错误:Access violation at address 1f453e6e in moudle 'msado15.dll'.write of address 00fbb020.
这是为什么???高手请回答,多谢.
//代码为//////
try
  qry1.SQL.Clear;
  qry1.SQL.Add(s);//s为正确的sql语句
  qry1.ExecSQL;
  qry1.Open;
  if qry1.RecordCount>0 then
  begin
    listbox1.Clear;
    qry1.First;
    while not qry1.Eof do
    begin
      listbox1.Items.Add(trim(qry1.FieldValues['fileno']));
      qry1.Next;
    end;
  end
  else
    showmessage('没有找到符合要求的记录');
finally
  qry1.Close;
end;

解决方案 »

  1.   

    1. 确定读出的值中没有null值
    2。试试
    try
      qry1.SQL.Clear;
      qry1.SQL.Add(s);//s为正确的sql语句
      qry1.Open;
      if qry1.RecordCount>0 then
      begin
        listbox1.Clear;
        qry1.First;
        while not ( qry1.Eof or qry1.FieldByName['fileno'].IsNull do
        begin
          listbox1.Items.Add(trim(qry1.FieldByName['fileno'],AsString));
          qry1.Next;
        end;
      end
      else
        showmessage('没有找到符合要求的记录');
    finally
      qry1.Close;
    end;
      

  2.   

    while少了一个括号,不好意思:)
      

  3.   

    一般用FieldByName('').as***
    比较好吧。