[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2004
    Beiträge
    95

    API QSYCHGPW in Visual Basic 6

    Hallo Zusammen,

    ich versuche krampfhaft das API QSYCHGPW in einem VB Programm zum Laufen zu bekommen. Die Verbindung zur AS400 funktioniert, sie wird mit einem User durchgeführt der *SECOFR ist. Es wird kein Fehler ausgegeben, aber das Passwort wird nicht geändert. Vielleicht hat von euch einer eine Idee.

    Hier der Code:

    Dim cniSeries2 As New ADODB.Connection
    Dim cm_QSYS_QSYCHGPW As New ADODB.Command
    CnString$ = "Provider=IBMDA400;Data Source=10.1.1.1;User ID=xxxx;Password=xxxxx"
    cniSeries2.Open CnString, "", ""
    Set cm_QSYS_QSYCHGPW.ActiveConnection = cniSeries2
    cm_QSYS_QSYCHGPW.CommandText = "{{CALL /QSYS.LIB/QSYS.LIB/QSYCHGPW.PGM(?,?,?,?)}}"
    cm_QSYS_QSYCHGPW.Prepared = True
    cm_QSYS_QSYCHGPW.Parameters.Append cm_QSYS_QSYCHGPW.CreateParameter("USERID", adChar, adParamInput, 10)
    cm_QSYS_QSYCHGPW.Parameters.Append cm_QSYS_QSYCHGPW.CreateParameter("CURPWD", adChar, adParamInput, 10)
    cm_QSYS_QSYCHGPW.Parameters.Append cm_QSYS_QSYCHGPW.CreateParameter("NEWPWD", adChar, adParamInput, 10)
    cm_QSYS_QSYCHGPW.Parameters.Append cm_QSYS_QSYCHGPW.CreateParameter("RETURN", adChar, adParamInputOutput, 12)
    cm_QSYS_QSYCHGPW.Parameters.Item(0) = Main.TextUser
    cm_QSYS_QSYCHGPW.Parameters.Item(1) = Main.TextPassword
    cm_QSYS_QSYCHGPW.Parameters.Item(2) = Main.TextNewPassword
    On Error Resume Next
    cm_QSYS_QSYCHGPW.Execute

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Der 4. Parameter muss als Struktur übergeben werden. Dabei darf keinerlei Übersetzung stattfinden. Die Struktur (Error-Code-Variable) ist folgendermassen aufgebaut:
    1-4 = 4-Byte Binary Länge des gesamten Puffers
    5-8 = 4-Byte Binary Länge des verfügbaren Puffers
    9-15 = 7-Byte MSGID (CPF-Nachricht)
    16 = Reserve
    17-n = Daten zur MSGID

    Die Daten werden in EBCDIC zurückgegeben.
    Um den Parameter korrekt zu übergeben musst du als Parameter-Typ adBinary wählen und die Struktur vorher entsprechend aufbereiten.

    Besser für den Aufruf von Programmen (incl. ASCII-EBCDIC-Wandlung) ist das CWBX-OCX mit Struktur-/String-/Long-Konvertern.

    Wenn du Fehler ignorieren willst (dann allerdings ohne Kontrolle, ob das Kennwort tatsächlich geändert wurde) muss der 4. Parameter (adBinary) mit String$(8, vbNullChar) übergeben werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Dec 2000
    Beiträge
    450
    Muss es denn unbedingt der API sein. Es geht doch auch so:
    Code:
      ' Variablen deklarieren
      Dim systemNames As New cwbx.systemNames
      Dim as400 As New cwbx.AS400System
      On Error GoTo failed
      ' Standardsystem abrufen und zur Initialisierung des Objekts AS400System
      ' verwenden
      as400.Define systemNames.DefaultSystem
      ' Versuchen, das Kennwort für Benutzer "user" auf dem Standardsystem zu ändern
      as400.ChangePassword "user", "oldpw", "newpw"
      MsgBox "Kennwort erfolgreich geändert"
      Exit Sub
    failed:
      ' Fehlerinformationen anzeigen
      MsgBox "Fehlernummer = " & Err.Number & vbCr & _
             "Fehlerbeschreibung = " & Err.Description & vbCr & _
             "Fehlerquelle = " & Err.Source & vbCr & _
             "iSeries Access für Windows-Rückkehrcode = " & as400.Errors.ReturnCode
      ' Alle zurückgegebenen iSeries Access für Windows-Nachrichten anzeigen
      For Each cwbErr In as400.Errors
        MsgBox "iSeries Access für Windows-Nachrichtentext: " & vbCr & cwbErr.Text
      Next
    Das ist ein Beispiel aus den Activex Automatisierungsobjekten.

    Bruno

Similar Threads

  1. AS400 Userliste in Visual Basic
    By Der_Unwissende in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-09-06, 10:10
  2. API für die Ermittlung aktiver Jobs
    By lyrics in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 29-08-06, 09:03
  3. Problem beim Datenbankzugriff mit Visual Basic
    By schojo in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-04-05, 14:53
  4. Zugriff OLE DB AS400/DB2 und Visual Basic
    By HPKahn in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-02-05, 09:23
  5. Mit Visual Basic alle Register eines Excel Files herausfinden
    By thoughtless in forum NEWSboard Windows
    Antworten: 0
    Letzter Beitrag: 10-06-04, 10:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •