Verbinden einer ADS-Datenbank per ODBC vom Webserver

Zur Zeit programmiere ich einen Zugriff auf unseren ADS-Datenbankserver, um damit Abfragen zu schreiben und zu exportieren.

Über den Aufruf meiner Skripte per DOS-Konsole hat das bisher ohne Probleme geklappt. Ich bediene mich der PHP-PEAR-Klassen:

require_once (‘DB.php’);
error_reporting(E_ALL);
$dsn = ‘odbc:///f991’; // DSN-Name

$dbODBC = DB :: connect($dsn); // CONNECT herstellen

if (true == DB :: isError($dbODBC))
{
die($dbODBC->getMessage());
}
else
{
echo “Connect erfolgreich”;
}

Als Output erhalte ich: “DB Error: connect failed

Wenn ich es allerdings vom DOS-Fenster aus starte, geht es ohne Probleme und die Verbindung wird hergestellt:
v:\XAMPP\php\php.exe” “index.php”

Erst dachte ich, es liegt vielleicht daran, dass XAMPP als Dienst läuft und ODBC nicht auf Benutzer-DSNs zugreifen kann und habe es als System-DSN angelegt.

Ergebnis: Das Gleiche, von DOS gehts, aber von einem Webserver nicht.

Daraufhin habe ich mal das ODBC-Objekt wie folgt näher ausgegeben

PHP-Code:
print_r($dbODBC);

und das hat das folgende Ergebnis gebracht:

Auschnitt aus Output:

Zitat:
[nativecode=HY000 [iAnywhere Solutions][Advantage SQL][ASA] Error 5185: Local server connections are restricted in this environment. See the 5185 error code documentation for details. axServerConnect]

Dadurch bin ich auf den folgenden Link gestoßen:
Advantage Database Architect über Remote Desktop � Das nie endende Chaos!
Ich bin so frei und zitiere daraus:

Zitat:
Wenn der Advantage Database Architect beim Öffnen einer Tabelle die Fehlermeldung “Error 5185: Local server connections are restricted in this environment. See the 5185 error code documentation for details. axServerConnect.” bringt, dann muss nur eine Datei ADS.INI im Verzeichnis der Tabelle mit diesem Inhalt angelegt werden:
[SETTINGS]
MTIER_LOCAL_CONNECTIONS=1

Allerdings hat diese Änderung bei mir leider nicht zum erwünschten Ergebnis geführt. Wenn jemand von Euch noch eine Idee hat, ich werde auch weitersuchen und die Lösung, so ich sie finde, hier veröffentlichen.

Ein bisschen googlen brachte mich dann darauf, dass ich möglicherweise ein Lizenzproblem habe:

Zitat:
IMPORTANT
Pursuant to iAnyWhere’s licensing agreement, … if an application is distributed to work without the Advantage Database Server (i.e., it uses the Advantage Local Server to access data), the application must act as a “client” that directly accesses and uses the data. To be specific, only computers that have the Advantage Local Server DLL loaded into memory can have access to the data that is obtained by that Advantage Local Server DLL. The application cannot act as “middleware” or as a “server” by having the data forwarded by any means to a separate computer. In other words, it is illegal to use the Advantage Local Server with a Web server, an application server, a terminal server, or any other type of middleware or server product to access data on behalf of remote computers. An Advantage Database Server (a.k.a. remote server) product must be purchased and used to allow this SOFTWARE PRODUCT to access data on behalf of applications running on remote computers.

Der ADS-Server verhindert aus lizenzrechtlichen Gründen den Zugriff von Webservern auf die Datenbank. Aus diesem Grund funktioniert das PHP-Modul nicht. Wie man es dafür aber zum Laufen bekommt, ist mir unbekannt. Gelöst habe ich das Problem nicht, aber umgangen habe ich es, indem ich ein Modul programmiert habe, welches die ADS-Datenbanktabellen in MySQL überträgt.

Eine weitere PHP-Library führt über ODBC die Anfragen aus und speichert die Ergebnisse serialisiert in der Datenbank ab, so dass der Webserver auf diese zugreifen kann.

Drucker aus Remotesitzung umbenennen

Ein Administrator eines Terminalservers kennt die Problematik bestimmt. In ERP-Systemen ist ein Drucker anhand seines Namens hinterlegt.Wenn sich ein Nutzer jedoch per RDP auf den Terminal Server verbindet, bekommt er seinen Drucker eingebunden mit dem Namen “Druckername (von Clientname) in Sitzung XY”. Dieser Name ist mit fast jeder Anmeldung anders und deshalb unbrauchbar für den Einsatz in Verbindung mit Software, die den Netzwerkdrucker über den Namen erkennt.

Dank Google kam ich auf diesen Link und konnte mir dann daraus das folgende Skript basteln:

::Session Id aus der Temp Variable extrahieren
set id=%temp:~-1%
:: Druckernamen zusammenbasteln
set oldPrinterName=Zebra_LP2844 (von %Clientname%) in Sitzung %id%
set neuPrinterName=Zebra_LP2844
:: Drucker umbennen
rundll32 printui.dll,PrintUIEntry /Xs /n “%oldPrinterName%” printername “%neuPrinterName%”

