0

有没有办法让多个 TADOQuery 访问相同的会话或事务信息?

两个 TADOQuery 都具有相同的 TADOConnection,但这不起作用。

示例 - 我有一个生成临时表的查询,我想在另一个查询中使用该临时表,但是当我尝试时,它不知道临时表。

procedure Foo(dbCon : TADOConnection);
var
  q1  : TADOQuery;  //TODO :  set your ADOQuery to use a forward only read only cursor.
  q2  : TADOQuery;

begin
  q1 := TADOQuery.Create(nil);
  q1.Connection := dbCon;
  q1.SQL.Text := 'SELECT id INTO #TempT FROM dFTNodes;';
  q1.Active := true;

  q2 := TADOQuery.Create(nil);
  q2.Connection := dbCon;
  q2.SQL.Text := 'SELECT id FROM #TempT;';
  q2.Active := true; //Fails here does not know table #TempT
end;
4

1 回答 1

3

如果您的 TADOConnection 未定义KeepConnection=True为默认值,则在执行 q1 后断开连接,您的会话丢失并且#TempT 消失。
一般来说,如果没有使用连接的活动 TCustomAdodatasets,则连接使用的连接KeepConnection=False将被关闭。q2 将获得一个新会话并且无法访问#TempT。

于 2014-10-23T21:28:04.007 回答