[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2012
    Beiträge
    5

    AS400 Kennwort mit VBA prüfen

    Ich habe in einem VBA verschiedene SQL's und will nicht bei jeder Verbindung mit der AS400 meinen Benutzer und das Kennwort eingeben. Wie kann ich in VB das ganze prüfen und nur einmal eingeben. Ich habe eine Routine erstellt wenn aber das Kennwort falsch erfaßt wurde, muß dieses immer wieder neu bei jeder SQL-Verbindung eingegeben werden. Ich möchte Benutzer und Kennwort auf der AS400 prüfen und wenn diese falsch sind nur einen Fehlercode von der AS400 erhalten. Es soll dort nicht korrigiert werden dürfen.
    Hier die Source
    Private Sub cmdOK_Click()
    Dim system As New cwbx.AS400System
    system.Define "xxxxxxxx"
    system.UserId = tbBenutzer
    system.Password = tbKennwort
    system.IPAddress = "nn.nn.nn.nn"
    On Error GoTo weiter
    system.Connect (cwbcoServiceODBC)
    weiter:
    If (system.IsConnected(cwbcoServiceODBC)) Then

    Else
    MsgBox "Fehler: Benutzername oder Kennwort falsch. Programmende"
    Application.Quit
    End If

    Const CN_STR = "ODBC;Driver=iSeries Access ODBC Driver;SYSTEM=system.IPAddress ;DefaultLibrari;UID="
    Dim sSQL1, sEOF1 As String
    Dim cnADO1 As DAO.Connection
    Dim rsDaten1 As DAO.Recordset
    Dim wrkODBC1 As DAO.Workspace
    Dim iPos2, iPos3 As Integer
    Dim Firmen(99) As String
    Dim Firmentext(99) As String

    sSQL1 = "select fifirm, fiktad, fiortn" & _
    " from cmdlib.ufirmp " & _
    " order by fifirm, fiortn asc "

    Set wrkODBC1 = DAO.CreateWorkspace("IBM/AS400", "", "", dbUseODBC)
    Set cnADO1 = wrkODBC1.OpenConnection("", dbDriverCompleteRequired, False, CN_STR & system.UserId & "; Pwd =" & tbKennwort)
    Set rsDaten1 = cnADO1.Database.OpenRecordset(sSQL1, dbOpenDynamic)

    rsDaten1.MoveFirst
    iPos3 = 0
    sEOF1 = ""

    While Not rsDaten1.EOF
    FrmAuswahl.lbFirma.AddItem (rsDaten1.Fields("fifirm") & " " & rsDaten1.Fields("fiktad").Value)
    Firmen(iPos3) = rsDaten1.Fields("fifirm").Value
    Firmentext(iPos3) = (rsDaten1.Fields("fifirm") & " " & rsDaten1.Fields("fiktad").Value)
    iPos3 = iPos3 + 1
    rsDaten1.MoveNext
    Wend
    rsDaten1.Close

    FrmAuswahl.Show
    End Sub

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ersetze
    dbDriverCompleteRequired
    durch
    dbDriverPromptNever (oder ähnlich)

    dann kommt kein Anmeldefenster und User/PWD muss in der Verbindungsfolge mitgegeben werden.

    Sind Benutzer/Kennwort falsch, schlägt der Open der Verbindung fehl.
    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
    Jul 2012
    Beiträge
    5
    Vielen Dank für die schnelle Antwort, leider habe ich auch hier die Anmeldemaske von der AS400 wenn ein falscher Benutzer oder das Kennwort nicht korrekt ist.
    Besteht die Möglichkeit, zu prüfen, ist die Anmeldung nicht OK, dann erhalte ich einen Fehlercode in einer Variablen

    Vielen Dank nochmals

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Hallo,

    für solche Zwecke hab ich für die Methode "Workbook.Open" eine kleine UserForm als Anmeldefenster erstellt, in die der Benutzer seinen Loginnamen und Kennwort eingeben muß.
    Damit erstelle ich dann folgendermaßen eine ADO-Connection:

    Set as400 = New ADODB.Connection
    as400.Open "Driver=iSeries Access ODBC Driver;CONNTYPE=2;TRANSLATE=1;SYSTEM=ISERIES;UID=" & user & ";PWD=" & password...

    Das Objekt "as400" verwende ich als globale Variable, so dass ich es je nach Bedarf benutzen kann.

    Gruß,
    KM

  5. #5
    Registriert seit
    Jul 2012
    Beiträge
    5
    Vielen Dank KM,
    aber auch hier erhalte ich jedesmal eine Anmedlung, wenn diese beim ersten mal fehlerhaft war.

  6. #6
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Hallo Pauli,

    ich hab jetzt noch nicht so recht verstanden was Du vorhast. In meinem Beispiel erscheint beim Öffnen der Excel-Tabelle als erstes ein Anmelde-Window. Wenn die Anmeldung korrekt ist, wird ein ADO.Connection-Objekt erstellt, das ich im weiteren Verlauf immer wieder ohne weitere Anmeldung verwenden kann. Wenn die Anmeldung nicht korrekt ist, bleibt das Anmelde-Window weiterhin bestehen mit dem Hinweis, dass eben ein Fehler bei der Anmeldung aufgetreten ist und der Benutzer aufgefordert wird die Logindaten zu korrigieren.

    Gruß,
    KM

  7. #7
    Registriert seit
    Jul 2012
    Beiträge
    5
    Hallo KM,
    Bei uns sind alle Benutzer über den Operations Navigator so eingestellt, dass diese sich jedesmal, wenn Sie einen Zugriff auf die AS400 starten anmelden müssen, das kann ich in VBA umgehen in dem ich ein eigenes Form "Anmeldefenster" erstellt habe. Im Connection-String gebe ich dann den Benutzer und das Kennwort aus meiner Form mit. Das funktioniert auch so ganz gut, wenn der Benutzer und das Kennwort beim ersten mal korrekt eingegeben wurden. Bei einer Falscheingabe übernimmt die AS400 die Anmeldeprozedur, was ich nicht möchte, weil mir die AS400 kein Flag mit gibt, dass die Anmeldung korrigiert wurde.

    Es ist nicht einfach, aber ich hoffe das ich mich verständlich ausgedrückt habe

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das leigt eben an der Einstellung:

    dbDriverCompleteRequired

    was dazu führt, dass bei Fehlern eben das Anmeldefenster kommt.
    Diesen Wert musst du mit einer Einstellung "dbDriverPromptNone" verhindern!
    Wobei ich den genauen Namen der Konstanten jetzt nicht kenne, den bekommst du aber per IntelliSence angezeigt.
    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

  9. #9
    Registriert seit
    Jul 2012
    Beiträge
    5
    Hallo,

    ich habe jetzt den richtigen Befehl gefunden.

    Die Zeile sieht jetzt so aus
    Set cnADO1 = wrkODBC1.OpenConnection("", dbDriverNoPrompt, False, CN_STR & tbBenutzer & "; Pwd =" & tbKennwort)

    und damit kann ich jetzt eine "ON Err" Abfrage starten und das ganze von vorne beginnen lassen

    Übrigens Error 13 = falsches Kennwort

    Vielen Dank an alle

Similar Threads

  1. Java JDBC Sperre
    By Xanas in forum NEWSboard Java
    Antworten: 11
    Letzter Beitrag: 29-11-10, 12:45
  2. Tape von einer AS400 von anderer AS400 aus nutzen?
    By hs in forum IBM i Hauptforum
    Antworten: 15
    Letzter Beitrag: 07-11-06, 19:28
  3. Druckereinrichtung auf AS400?
    By stephanr1 in forum NEWSboard Drucker
    Antworten: 7
    Letzter Beitrag: 20-07-06, 14:00
  4. Benutzer und Kennwort prüfen
    By Peet in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 20-11-05, 10:13
  5. AS400 Operatorin sucht Stelle im Raum Frankfurt
    By NixWisserin in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 15-02-05, 17:51

Tags for this Thread

Berechtigungen

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