Hallo Leute,
ich habe folgendes Problem.
In einem Formular rufe ich unterandern zwei Werte auf, die nicht aus der Datenherkunft des Formulars stammen.
Die beiden Werte kommen aus der
Tabelle Artikel und heißen
Artikel und BezLabel.
Der Wert Artikel ist (eindeutig) aber der Wert BezLabel ändert sich alle zwei Tage und wir brauchen ihn ein paar hundert Mal am Tag. Nun möchte ich ihn nach dem ändern in der Tabelle Artikel aktualisieren so das er beim nächsten Aufruf aktuell ist.
Nach langen Google habe ich gedacht ich setze eine Ereignisprozedur (Bei Geändert) mit folgenden Code (Beispiel):
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT * FROM Tabelle")
rs.FindFirst "DeinFeld" = DeinWert ' richtigen Datensatz suchen
If Not rs.NoMatch Then
rs.Edit
rs!feld2 = Me!Texfeld
rs.Update
End If
rs.Close
Set rs = Nothing
DB.Close
Set DB = Nothing
Leider ohne erfolg egal wie ich es verändere.
Bekomme immer einen Fehler in der Zeile:
rs.FindFirst "DeinFeld" = DeinWert ' richtigen Datensatz suchen
Was bitte muss ich wo und wie eintragen oder liege ich komplett falsch.
Danke für eure Hilfe.
Chappi
Hallo,
so etwas würde man ohne VBA mit einer einfachen Aktualisierungsabfrage machen.
Aber, wenn ich das richtig verstanden dürfte das ganze Vorhaben ohnehin nicht notwendig sein.
Du kannst einfach die 2. Tabelle mit in die Datenherkunft aufnehmen mit einer Verknüpfung über den Artikel.
Dann hast Du das Feld "BezLabe" stets aktuell zur Anzeige im Formular.
Eine Aktualisierung ist nicht notwendig. Das Feld "BezLabe" in der 1.Tabelle kannst Du dann ersatzlos löschen.
Wie kriegst Du denn die Tabelle mit den neuen Werten für "BezLabe" ?
Hallo Klaus,
ich glaube ich muss etwas weiter ausholen.
Leider funktioniert deine Lösung bei mir nicht so.
Das Feld BezLabel wird in dem Formular aus zwei Werten, die im Artikelstamm stehen zusammengefügt und mit Tagesspezifischen Werten ergänzt und dann zu verschiedenen Aufträgen und Kunden gespeichert.
Deswegen möchte ich den Umweg über ein drittes Feld machen um mir so Tipparbeit zu ersparen.
Die Werte kommen so in mein Formular
Private Sub Artikel_AfterUpdate()
If Me.Artikel.Column(0) <> "" Then
Me.Bezeichnung = Me.Artikel.Column(1) (Bezeichnung + Bezeichnung2 sind ungebunden)
Me.Bezeichnung2 = Me.Artikel.Column(2)
Me.BezLabel = Me.Artikel.Column(3)
End If
If Me.BezLabel = "" Then
Me.BezLabel = Form_AquaKunde.Bezeichnung & " " & vbCrLf & Form_AquaKunde.Bezeichnung2
Else
Me.cm.SetFocus
End If
End Sub
Oder fals nötig über eine Schaltfläche':
Private Sub Vorschlag_Click()
Me.BezLabelAqua = Form_AquaKunde.Bezeichnung & " " & vbCrLf & Form_AquaKunde.Bezeichnung2
End Sub
Daher kann ich das BezLabel in der zweiten Tabelle nicht wie du vorgeschlagen hast entfernen.
Ich hoffe das war nicht zu umständlich erklärt.
Hallo,
eine Datenbankregel sagt:
Felder die man jederzeit aus anderen Werten zusammensetzen kann, werden im Regelfall nicht gespeichert. Und ich sehe hier keinen Grund von der Regel abzuweichen.
Daher halte ich nach wie vor das ganze Vorhaben für überflüssig.
In einer Abfrage kannst Du beide Tabellen aufnehmen und die Verknüpfung über den Artikel herstellen. Und in dieser Abfrage kannst Du das Feld "BezLabel" dann als berechnetes Feld zusammensetzen. VBA ist dazu nicht notwendig, keinen Buchstaben.
Und das berechnet Feld hat gegenüber dem Feld in der Tabelle keine Nachteile, im Gegenteil, es ist automatisch stets aktuell.
Danke Klaus,
manchmal steht mann auf dem Schlauch.
Ich habe es wie du gesagt hast einfach über eine Verknüpfung gelöst.
Bis dann
Chappi