Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Spirit am Juni 05, 2016, 11:42:47

Titel: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: Spirit am Juni 05, 2016, 11:42:47
Hallo Gemeinde.
Ich beschäftige mich seit ein paar Tagen mit Access (Access 2016) und bin somit absoluter Neueinsteiger.
Das Problem über dem ich gerade brüte ist, wie ich beim Laden des Formulars eine Tabellenzelle auslesen kann, diesen Wert verändere (bis hier her klappt's schon) und dann diesen veränderten Wert wieder in dieselbe Tabellenzelle zurückschreibe. Und genau daran hapert's momentan.
Das Textfeld "KuNr" im Formular soll gefüllt werden mit einer Kundennummer, die in der Tabelle "tblLetzteKuNr" im Feld "Nummer" gespeichert ist.
Folgenden Code habe ich geschrieben:
Private Sub Form_Load()

    Dim varX As Variant
    Dim varKuNr As String
   
    varX = DLookup("[Nummer]", "tblLetzteKuNr", "[ID] = 1")
    varX = varX + 1
    '---------------------------
    'Hier soll varX wieder in die Tabelle zurückgeschrieben werden
    '---------------------------
    varKuNr = CStr(varX)
    'Jetzt wird die Variable auf eine Standardlänge von 6 Zeichen gebracht, indem links mit Nullen aufgefüllt wird.
    varKuNr = auffüllen(varKuNr, "links", 6, "0")
    Me.KuNr = varKuNr

End Sub


Hier der Code der Funktion "auffüllen":
Function auffüllen(zellwert As String, orientierung As String, laenge As Long, fuellzeichen As String)
    Dim i, j, n As Integer
    Dim fuellstring As String
   
    n = Len(zellwert)
    j = laenge - n
   
    For i = 1 To j
        fuellstring = fuellstring & fuellzeichen
    Next i
   
    If orientierung = "rechts" Then
        auffüllen = zellwert & fuellstring
    Else
        auffüllen = fuellstring & zellwert
    End If
End Function


Ich habe keinen Schimmer, wie ich das anpacken soll.

Für einen kleinen Schups in die Richtige Richtung wäre ich dankbar.

VG Ralf
Titel: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: DF6GL am Juni 05, 2016, 18:05:29
Hallo,

hier erhebt sich auch die Frage, wofür das gut sein soll...

Beschreibe mal das Ziel, das mit diesem Vorgehen anvisiert ist....
Titel: Re: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: Spirit am Juni 05, 2016, 19:39:24
Hi Franz.
Der Sinn hinter dieser Übung ist, die zuletzt vergebene Kundennummer in der Tabelle zu speichern.
Im Formular will ich diese auslesen, das Formularfeld für die Kundennummer automatisch mit der um eins erhöhten Kundennummer befüllen und die neu vergebene Kundennummer wieder in der Tabelle speichern.
Sollte ich hier zu kompliziert denken, bin ich natürlich auch für eine bessere Lösung für mein Problem dankbar.
VG Ralf
Titel: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: DF6GL am Juni 05, 2016, 20:11:14
Hallo,

ja, Du denkst zu kompliziert...   ;)  (und schwebst noch in der Excel-Welt)

Der Vorgang ist mir klar,  nur welchen Geschäftsvorgang willst Du damit behandeln?

Einen neuen Kunden anlegen (d. H. eine Kundennummer für den neuen Kunden vergeben)? Das geht normalerweise wesentlich einfacher, bzw. sogar ganz automatisch und praktisch ohne Code....

Zeige mal den Screenshot des Beziehungsfensters. Wenn dort die Tabellen noch nicht hinzugefügt sind, hole das nach und erstelle anschliessend den Screenshot.

Beschreibe dann, welchen Arbeitsablauf passieren soll.
Titel: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: MzKlMu am Juni 05, 2016, 20:17:04
Hallo,
warum nimmst Du für die Kundennummer nicht einfach einen Autowert?
Dann kannst Du Dir den kompletten VBA Code sparen. Ein Autowert zählt automatisch hoch.
Eine Tabelle "tblLetzteKuNr" íst auch bei Deiner Version nicht notwendig, die letzte KuNr kann einfach mit DMax ermittelt werden.
Auch das Auffüllen ist nicht notwendig, das lässt sich einfach mit dem Format für das Feld erledigen.
Im Formularereignis "Beim Anzeigen":
If Me.NewRecord = True Then
    Me.KuNr = Format(DMax("KuNr","Kundentabelle") + 1,"000000")
End If


Das ersetzt Deinen kompletten oben gezeigten Code.

Titel: Re: In Form_Load() eine Tabellenzelle auslesen, verändern und ...
Beitrag von: Beaker s.a. am Juni 05, 2016, 21:57:26
Hallo Ralf,
Abgesehen von Klaus' und Franz' richtigen Hinweisen, ginge das in dem
du nicht per DLookup die letzte Nummer bestimmst, sondern einen
Recordset auf die Tabelle tblLetzteKuNr öffnest. Dann kannst du die
letzte Nummer per
varX = rs.Fields("Nummer")
auslesen, und per
rs.edit
    rs.Fields("Nummer") = varKuNr
rs.update

zurück schreiben.
I.Ü. Warum verwendest du für eine Nummer ein Feld vom Typ Text?
Vorangestellte Nullen kannst du doch bei der Ausgabe generieren.

gruss ekkehard
Titel: Re: In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben
Beitrag von: Spirit am Juni 06, 2016, 11:12:30
Vielen Dank euch allen für eure Antworten.
Ich werde mich da mal durcharbeiten.
Sollte ich nicht weiterkommen, melde ich mich wieder.

VG Ralf