Oke: Access und VB, SELECT-Ergebnis in variable speichern

Guten Tag liebe Forumbesucher,

ich habe ein kleines Problem zu dem ich noch kein Beispiel oder einen Lösungshinweis im "Netz" gefunden habe.

zu meinem Problem:

Ich habe eine Tabelle "Kunden" mit den Spalten "KdNr", "Nachname", "Straße", ...

ich möchte einer Variable "var_kundennummer" das Ergebnis meiner Select Anweisung geben.
Sinngemäß etwa so:
---------Anfang----------
var_kundennummer = SELECT kdNr FROM Kunden WHERE Nachname = "var_nachname", LIMIT 1
---------Ende-----------
Ich bekomme es aber nicht VB / Access tauglich aufgeschrieben.
Wenn mir da jemand helfen kann.

einen Insert Auftrag hab ich schon hinbekommen da ich beispiele dazu gefunden habe.
---VB Code Anfang---
CurrentDb.Execute ("INSERT INTO Kunden (Nachname, Wohnort, Straße, Telefon, EMail, Rabatt) VALUES ('" & var_nachName & "', '" & var_Wohnort & "', '" & var_Strasse & "', '" & var_Telefon & "', '" & var_EMail & "', " & var_Rabatt & ");")
---VB Code Ende ---

PS: mein eigentliches Ziel ist es den Autowert ("KdNr") des gerade eingetragenen Datensatzes in einer variable zu speichern. Vielleicht gibt es ja auch eine einfachere Lösung!?

Danke schon mal für euer/dein bemühen

  1. Hello,

    die Ab-Werk-Methode für Arbeiten mit Datensätzen sind Recordsets. Eine Lösung könnte also etwa so aussehen:
    Dim rs As Recordset ' deklarieren
    Set rs = CurrentDb.OpenRecordset("SELECT kdNr FROM Kunden WHER Nachname = '" & var_nachname & "'") ' RS öffnen und zuweisen
    If (rs.EOF = false) then ' falls es mindestens einen Treffer gab...
       var_kundennummer = rs.Fields("kdNr") ' Wert des Felds kdNr in die Variable werfen; Achtung: Falls NULL ein möglicher Eintrag ist wird es komplizierter
    end if

    MfG
    Rouven

    --
    -------------------
    Inter Arma Enim Silent Leges  --  Cicero
    1. Wert des Felds kdNr in die Variable werfen; Achtung: Falls NULL ein möglicher Eintrag ist wird es komplizierter

      Eine Null ist Gott sei dank nicht möglich ;). Der Autowert ist ja immer >0

      Danke für die schnelle Antwort, ich werds mal ausprobieren

      1. Hello,

        Wert des Felds kdNr in die Variable werfen; Achtung: Falls NULL ein möglicher Eintrag ist wird es komplizierter

        ich geb dir die Warnung trotzdem, weil ich selbst viel zu oft in die Falle gelaufen bin:
        Man könnte instinktiv mit Java-Wissen an folgendes Konstrukt denken:
        var_xyz = Iif(IsNull(feld), defaultWert, macheIrgendwasMitWert(feld))

        Iif in VB(A) ist tückisch - auch wenn die Bedingung false ist wird der else-Zweig IMMER ausgeführt, anders herum ebenfalls, Iif führt IMMER beide Zweige aus, verwirft aber einen Rückgabewert, d.h.:

        1. falls macheIrgendwasMitWert nicht mit NULL umgehen kann, kommt es zu einem Fehler
        2. falls macheIrgendwasMitWert z.B. eine globale Variable ändert, dann passiert diese Änderung OBWOHL der THEN-Zweig gewählt wird.

        MfG
        Rouven

        --
        -------------------
        Inter Arma Enim Silent Leges  --  Cicero
        1. Leider klappt es noch nicht.

          Er meckert mir an, dass die Typen unverträglich seien.
          Laut des Debuggers müsste es diese Zeile sein:

          Set rs = CurrentDb.OpenRecordset("SELECT KdNr FROM Kunden WHERE Nachname = '" & var_nachName & "'") ' RS öffnen und zuweisen

          Was kann da falsch sein

          1. Hello,

            Was kann da falsch sein

            versuch mal das rs explizit als DAO.Recordset zu Dim'en, falls sich Access dann beschwert setz eine Referenz auf die Microsoft Data Object (DAO) Library. es kann sein, dass sich ADO und DAO (Standard unter Access) gerade in die Quere kommen.

            MfG
            Rouven

            --
            -------------------
            When the only tool you've got is a hammer, all problems start to look like nails.