Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

In Form_Load() eine Tabellenzelle auslesen, verändern und wieder zurückschreiben

Begonnen von Spirit, Juni 05, 2016, 11:42:47

⏪ vorheriges - nächstes ⏩

Spirit

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

DF6GL

Hallo,

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

Beschreibe mal das Ziel, das mit diesem Vorgehen anvisiert ist....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Spirit

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

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

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.

Gruß Klaus

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Spirit

Vielen Dank euch allen für eure Antworten.
Ich werde mich da mal durcharbeiten.
Sollte ich nicht weiterkommen, melde ich mich wieder.

VG Ralf