Toolmaker Produkt-Dokumentation
Aufruf von directaccess4i
Wie Sie im Kapitel 4 bereits gelesen haben, können Sie mittels STRDAISQL ganz einfach einen SQL Befehl gegen eine Datenbank ausführen. STRDAISQL dient u.a. dafür, einen SQL Befehl interaktiv auf dem System i zu testen, bevor man ihn in ein vorhandenes RPG, Cobol oder CL Programm einbaut.
STRCDBSQL verwendet für die Ausführung die gleiche Schnittstelle, die Sie in Ihren Anwendungen verwenden und die nun näher beschrieben wird.
Aus Ihren Programmen können Sie directaccess4i einfach per CALL aufrufen.
0033 – Aufruf Schnittstelle zur externen Datenbank
Die notwendigen Parameter lauten:
CTID – 4 A
Dies ist eine Identifikationsnummer, die von directaccess4i vorgegeben wird. Anhand dieser ID können Sie Ihre Befehle an die externe Datenbank nachverfolgen und protokollieren (s. SELECT Beispiel).
CTMODE – 2 A
Über den Modus können Sie steuern, wie directaccess4i laufen soll.
01 = Aufruf über CALL
D.h. wenn Sie directaccess4i jedes Mal aus Ihren Programmen per CALL aufrufen, wird es jedes Mal gestartet und läuft bis der übergebene Befehl abgearbeitet ist.
02 = Verarbeitung über Data Queue
Wenn Sie directaccess4i mit Parameter 02 starten, wird es permanent laufen und die DTAQ CTCMD überwachen. Über die DTAQ erhält directaccess4i seine Anweisungen.
Diese Verarbeitung ist bei vielen Zugriffen erheblich schneller und Resourcen schonender.
Mode 02 ist für INSERT, UPDATE und DELETE möglich.
Sie sollten directaccess4i mittels SBMJOB als Batch Job aufrufen. Statt nun aus Ihrem RPG/Cobol Programm die Befehle mittels CALL aufzurufen, schicken Sie sie in die DTAQ. Sie finden in der QRPGLESRC ein Beispielprogramm hierfür (EXAMPLED04).
03 = Aufruf über CALL mit Angabe einer extern beschriebenen Datei.
Dieser Modus gilt nur für SELECT Anweisungen, bei denen Sie das Ergebnis in einer extern beschriebenen Datenbankdatei auf dem System i empfangen möchten. Wenn die Datei noch nicht existiert wird sie automatisch erstellt.
WICHTIG: Wenn Sie Modus 03 nutzen möchten, muss auf dem Gateway PC IBM IBM i Access
V5R3 oder höhe mit dem ADO.NET Datenprovider von IBM installiert sein.
07 = Mit Mode 07 können Sie Daten vom System i mit nur einem SQL Befehl (der natürlich auch sehr komplex sein darf) in Excel und MS SQL Server exportieren. Im Falle von Excel geben Sie bei CTTARGETIP den Pfad und Dateinamen, der zu erstellenden Excel Tabelle an (z.B. c:\Temp\meinexcel.xls). Bei CTENHANCED können Sie den Sheetnamen der zu erstellenden Excel Datei angeben. Wenn Sie diesen weg lassen, wird Sheet1 als Standardname verwendet. Wie bei Mode 03 ist auch hier der IBM ADO.NET Datenprovider, der ab IBM i Access V5R3 oder höher vorhanden ist, notwendig.
CTEXTDB – 10 A
Mit diesem Parameter teilen Sie directaccess4i mit, welche externe Datenbank Sie ansprechen möchten:
MYSQL4 - MySQL Datenbank Version 4.1
MYSQL5 - MySQL Datenbank Version 5.1
ACCESS2003 - Microsoft Access 2003 oder älter
ACCESS2007 - Microsoft Access 2007
EXCEL2000 - Microsoft Excel 2000 oder neuer
EXCEL97 - Microsoft Excel 97
MSSQL2000 - Microsoft SQL Server 2000
MSSQL2005 - Microsoft SQL Server 2005
ORACLE - Oracle Datenbank
DB2IBM I - IBM DB2 auf System i
DB2V9 - IBM DB2 V9 (Unix, Linux, Windows) inkl. XML Datentyp
INFORMIX - IBM INFORMIX Datenbank
SYBASE - Sybase Advantage Database Server
PSTGRE - Postgre SQL Datenbank
ODBC - Jede beliebige Datenbank, für die Sie einen ODBC Treiber haben
Im Falle des ODBC Treibers sollten Sie uns mitteilen, welche Datenbank Sie benutzen, damit wir einen nativen ADO.net Datenprovider einbauen können, der um einiges schneller ist, als ein ODBC Treiber.
CTRTCODE – 4 A
Dieser Parameter meldet Ihrem Programm zurück, ob der Befehl erfolgreich ausgeführt wurde oder ob Fehler aufgetreten sind.
Beachten Sie, dass mit unserem neuen Gateway Programm, welches Sie aktuell auf Anfrage erhalten, auch die exakte Fehlermeldung der Datenbank im Parameter CTSQLCMD zurückgeliefert wird!
Hier eine Liste der möglichen Fehlermeldungen:
0xxx - Lizenzfehler
0001 - Der Key ist abgelaufen
0002 - Die Systemdaten passen nicht zum eingetragenen Schlüssel
3xxx - Fehler aus Socket-Programm
3425 - Ein ferner Host hat den Verbindungsversuch abgelehnt
3455 - Broken Pipe - Tritt normalerweise auf, wenn die Verbindung bereits hergestellt ist und dann abbricht. Im Testfall ist es aufgetreten, weil gar keine Verbindung hergestellt werden konnte
6xxx - Fehler aus directaccess4i Gateway Programm
6001 - Microsoft Access Datenbank konnte nicht geöffnet werden
6002 - Microsoft Access Datenbank Befehl konnte nicht ausgeführt werden
6003 - MySQL Datenbank konnte nicht geöffnet werden
6004 - MySQL Datenbank Befehl konnte nicht ausgeführt werden
6005 - ORACLE Datenbank konnte nicht geöffnet werden
6006 - ORACLE Datenbank Befehl konnte nicht ausgeführt werden
6007 - Microsoft SQL Server Datenbank konnte nicht geöffnet werden
6008 - Microsoft SQL Server Datenbank Befehl konnte nicht ausgeführt werden
6009 - IBM DB2 for IBM i Datenbank konnte nicht geöffnet werden
6010 - IBM DB2 for IBM i Datenbank Befehl konnte nicht ausgeführt werden
6011 - ODBC Datenbank konnte nicht geöffnet werden
6012 - ODBC Datenbank Befehl konnte nicht ausgeführt werden
7xxx - Fehler aus RPG-Programm
7001 - Kein Zeilenendezeichen übergeben §$
7002 - Keine SQL-Anweisung übergeben
7003 - Modus ungültig
7004 - Datenbank nicht unterstützt
7005 - Portnummer ist nicht numerisch
7006 - Bei Modus 03 muss auch EPPFODTAQ und EPLIBRARY gefüllt sein
CTDTAQ2PF – 1 A
Mit diesem Parameter können Sie directaccess4i anweisen, alle Daten, die er per SELECT (s.u.) aus der externen Datenbank gelesen hat, parallel in eine DTAQ UND eine physische Datenbankdatei zu schreiben.
Mögliche Werte:
J = JA – Daten werden nur in die physische Datei CTRCV geschrieben
N oder BLANK – Daten werden nur in DTAQ CTRECV geschrieben
CTTARGETIP – 200 A
Dieser Parameter enthält entweder die TCP/IP Adresse bzw. DNS Namen des externen Datenbankservers oder den Windows Pfadnamen einer Access Datenbank.
Im Falle von ODBC muss hier der Name des ODBC Treibers des directaccess4i Gateway PC's eingetragen sein.
WICHTIG: Der Parameter muss mit den Zeichen §$ abgeschlossen werden bzw. den Zeilenendezeichen, die Sie im directaccess4i Administrator oder WRKCDB Punkt 2 hinterlegt haben.
Beispiele:
192.168.1.1§$IBM IProduktion§$C:\Datenbank\MeineAccessDatenbank.mdb§$
CTUSER – 30 A
CTPASSWORD – 30 A
Wenn bei der externen Datenbank ein Benutzername und ein Kennwort benötigt werden, können diese hier eingetragen werden.
CTENHANCED – 30 A
Dieser Parameter ist für optionale Zusatzinformationen vorgesehen.
Bei ORACLE Datenbanken kann hier der Servicename angegeben werden. Bei Oracle 10g wird, wenn kein Servicename angegeben wird, XE als Standardwert benutzt.
Bei Mode 07 können Sie hier im Falle eines Exports in Excel z.B. den Sheet Namen angeben, der in der zu erstellenden Excel Tabelle erstellt und verwendet werden soll.
Bei der IBM DB2 für Linux, Unix und Windows müssen Sie hier z.B. den Namen der Datenbank angeben.
CTPFODTAQ – 20 A
Zusammen mit dem Modus 03 müssen Sie hier den Namen der extern beschriebenen Datenbankdatei auf der IBM i angeben, in die die SELECT Ergebnisdaten geschrieben werden.
Bei Modus 02 können Sie hier den Namen einer eigenen DTAQ eintragen, in die die Daten von directaccess4i zurückgegeben werden.
Bei Modus 01 können Sie hier den Namen einer eigenen DTAQ eintragen, in welche Daten, die mittels SELECT zurück geliefert werden, geschrieben werden.
Damit kann z.B. für jede Bildschirmsitzung eine DTAQ angelegt werden, wenn directaccess4i im Dialog verwendet werden soll.
CTLIBRARY – 10 A
Hier muss der Namen der Bibliothek stehen, für die DTAQ oder physische Datei aus dem vorherigen Parameter CTPFODTAQ.
CTSQLCMD – 32000 A
Last but not least – der Parameter, der den SQL Befehl enthält.
Sie müssen hier den SQL Befehl so angeben, wie er von der externen Datenbank erwartet wird.
D.h. eine MySQL Datenbank hat u.U. eine andere Schreibweise für div. Angaben, als eine Microsoft SQL Server Datenbank.
WICHTIG: Der Parameter muss ebenfalls mit den Zeilenendezeichen (Standard §$) abgeschlossen
werden, die Sie im directaccess4i Administrator bzw. WRKDIRACC Punkt 2 eingetragen haben.