-
Remote Funktionen mit MS Access aufrufen
Guten Tag,
ich möchte mich per ADODB von MS Access aus eine Verbindung zur AS400 öffnen und anschließend eine Funktion mit mehreren Parameter aufrufen, die mir anschließend Werte zurückgibt.
Wie man eine Verbindung aufbaut, das weiß ich bereits nur das mit den Funktionen klappt noch nicht so ganz.
Hier der Code:
Code:
Public Function fct_getDataRelist(strIPAS400 As String, strIPUSER As String, strIPPASS As String)
Dim cnAS400 As ADODB.Connection, cmdAS400SQL As ADODB.Command, rsAS400 As ADODB.Recordset
Set cnAS400 = CreateObject("ADODB.Connection")
cnAS400.Provider = "IBMDA400"
cnAS400.Properties("data source") = strIPAS400
cnAS400.Properties(2) = strIPUSER
cnAS400.Properties("Password") = strIPPASS
cnAS400.Open
Set cmdAS400SQL = CreateObject("ADODB.Command")
Set rsAS400 = CreateObject("ADODB.recordset")
rsAS400.CursorType = adOpenDynamic
rsAS400.CursorLocation = adUseServer
rsAS400.LockType = adLockReadOnly
Set cmdAS400SQL.ActiveConnection = cnAS400
cmdAS400SQL.CommandText = "{call ILS_ABRUF.ILS_ADD_Abrufpack (?, ?, ?)}"
cmdAS400SQL.CommandType = adCmdText
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nPackStueckId", adInteger, adParamInput)
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nAbrufId", adInteger, adParamInputOutput)
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nError", adInteger, adParamOutput)
Set rsAS400 = cmdAS400SQL.Execute
Do Until rsAS400.EOF = True
Debug.Print "Test - Datensätze sind vorhanden."
rsAS400.MoveNext
Loop
End Function
Wäre nett wenn mir jemand helfen könnte . Ist wichtig.
danke
thomas.
-
1. Statt CreateObject kannst du auch einfach new verwenden:
set cnAS400 = new ADODB.Connection
2. Returnwerte werden nur bei SQL-Prozeduren unterstützt, ansonsten muss man die Objekt-API's und Konverter-API's verwenden.
Also:
Für jedes Programm, dass du aufrufen willst, musst du einen "Create Procedure" mit den jeweiligen In/Out-Parametern definieren.
-
Hallo,
vielen dank für die schnelle Rückmeldung. Nur Ich hab sowas nicht nie wirklich gemacht, da ich meistens nur Datensätze lese.
Können wir vielleicht meine Funktion mal so umändern das ich ein Beispiel habe?
Das AS400 Programm kann ja Pseudo sein.
-
hi, du kannst schon ein select auf eine funktion machen
2 möglichkeiten::
1) *) die funktion muss als rückgabewert eine table beinhalten
*) die syntax sieht dann so aus:
select * from table (myfunction ('xxx', 333)) tab1
2) select function ('xxx', 333) sp1 from sysibm/sysdummy1
lg andreas
-
Also es könnte ungefähr so aus sehen, du musst das nur für dein Programm adaptieren
SQL:
CREATE PROCEDURE USMOD_16/ORAPERIODDATES
(IN FIRM VARCHAR(1)
,IN WKNR VARCHAR(3)
,IN ACTDATE DATE
,OUT PERIODE DECIMAL(6, 0)
,OUT FROMDATE DATE
,OUT TODATE DATE
)
LANGUAGE RPGLE
DETERMINISTIC
READS SQL DATA
EXTERNAL NAME 'USMOD_16/ORAPERDAT'
PARAMETER STYLE SQL
ILERPG:
hactgrp(*caller) dftactgrp(*no) datfmt(*iso)
d RHFirma s 1 varying
d RHWerk s 3 varying
d RHActDate s d
d RHPeriode s 6p 0
d RHFromDate s d
d RHToDate s d
d RHFirma_i s 5i 0
d RHWerk_i s 5i 0
d RHActDate_i s 5i 0
d RHPeriode_i s 5i 0
d RHFromDate_i s 5i 0
d RHToDate_i s 5i 0
d SQLStateX s 5
d FuncName s 139 varying
d SpecName s 128 varying
d DiagMsg s 70 varying
c *entry plist
c parm RHFirma
c parm RHWerk
c parm RHActDate
c parm RHPeriode
c parm RHFromDate
c parm RHToDate
c parm RHFirma_i
c parm RHWerk_i
c parm RHActDate_i
c parm RHPeriode_i
c parm RHFromDate_i
c parm RHToDate_i
c parm SQLStateX
c parm FuncName
c parm SpecName
c parm DiagMsg
Die _i-Variablen sind NULL-Flags
-1 = NULL
0 = Wert angegeben
Für jeden Parameter gibt es zusätzlich einen NULL-Flagparameter.
-
@Andreas
Funktionen können aber nur 1 Wert zurückgeben und, wie du schon sagst, muss ich einen Select verwenden.
-
.. es sei denn, es ist eine UDTF (User defined Table Function.
BTW: eine Function lässt sich immer in ein Select maskieren als: select myFunc(...) as hugo from sysibm.sysdummy1 und dann steht das Ergebnis in hugo drin.
Ansonsten finde ich Parameterstyle general einfacher zu handeln, da ist die SQL Schnittstelle identisch mit der Programm Schnittstelle.
D*B
Zitat von Fuerchau
@Andreas
Funktionen können aber nur 1 Wert zurückgeben und, wie du schon sagst, muss ich einen Select verwenden.
-
Ok,
das mit dem Select-Function hab ich verstanden!
1 Wert, mehr nicht... ist zumindest etwas
dann würd es so aussehen??
Code:
Public Function fct_getDataRelist(strIPAS400 As String, strIPUSER As String, strIPPASS As String)
Dim cnAS400 As ADODB.Connection, cmdAS400SQL As ADODB.Command, rsAS400 As ADODB.Recordset
Set cnAS400 = CreateObject("ADODB.Connection")
cnAS400.Provider = "IBMDA400"
cnAS400.Properties("data source") = strIPAS400
cnAS400.Properties(2) = strIPUSER
cnAS400.Properties("Password") = strIPPASS
cnAS400.Open
Set cmdAS400SQL = CreateObject("ADODB.Command")
Set rsAS400 = CreateObject("ADODB.recordset")
rsAS400.CursorType = adOpenDynamic
rsAS400.CursorLocation = adUseServer
rsAS400.LockType = adLockReadOnly
Set cmdAS400SQL.ActiveConnection = cnAS400
cmdAS400SQL.CommandText = "select myFunc(...) as hugo from sysibm.sysdummy1"
cmdAS400SQL.CommandType = adCmdText
Set rsAS400 = cmdAS400SQL.Execute
Do Until rsAS400.EOF = True
CurrentDb.Execute "INSERT INTO tbl_ACCESSTABELLE (ACCESTABELLEWERT) VALUES " _
& "('" & rsAS400("HUGO") & "')"
rsAS400.MoveNext
Loop
End Function
Richtig?
Aber wie ich das andere genaue nutzen soll mit den mehreren Parametern, versteh ich nicht..., tut mir leid bin da noch nicht so fit :<.
thomas.
-
Code:
cmdAS400SQL.CommandText = "{select myFunc(?, ?, ?) as hugo from sysibm.sysdummy1}"
cmdAS400SQL.CommandType = adCmdText
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nPackStueckId", adInteger, adParamInput)
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nAbrufId", adInteger, adParamInputOutput)
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nError", adInteger, adParamOutput)
eh so wie du es vorher schon gemacht hattest.
-
Wo bekomme ich dann parameter zurück?
bei Append sagt er mir das es nicht optional ist? muss ich das "=" rausnehmen?
-
mit
Set rsAS400 = cmdAS400SQL.Execute
bekommst du einen datensatz zurück.
wie die syntax in vb aussehen muss, weis ich leider nicht. entweder mit F1 auf das objekt bzw. in der MSDN nachschauen gehen oder googlen.
vlt. gibts aber noch jemandem der sich da genau auskennt.
-
Ok,
können wir das kurz nochmal aufschlüsseln?
Aufruf der Funktion!, Die Fragezeichen in den Klammern bedeuten das hier Parameter eingefügt werden, oder?
Code:
cmdAS400SQL.CommandText = "{call ILS_ABRUF.ILS_ADD_Abrufpack (?, ?, ?)}"
Insgesamt muss ich 3 Parameter übergeben?! Das mache ich mit:
Die erste Stelle ist der Wert, die Zweite die Deklaration (integer), und das dritte sagt aus ich füge einen Parameter hinzu (adParamInput)? Richtig?
Code:
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nPackStueckId", adInteger, adParamInput)
2. Parameter?
Code:
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nAbrufId", adInteger, adParamInputOutput)
3. Parameter?
Code:
cmdAS400SQL.Parameters.Append = cmdAS400SQL.CreateParameter("@nError", adInteger, adParamOutput)
Similar Threads
-
By olafu in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-10-06, 08:13
-
By andreas.lundschien in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-09-06, 14:55
-
By User in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 26-01-05, 20:52
-
By reraru in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 18-01-05, 13:06
-
By Salvi in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 21-05-04, 07:44
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks