Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Exception "Duplicate database name" bei zwei Instanzen (https://www.delphipraxis.net/155189-exception-duplicate-database-name-bei-zwei-instanzen.html)

moelski 12. Okt 2010 12:22

Datenbank: AbsoluteDB • Version: 6.07 • Zugriff über: -

Exception "Duplicate database name" bei zwei Instanzen
 
Moin !

Habe diesen Code hier:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ABSMain, DB, DBGrids;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


type
  TDM = class
  private
    { Private-Deklarationen }
    DB         : TABSDatabase;
    Session    : TABSSession;
  public
    constructor Create;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  one, two : TDM;

implementation

constructor TDM.Create;
begin
  inherited;
  Session                := TABSSession.Create(Nil);
//  Session.SessionName    := 'LVSession';
  Session.AutoSessionName := True;
  Session.Active         := True;

  DB                     := TABSDatabase.Create(Nil);
  DB.DatabaseName        := 'LVDataBase';
  DB.SessionName         := Session.SessionName;
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  one := tdm.Create;
  two := tdm.Create;
end;

end.
Im Grunde nutzlos, aber es kommt da zu einem komischen Problem.
Ich habe ja zwei Instanzen von meiner TDM Klasse. Und ich würde mal sagen das ich dann im Normalfall auch keine Konflikte zwischen "one" und "two" haben sollte.
Dennoch bekomme ich diesen Fehler:
Code:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EDatabaseError mit Meldung 'Duplicate database name 'LVDataBase''. Prozess Project2.exe (3584)
Kann sich jemand einen Reim drauf machen was da schief geht ?!

mkinzler 12. Okt 2010 12:24

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Verwende mal unterschiedliche Sessionnamen

moelski 12. Okt 2010 12:30

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Moin Markus,

ne das isses noch nicht. Habe das mal probiert:
Delphi-Quellcode:
constructor TDM.Create;
var gu : TGUID;
begin
  inherited;
  CreateGUID(gu);
  Session                := TABSSession.Create(nil);
  Session.SessionName    := 'Session_'+IntToStr(gu.D2)+IntToStr(gu.D3);
  Session.Active         := True;

  DB                     := TABSDatabase.Create(nil);
  DB.DatabaseName        := 'LVDataBase';
  DB.SessionName         := Session.SessionName;
  DB.DatabaseFileName    := 'Test' + IntToStr(gu.D2)+IntToStr(gu.D3) + '.abs';
end;
Und im Debugger auch geschaut was an SessionName entsteht. Ist def. unterschiedlich (würde mich auch wundern wenn nicht), aber das problem ist immer noch da :?

Bernhard Geyer 12. Okt 2010 12:33

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Zitat:

Zitat von moelski (Beitrag 1055315)
Delphi-Quellcode:
  DB.DatabaseName        := 'LVDataBase';

Wieso heißt die Fehlermeldung wohl:

Zitat:

'Duplicate database name 'LVDataBase''
?

Du darfst keine 2 Instanzen von TABSDatabase mit gleichen DatabaseName-Property haben!

moelski 12. Okt 2010 12:36

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Moin !

Zitat:

Wieso heißt die Fehlermeldung wohl:
Ok, das unterschiedliche Namen zum Erfolg führen ist wohl die logische Konsequenz der Meldung :)

Zitat:

Du darfst keine 2 Instanzen von TABSDatabase mit gleichen DatabaseName-Property haben!
Ok, dann wäre die Frage eher gewesen warum dem so ist...

Bernhard Geyer 12. Okt 2010 12:40

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Zitat:

Zitat von moelski (Beitrag 1055320)
Ok, dann wäre die Frage eher gewesen warum dem so ist...

Weils der Hersteller es so implementiert hat.

Hintergrund wird das Verhalten der BDE sein welche die Verbindung TTable/TDatabase zur Datenbank über diese Namen als String herstellt. Ware bei ABS nicht nötig da über die Referenz verbundent wird, aber vermutlich hat man früher ein BDE-Kompatibleres Verhalten implementiert.

moelski 12. Okt 2010 12:42

AW: Exception "Duplicate database name" bei zwei Instanzen
 
Danke für die Erklärung !


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz