我用BDE连接数据库,用tquery进行数据检索,在一个循环语句中使用tquery控件,当用该控件150次之后,系统报错,"General SQl error,你不能打开更多的表了",我的数据库是Access7.0,请问这是怎么回事?应该怎么样解决这个问题?在线等待

解决方案 »

  1.   

    一次打开这么多表呀!
    是不是Access不支持一次打开这么多表呀
      

  2.   

    可是我只不过是打开同一个表呀,
    for i:=1 to 5000 do 
    begin
       query1.active:=false;
       query1.sql.add('......');
       query1.execsql;
       query1.active:=true;
       //处理数据......
        ......
       query1.active:=false;
    end;程序代码的大致就是这样的
      

  3.   

    上面 的代码有问题  
    在query1.sql.add('......');之前要加上query1.sql.clear不过问题好象不在这里,建议你改如下的写法
    query1.close
    query1.sql.clear
    query1.sql.text := 'select * from yourtable'
    query1.openfor i:=1 to 5000 do 
    begin
         query1.edit  (or query1.insert)
         给你要操作的各字段附值
         query1.parambyname('字段名1').Value := ....
         .... 
         query1.post;
    end
      

  4.   

    上面代码有点问题,更正如下
    for i:=1 to 5000 do 
    begin     
         query1.insert)
         给你要操作的各字段附值
         query1.parambyname('字段名1').Value := ....
         .... 
         query1.post;
    endquery1.first
    for i:=1 to query1.recordcount do 
    begin     
         query1.edit
         给你要操作的各字段附值
         query1.parambyname('字段名1').Value := ....
         .... 
         query1.post     query1.next
    end
      

  5.   

    你每次结束的时候,把connect Close
      

  6.   

    rikky(读书、心知、生活) 说得对,150循环以后,你的sql代码要重复执行多少次啊??
      

  7.   

    谢谢上面的两位,不过我的 sql.clear语句是有的,只不过我在上面漏掉了!
    问题好像不在这儿
      

  8.   

    我的源代码如下:
    procedure TForm9.Tv1Change(Sender: TObject; Node: TTreeNode);
    var
        sqlstr:string;
        loca,i:integer;
    begin
    //try
    account:=account+1;
    for i:=0 to 11 do lv1.Items.item[i].subitems.clear;
    if tv1.Selected.Level =1 then
        with dm do begin
        loca:=pos('  ',tv1.selected.Text);
        id:=copy(tv1.selected.Text,1,loca -1);
        sqlstr:='select t1.*,t2.* from customer_publish t1 inner join '+
                'orders t2 on t1.cust_id =t2.cust_id where t2.order_id='+ id;
        qtree.close;
        qtree.sql.Clear;
        qtree.sql.add(sqlstr);
        qtree.execsql;
        qtree.Database.Open ;
        qtree.active:=true;
        lv1.Items.Item[0].subitems.add(qtree.fieldbyname('cust_name').asstring);
        lv1.Items.item[1].subitems.add(qtree.fieldbyname('receiver').asstring);
        lv1.Items.Item[2].SubItems.add(qtree.fieldbyname('linker').asstring);
        lv1.Items.Item[3].SubItems.add(qtree.fieldbyname('address').asstring);
        lv1.Items.Item[4].SubItems.add(qtree.fieldbyname('postcode').asstring);
        lv1.Items.Item[5].SubItems.add(qtree.fieldbyname('phone').asstring);
        lv1.Items.Item[6].SubItems.add(qtree.fieldbyname('fax').asstring);
        lv1.Items.Item[7].SubItems.add('------------------------------------');
        lv1.Items.Item[8].SubItems.add(qtree.fieldbyname('start_magno').asstring+'  至  '+qtree.fieldbyname('end_magno').asstring);
        lv1.Items.Item[9].SubItems.add(qtree.fieldbyname('start_date').asstring+'  至  '+qtree.fieldbyname('end_date').asstring);
        lv1.Items.Item[10].SubItems.add(qtree.fieldbyname('order_count').asstring);
        if qtree.fieldbyname('Ispresent').asboolean=true then
            lv1.Items.Item[11].SubItems.add('是')
        else
            lv1.Items.Item[11].SubItems.add('否');
        lv1.Refresh ;
        qtree.Close;
        qtree.Database.Close;
        end
    else
        begin
        for i:=0 to 11 do lv1.Items.item[i].subitems.clear;
        tv1.Refresh;
        end;
    {except
    showmessage(inttostr(account));
    end;}
    end;
      

  9.   

    大概看了一下,这段代码就是这么个结构
    try
       account := account + 1;
       for i := 0 to ll do 循环;
       if 条件满足 then
        begin
          数据处理;
        end
       else
        begin
          for i := 0 to ll do 循环;
        end;
    except
        抛出异常;
    end;
    有些地方不明白,你说你是在循环执行同一张表的查询,可是这个循环在什么地方。对那张表的
    查询应该是在if...else里面吧,可是if...else不是循环执行的,在代码里只执行了一次。
    你是不是在循环调用TForm9.tvlchange事件呀?
    还有就是tvl和lvl是什么控件?请说明一下,再有就是代码里面一般不要写
      if 布尔值 = true then 应该直接写
      if 布尔值 then