在程序中有一个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.   


    try
      if qry1.Active then qry1.Close;//加上这一句!
      qry1.SQL.Clear;
      

  2.   

    哦,不对。finally里已经关闭了。你把sql贴出来看看
      

  3.   

    try
      qry1.SQL.Clear;
      qry1.SQL.Add(s);//s为正确的sql语句
      qry1.ExecSQL;
      qry1.SQL.Clear;
      qry1.SQL.Add(s1);//s1为正确的Select 的sql语句
      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;
      

  4.   

    try
      qry1.SQL.Clear;
      qry1.SQL.Add(s);//s为正确的sql语句
      qry1.ExecSQL;
      qry1.SQL.Clear;
      qry1.SQL.Add(s1);//s1为正确的Select 的sql语句  //没必要吧???
      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;楼主写的应该没问题。把你的sql语句贴出来看看
      

  5.   

    查询:
      qry1.ExecSQL;//删掉
      qry1.Open;
    增、删、改:
      qry1.ExecSQL;
      qry1.Close;
      qry1.Open;
    delphi5:
      打个ado补丁
      

  6.   

    qry1.ExecSQL;//对于SQL语句不是SELECT时
    qry1.Open;//对于SQL语句是SELECT时
      

  7.   

    qry1.ExecSQL
    qry1.Open
    应该不能同时用,只能用一个
      

  8.   

    try
     try
      qry1.SQL.Clear;
      qry1.SQL.Add(s);//s为正确的sql语句  
      qry1.Open;  listbox1.Clear;    
      while not qry1.Eof do
      begin
          listbox1.Items.Add(trim(qry1.FieldValues['fileno']));
          qry1.Next;    
      end;
     except
      begin
         qry1.ExecSQL;
         showmessage('没有找到符合要求的记录');
      end;
     end;
    finally
      qry1.Close;
    end;
      

  9.   

    江南大米和zyyjc 说得对
      

  10.   

    贴主并没有错,这段代码运行时的确要出错。
    主要就在while not qry1.Eof do这一句上。
    我也遇到同样的问题。
      

  11.   

    怎么有两个  qry1.ExecSQL;
      qry1.Open;
      

  12.   

    try
      if Qry1.Active then 
        Qry1.Close;//你在Fially里关了,但是并不表示其它的事件里没有打开。加上它。
      qry1.SQL.Clear;
      qry1.SQL.Add(s);//s为正确的sql语句
      //qry1.ExecSQL; ->这个去掉
      qry1.Open;
      if qry1.RecordCount<>0 then//>0 改为 <> 0
      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;
      

  13.   

    楼主的代码没有错
    可能是sql语句由问题
      

  14.   

    在最前面加上
    qry1.close;
    即可!