Mit diesem Skript wird der Druckername in einen einheitlichen Druckername umgewandelt.

Für die Ausführung des Skripts sind allerdings Administratorrechte erforderlich.(Wenn ichmich nicht irre Lächeln )

Gegliederte Überschriften in Word 2007

Langjährige Word-Benutzer können ein Lied davon singen – Überschriften in dem Format

1. Überschrift Ebene 1

1.1 Überschrift Ebene 2

1.1.1 Überschrift Ebene 3

waren Microsoft Word bis Version 2003 nur mit viel Geduld und Erfahrung beizubringen und wurden über das Kopieren von Formatvorlagen von Dokument an Dokument weitergegeben. Mit Word 2007 haben die Word-Entwickler besonders für Neueinsteiger einen schnellen und einfachen Weg geebnet:

Gegliederte Überschriften Word
Start -> Absatz --> Liste mit mehreren Ebenen

Über die Registerkarte “Start” gehen Sie zur Gruppe “Absatz”. Dort finden Sie wie in der obigen Abbildung markiert die Buttons zur Einstellung der Gliederungseigenschaften.

Nach Klick darauf erscheinen die möglichen Einstellungen für die Gliederung, darunter auch diese für die Nummerierung über mehrere Ebenen:

Gegliederte Überschriften Word 2

Nach Klick darauf werden die Überschriften wie gewünscht im hierarchischen Format gegliedert und nummeriert.

Gegliederte Überschriften Word 3

Wenn Sie jetzt die Überschriften noch Eingliedern möchten, dann können Sie das einfach tun, indem Sie die in die Absatzeinstellungen gehen.

Vorher sollten Sie jedoch ein Wort der Überschriftenebene, die Sie einrücken wollen, markieren.

Gegliederte Überschriften Word 4

In dem daraufolgenden Fenster können Sie bei Einzug den Einzug angeben.

Gegliederte Überschriften Word 6

Die Ebene wird bei Ihnen voreingestellt sein auf die Ebene, die Sie vorher angeklickt haben.

Das Ergebnis kann sich anschließend sehen lassen

Gegliederte Überschriften Word 9

Aktive Terminalserver Sitzungen loggen

Bei einem alten Arbeitgeber gab es Heimerfasser, welche von zu Hause aus auf unseren Terminal Servern gearbeitet haben.

Abrechnungstechnisch gab es manchmal Unstimmigkeiten, was dazu führte, dass ich nachweisen musste, dass ein Heimerfasser zu einer bestimmten Zeit gearbeitet hat oder nicht.

Dafür habe ich die aufgebauten Verbindungen zu einem Terminal Server mitgeloggt. Für die Umsetzung nutzte ich den Befehl

query session

SITZUNGSNAME BENUTZERNAME ID STATUS TYP GERÄT
deuser 0 Getr. rdpwd
rdp-tcp 65536 Abhör. rdpwd
console 4 Verb. wdcon
>rdp-tcp#114 administrator 17 Aktiv rdpwd
SB018 19 Getr. rdpwd
rdp-tcp#115 VFGHE01 23 Aktiv rdpwd
sb035 2 Getr. rdpwd
rdp-tcp#111 VFGHE13 24 Aktiv rdpwd
rdp-tcp#113 vfghe02 18 Aktiv rdpwd
rdp-tcp#101 VFGHE10 8 Aktiv rdpwd
sb045 10 Getr. rdpwd
rdp-tcp#104 VFGHE23 3 Aktiv rdpwd
rdp-tcp#112 VFGHE08 5 Aktiv rdpwd

Den Output dieses Befehlt habe ich geparst und in eine CSV-Datei angehängt:

13.06.2007 17.18 Uhr ; sb007 ; aktiv
13.06.2007 17.18 Uhr ; sb027 ; aktiv
13.06.2007 17.18 Uhr ; vfghe06 ; getr.

Das PHP-Skript dazu könnt ihr hier herunterladen.

DOWNLOAD Skript  (Der link ist leider down – ich habe das Originalskript leider nicht mehr gefunden. Sorry)

DOS-Befehl zum Löschen von Dateien und Verzeichnissen

In dem von mir administrierten Netzwerk auf Arbeit gibt es Transfer- und Scan-Ordner, die über Nacht geleert werden, damit sich dort keine Datenmüllhalden ansammeln und die Leute ihre Dateien gleich wegsortiert von a) nach b) speichern.

Bis dato nutzte ich einfach den Befehl “del E:\Daten\Public\Scan\*.* /q /s” dafür. Das hatte den unangenehmen Effekt, dass Unterverzeichnisse zwar leer waren, aber immer noch vorhanden.

Dies umgehe ich jetzt mit dem Befehl rmdir oder auch rd.

Da ich das Rad nicht neu erfinden will, verlinke ich hier auf einen guten Artikel, der den Befehl sehr gut beschreibt: LINK