Einzelnen Beitrag anzeigen

SBDelphi

Registriert seit: 10. Jun 2009
10 Beiträge
 
#1

Mit ZEOS auf Firebird Server + Embedded gleichzeitig zugreif

  Alt 10. Jun 2009, 13:50
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS
Hallo zusammen!

hab da ein etwas nerviges Problem. Für die Steuerung eines Lagersystems hab ich folgende Vorgehensweise anvisiert:
Datenbestand: Firebird 2.1 auf einem Server
Fehlermeldungen: Firdbird 2.1 Embedded auf lokalem Rechner

Ich will jetzt per ZEOS auf die Datenbanken zugreifen (TZConnection).
Wie löst man das Problem, dass ich auf zwei Datenbanken gleichzeitig zugreifen muss?

Ich hab das mal versucht so zu lösen.
Delphi-Quellcode:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ZConnection,DB,ZAbstractRODataset,ZAbstractDataset,ZDataset, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    UserDBConnection: TZConnection;
    ServerConnection: TZConnection;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

    UserDBConnection.Disconnect;
    USerDBConnection.Free;

    ServerConnection.Disconnect;
    { Zugriffsverletzung -901 Invalid Transaction Handle }
    ServerConnection.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var WideStr: WideString;
    FQuery: TZQuery;
    f: textfile;
    s: string;
begin

    UserDBConnection:=TZConnection.Create(Self);
    UserDBConnection.Database:='T:\test.fdb';
    UserDBConnection.Protocol:='firebirdd-2.0';
    UserDBConnection.User:='SYSDBA';
    UserDBConnection.Connect;
    FQuery:=TZQuery.Create(nil);
    FQuery.Connection:= UserDBConnection;
    WideStr:='SELECT * FROM BENUTZER';
    with FQuery do
    begin
        SQL.Clear;
        SQL.Add(WideStr);
        Open;
    end;
    Label1.Caption:='UserDB: '+IntToStr(FQuery.RecordCount)+' Einträge';
    FQuery.Free;

    ServerConnection:=TZConnection.Create(Self);
    ServerConnection.Database:='MATERIALSTAMM';
    ServerConnection.Protocol:='firebird-2.0';
    ServerConnection.User:='FRANZ';
    ServerConnection.Password:='nix';
    ServerConnection.HostName:='localhost';
    ServerConnection.Connect;
    FQuery:=TZQuery.Create(nil);
    FQuery.Connection:= ServerConnection;
    WideStr:='SELECT * FROM MATERIAL';
    with FQuery do
    begin
        SQL.Clear;
        SQL.Add(WideStr);
        Open;
    end;
    Label2.Caption:='ServerDB: '+IntToStr(FQuery.RecordCount)+' Einträge';
    FQuery.Free;


    { Diese Abfrage macht Tabelleabfrage auf Server, nicht von Embedded ??? }
    FQuery:=TZQuery.Create(nil);
    FQuery.Connection:= UserDBConnection;
    WideStr:='SELECT * FROM BENUTZER';
    with FQuery do
    begin
        SQL.Clear;
        SQL.Add(WideStr);
        Open;
    end;
    Label3.Caption:='UserDB: '+IntToStr(FQuery.RecordCount)+' Einträge';
    FQuery.Free;
end;

end.
Entweder nur Server oder nur Embedded funktioniert. Sobald ich aber zwei Instanzen von TZConnection erzeuge,
geht das ganze nicht mehr, Fehlercodes -904 / -901.

Was mach ich falsch?

Für Eure Hilfe vielen Dank im voraus
Angehängte Dateien
Dateityp: pas mainunit_110.pas (2,6 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat