设置TQuery的数据库失败了创建的TSession的上下文

时间:2018-02-02 13:46:30

标签: delphi bde

前言:BDE已弃用。这项工作是一个减少我店铺足迹的项目。 ; - )

我需要定期将线程中的数据从BDE TQuery移动到我们的Oracle实例。这需要在TQuery中配置一个自己的TDatabase,唯一命名为TSession。

我的草稿代码(下面 - 而不是使用数据模块)创建了一个新会话;然后为该会话创建一个数据库,该数据库使用我们对具有Paradox(!)表的目录的公共BDE别名。 (因为它的草案和测试,私人目录,独特的会话命名等等细节尚未处理。)然后我创建了一个TQuery,Q,并告诉它使用数据库及其会话(通过DB的名称)。

这就是一切都变坏了。添加SQL后,Q.Prepare除外Unknown alias。由于Q' s Database为零,这是有道理的。注意:我在DB.Open的实质性工作之前就已经尝试Q - 没有改进。

我猜我忘了一些管道;我的安装步骤顺序错了;或者"默认"会话及其数据库问题 - 本草案中没有设置或使用这些内容。

我很难过。

谢谢!

更新:添加更多代码以澄清这两个程序是类的一部分。

uses
  Bde.DBTables,System.Classes,System.Generics.Collections;

type TUpdateFieldmap = class(TObject)
  private
    DB: TDatabase;
    UpdateSession: TSession;

    procedure GetTableFields;

  public
    constructor Create;
    destructor Destroy; override;

    procedure OpenSis;
end;

const
    DBNAME  = 'fieldsets';
    SESSIONNAME='testsession';

implementation

procedure TUpdateFieldmap.GetTableFields;
var
  Q: TQuery;
begin
  Q := TQuery.Create(NIL);
  Q.DatabaseName := DBNAME;
  Q.SessionName := SESSIONNAME;

  // Q.Database is still undefined

  // ...
end;

procedure TUpdateFieldmap.OpenSis;
begin
  UpdateSession:=Sessions.OpenSession(SESSIONNAME);
  UpdateSession.ConfigMode:=cmAll;
  UpdateSession.NetFileDir := 'f:\public\DBShare\DBNet';

  DB := TDatabase.Create(NIL);

  DB.AliasName := 'si_production';
  DB.DatabaseName := DBNAME;

  DB.SessionName:=UpdateSession.SessionName;

  DB.Open;

  GetTableFields;
end;

0 个答案:

没有答案