netFrame-Syntax:
function systemdbfull: string;
Beschreibung:
Die Funktion systemdbfull liefert den kopletten Eintrag wie man aus der Mandaten DB
auch zusätzlich die Daten aus der System-DB abfragen kann.
Das heisst wir bekommen hier den Eintrag in folgender Form: (Servername.Datenbankname.)
Diese Vorgangsweise ist aber veraltet und wird nicht mehr verwendet.
Die neue Vorgangsweise verwendet einen eingerichteten Linked Server.
Dieser Linked Server muss den Namen
NETFRAME_SYSTEM haben und die System DB muss den Namen
netFrameDev haben.
Leider können wir nicht einen Alias auf den DB Namen erstellen im SQL Server 2000.
Die neue Vorgangsweise hat auch den Vorteil das wir Datenbank übergreifende Abfragen
auch in gespeicherte Prozeduren machen können.
Beispiel alte Methode:
procedure load_functions(obID: string);
begin
TableFunction.setStringParam('OB_ID', obID); //Der Tabelle die Objekt ID als Parameter übergeben
//message_dlg(systemdbfull+'NET_NS_FUNKTION');
//Hier wird jetzt der voll qualifizierte Name auf die Tabelle in der System Datenbank übergeben
TableFunction.setstringparamnoquot('SYSTEM_FUNCTION_TABLE', systemdbfull+'dbo.NET_NS_FUNKTION');
TableFunction.readdata;
GridFunction.setFocus;
end;
Beispiel in SQL mit Verweis in die System DB:
Mit dieser SQL Anweisung holen wir uns jede Ausstattung ,
die den Prozess 3, also Prüfungen hat und
die eine bestimte Funktion zugeordnet hat wie z.B. Feuerlöscher Warter.
Dann wird anhand der bestehenden Wartung die nächste Wartung ermittelt
DECLARE @OB_ID AS varchar(36)
DECLARE @prozessNummer AS integer
DECLARE @funktionNr AS integer
DECLARE @filter_on AS integer
SET @OB_ID = :OB_ID
SET @funktionNr = :FU_NUMMER
SET @prozessNummer = $GLOBAL_AUSSTATTUNG_PROZESS_PRUEFUNG
SET @filter_on = :FILTER_ON
zum Testen der Anweisung
SET @OB_ID = '72157940-BF3D-4222-B784-655EFE12F0E1'
SET @funktionNr = 11653
SET @prozessNummer = 2
Holen wir uns die zugeordnete Ausstattung
SELECT az.*,
Diese Unterabfrage berechnet die nächste fällige Wartung für die aktuelle Ausstattung
(
SELECT ISNULL(DATEADD(month, intervall.IVP_INTERVALL, MAX(IDP_DATUM)), intervall.IVP_ERSTE_FAELLIGE_PRUEFUNG)
FROM NET_INTERVALL_PRUEFUNG intervall
LEFT OUTER JOIN NET_INTERVALL_DETAIL_PRUEFUNG intd
ON (intd.AZ_ID = az.AZ_ID)
WHERE intervall.AZ_ID = az.AZ_ID
GROUP BY intervall.IVP_INTERVALL, intervall.IVP_ERSTE_FAELLIGE_PRUEFUNG
) AS NAECHSTE_PRUEFUNG
FROM NET_AUSSTATTUNG_ZU az
Verbinden wir uns mit der Ausstattung aus der System DB
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_AUSSTATTUNG ast
ON (az.AU_ID = ast.AU_ID)
Verbindung wegen dem Prozess
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_AUSSTATTUNG_FUNK_ZU afp
ON (afp.AU_ID = ast.AU_ID)
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_PROZESS prz
ON (afp.PZ_ID = prz.PZ_ID AND prz.PZ_NUMMER = @prozessNummer)
Verbindung wegen der Funktion
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_AUSSTATTUNG_FUNK_ZU aff
ON (aff.AU_ID = ast.AU_ID)
Einschränken auf die Funktionsnummer, sonst bekommen wir für jede
zugeorndete Funktion bei der Ausstasttung einen Datensatz
Jedes Objekt wird nach seiner Funktion geplegt.
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_NS_FUNKTION fuk
ON (aff.FU_ID = fuk.FU_ID AND fuk.FU_NUMMER = @funktionNr)
Mit dieser Beziehung wird jetzt noch überprüft ob auch die Funktion
den betreffenden Prozess zugeordnet hat.
Nur dann Kann der Prozess gewartet werden.
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_PROZESS_FUNK_ZU pfz
ON (pfz.FU_ID = fuk.FU_ID)
INNER JOIN NETFRAME_SYSTEM.netFrameDev.dbo.NET_PROZESS prz2
ON (pfz.PZ_ID = prz2.PZ_ID AND prz2.PZ_NUMMER = @prozessNummer)
--------------
--------------
WHERE az.OB_ID = @OB_ID
Nur Ausstattung vom Objekt holen
AND az.EH_ID IS NULL
AND (@filter_on = 0 OR AZ_INAKTIV = 0)
ORDER BY NAECHSTE_PRUEFUNG