鄙人使用如上的TSQLConnection连接oracle,有时在不同表空间切换连接时,可以成功;
有时就失败,其它机器上也是如此。
sqlconnection1.close;
sqlconnection1.params.values['database']=servername;
sqlconnection1.params.values['user_name']=username;
sqlconnection1.params.values['password']=password;
sqlconnection1.open;sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('select ...略');
sqlquery1.open;sqlconnection1.close;
sqlconnection1.params.values['database']=servername2;
sqlconnection1.params.values['user_name']=username2;
sqlconnection1.params.values['password']=password2;
sqlconnection1.open;sqlquery1.close;
sqlquery1.sql.clear;
sqlquery1.sql.add('select ...略');
sqlquery1.open;就会报数据库属性不存在,这样的错误!哪位大侠知道其原因?

解决方案 »

  1.   

    因为数据层和应用层是分开的,在进行后台数据操作时,应用层会直接将操作命令发送给数据库服务器,而继续进行下一步操作,这样就可能在数据库服务器还未执行完操作时,应用层已经开始继续执行。上例中就可能出现sqlconnection1.open还没完成,连接还未成功,而执行下一查询语句,就会出错。
    建议在sqlquery1.close之前加个判断,if sqlconnection1.conncted=true 时,再进行查询操作。
      

  2.   

    楼上说的不像!sqlconnection1.open 应该是阻塞式的,他不完成不会执行下一步
      

  3.   

    同意  pazee(耙子)(灵感点亮生活)
      

  4.   

    while sqlquery1.connected do begin
      sleep(10);
    end;
    做一个这样的等待不知是否可取?
      

  5.   

    在哪句语句报错啊?在
    sqlconnection1.close; 之前,
    难道不用
    sqlquery1.close;
    一下吗?
    我只是猜测而已
      

  6.   

    sleep应该也没用
    对于这种在同一个操作里面可能连接不同数据库的情况,还不如再动态创建一个连接、用完就释放掉算了