做一个Data Module 在里面放TDataBase控件连接数据库,在其他子窗口里放Tquery控件,将其databasename属性设为TDataBase,这样就可以在窗口中查询表了,想查那个都行,select field1,field2,... from 表1(表2、3...) where ...

解决方案 »

  1.   

    meijg,您好!
    事实上我就是这么做的,可是当打开的窗口一多时,BDE报错说:
    在open语句中指定的游标已经打开,不知何故?(数据服务器用的是DB2). 
      

  2.   

    halfdram,您好:
    我原来也想这么做的,问题是每个子窗口所要连接的表的名称和数量都不一样,而且数目也较多,是不是有什么好方法呢?
      

  3.   

    有很多解决方案:1、用Data Module,如果实在没有办法,可以建立多个TTable而指向同一个表(我怀疑你一下打开那么多表干吗?);
    2、USE所要调用的表所在的表单(窗口1中连接表A,同时须查询表B和C,那么可以直接在窗口1中连接窗口2和窗口3);推荐用第一种方法!
      

  4.   

    再需要的时候动态生成Query和Table。在BCB中如下:
    TQuery * pQuery=new TQuery(this);
    pQuery->DatabaseName="DataBase1";
    pQuery->SQL->Clear();
    pQuery->SQL->Add(...);
    ....
    ....
    pQuery->Close();
    delete pQuery;
    Delphi中应该也可以这样写。
      

  5.   

    清泉不用tquery做,最好不要用ttable,不要用独占方式打开数据库,这种情况很可能是重复打开同一个数据库的原因
      

  6.   

    请全部用tquery做,最好不要用ttable,不要用独占方式打开数据库,这种情况很可能是重复打开同一个数据库的原因
      

  7.   

        没有必要,不要开太多窗口。
        应用比较复杂的时候,你甚至可以一个窗体对应一个数据模块, 关键是保持逻辑上清晰,很多与界面无关的就可以写在数据模块中。
        打开的Table 不用时要及时CLOSE,减少数据出错的可能性。
        你连接的是数据库服务器,建议多用TQuery, 少用TTable.
       有些东西比较微妙。你有了自己对它的感觉就会知道,
      

  8.   

    诸位:
    全部用Tquery做的话,如何对大字段进行更新呢?
      

  9.   

    按你提供的说明可能是你使用多线程时在不同窗口同时对一个table进行查询或其他数据库操作动作,建议你在各窗口使用不同的查询(query)控件,同时将与底层数据库的连接放在datamodule中。多线程的资料可以在下面链接找到答案:
    http://www.csdn.net/books/bookview.asp?id=9
    如果还希望有什么别的要帮忙,请EMAIL:[email protected]
      

  10.   

    各位大侠:
    我仔细地跟踪了一下,发现是打开Table时出错,而此时并无其它的Table处于打开状态,到底是何原因?会不会是BDE的问题或是DB2的问题?
      

  11.   

    该表已经被打开,打开新form时判断一下该表是否被打开,打开了,就不必在open了
      

  12.   

    在TDatabase所在的窗体上放一个TSession对象也许可以解决问题。
      

  13.   

    在使用表之前,先将其TDataBase和TTable都Close,试一下,最好还是用TQuery