Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird RDB$SET_CONTEXT im Embedded-Modus (https://www.delphipraxis.net/173468-firebird-rdb%24set_context-im-embedded-modus.html)

Morphie 26. Feb 2013 14:50

Datenbank: Firebird • Version: 2.5 • Zugriff über: Embedded

Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Hi,

kann es sein, dass die Funktion RDB$SET_CONTEXT im Embedded-Modus nicht funktioniert?
Ich habe mir folgende Procedure angelegt:
Code:
RECREATE PROCEDURE SYS$SET_CURRENT_USER (
 USERNAME VARCHAR(30))
AS
BEGIN
  RDB$SET_CONTEXT('USER_SESSION', 'SYS$CURRENT_USER', :USERNAME);
END
Wenn ich mittels TCP/IP auf die Datenbank zugreife, kann ich damit wunderbar einen Usernamen unabhängig vom Firebird-User definieren und später auslesen.

In der Embedded-Variante bekomme ich folgende Fehlermeldung:
Zitat:

Engine Error (code = 335544382):
ib_util init failed - UDF usage disabled.
At procedure 'SYS$SET_CURRENT_USER' line: 5, col: 3.

SQL Error (code = -901):
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
RDB$SET_CONTEXT ist ja als UDF definiert. UDFs sind dann ja lt. Fehlermeldung im Embedded-Modus deaktiviert.

Gibt es eine Möglichkeit, auch im Embedded-Modus mit Context-Variablen zu arbeiten?

tsteinmaurer 26. Feb 2013 14:59

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Hört sich ein bißchen danach an, dass in deiner Embedded Distribution nicht alle benötigten Dateien inkludiert sind. Wie sieht denn deine Verzeichnisstruktur genau aus?

Morphie 26. Feb 2013 15:25

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Au ha, jau das war es...
Da habe ich ehrlich gesagt gar nicht dran gedacht.

Ich bekam das Problem mit Firebird Maestro, also einem Administrationstool für Firebird, welches nicht von mir ist.

Die liefern wohl einen ziemlich altes und unvollständiges FB-Embedded-Paket aus. Habe mir die aktuelle Embedded-Version heruntergeladen und die alten Dateien entsprechend ersetzt, nu geht's. :-) Danke

tsteinmaurer 26. Feb 2013 17:06

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Hallo,

ich stelle jetzt einfach mal in den Raum, dass ich Embedded nicht in der Entwicklung verwende würde, sondern eine normale Serverinstallation, damit unterschiedliche Connections durch einen Server gebündelt werden. Embedded sollte eigentlich nur eine Rolle in Richtung Deployment zum Kunden spielen.

Aber das Ganze ist vermutlich Geschmackssache und da Embedded 2.5 mehrere Connections von unterschiedlichen Prozessen zur selben Datenbankdatei ermöglicht/erlaubt, wird man diesbzgl. auch etwas faul. :-D

Morphie 26. Feb 2013 17:24

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Naja, eigentlich mache ich es so:
Single-User-Betrieb / Demos / USB-Stick-Version: Embedded
Multi-User-Betrieb: Server

Natürlich verwende ich für die Entwicklung auch die Server Version, allerdings muss ich das ja auch in der Embedded-Version testen, wenn ich es dem Kunden anbieten möchte. Und da hat es mich halt gerade gewundert, dass die UDFs nicht funktionieren. Das Problem trat aber wie gesagt überhaupt nicht in meinem Programm auf, sondern schon beim Datenbank-Designen.

user0815 27. Feb 2013 07:19

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Zitat:

Aber das Ganze ist vermutlich Geschmackssache und da Embedded 2.5 mehrere Connections von unterschiedlichen Prozessen zur selben Datenbankdatei ermöglicht/erlaubt, wird man diesbzgl. auch etwas faul.

Hmmm, wenn ich mich mit der Embedded arbeite (Version 2.5.1), diese mit "Database Workbench v4.3.2 Pro" öffne & dann versuche mit der Anwendung (UniDAC) auf die selbe Database zugreifen will erhalte ich nachfolgende Exception:

Code:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt TEST.exe ist eine Exception der Klasse EIBCError mit der Meldung '
I/O error during "CreateFile (open)" operation for file "C:\PROGRAMDATA\TEST\DATABASE\test.FDB"
Error while trying to open file
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird. ' aufgetreten.
---------------------------
Anhalten  Fortsetzen  Hilfe  
---------------------------

tsteinmaurer 27. Feb 2013 07:30

AW: Firebird RDB$SET_CONTEXT im Embedded-Modus
 
Ja, vermutlich ein Mix aus 32-bit Embedded und 64-bit Server. Obwohl in 2.5 Verbindungen von mehreren Embedded/Server-Prozessen aus möglich ist, eine Mischung 32-bit vs. 64-bit geht nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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