Problem mit VBA unter Access

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

ich stehe gerade vor einem kleinen Problem:

Ich habe bei meinem Access Formular das Feld Holzart und das Feld Durchläufer.

Momentan habe ich eine DB Abfrage die Prüft, ob eine Holzart einen Klartext hat und ob Sie ein Durchläuferposten ist.

Wenn Ja, wird im Feld Durchläufer ein Ja eingetragen.

Allerdings kann ich mit meinem aktuellen Code das Feld Durchläufer nicht überschreiben sondern es wird immer wieder auf den Wert aus der Datenbank gesetzt.

Hier der Code:

Code:
Private Sub Holzart_AfterUpdate()
  Set rs = CurrentDb.OpenRecordset("SELECT Beschreibung,Durchläufer FROM artikel WHERE Artikel = '" & Me.Holzart & "'")
  If Not rs.EOF Then
  Me.Holzartklartext = rs("Beschreibung")
  Me.Durchläufer = rs("Durchläufer")
  End If
  rs.Close
  Set rs = Nothing
End Sub

Kann ich jetzt das irgendwie bewerkstelligen, das beides Funktioniert? Also sowohl das manuelle Überschreiben als auch die Datenbank Abfrage?

Stehe da ein wenig auf dem Schlauch und finde nicht wirklich eine Lösung.

Kann mir da eventuell wer helfen?
 
Moin,

du setzt zwar die Werte
Code:
 Me.Holzartklartext = rs("Beschreibung")
  Me.Durchläufer = rs("Durchläufer")
machst aber kein Update in der DB (zumindest sieht man es hier nicht) !!

Gruß Klaus
 
Visual Basic:
Me.Durchläufer = NZ(Me.Durchläufer, rs("Durchläufer"))
'oder
IF IsNull(Me.Durchläufer) Then Me.Durchläufer = rs("Durchläufer")

Wenn das Feld als String definiert ist, halt nicht nach Null prüfen sondern nach Emtpy
 
Moin,

ah ja, sorry, hatte diesen Satz
Allerdings kann ich mit meinem aktuellen Code das Feld Durchläufer nicht überschreiben sondern es wird immer wieder auf den Wert aus der Datenbank gesetzt.
wohl falsch aufgefasst ;)

Gut - was genau ist Me und was machst Du damit (oder werden diese Werte schon nciht richtig gefüllt?) !

Gruß Klaus
 
Sorry für die späte Antwort.

@Yaslaw leider funktioniert keiner der beiden Ansätze, Durchläufer wird immer noch auf leer gesetzt sobald ich etwas eingebe.

@vfl_freak Me ist, soweit ich es weis, die Tabelle bzw. das Formular, bitte um Korrektur falls falsch.
 
Me wird das Formular sein. Die Tabelle ist nie Me, da der Tabelle kein VBA hinterlegt ist.

Und hast du auch mal gegen Empty anstelle von Null geprüft?
Visual Basic:
IF Trim(Nz(Me.Durchläufer)) = "" Then Me.Durchläufer = rs("Durchläufer")

Was für ein Datentyp ist der Durchläufer?
 
Datentyp ist Text.

Code:
Private Sub Durchläufer_AfterUpdate()
  If Not IsEmpty(alteDl) Then
  Me.Durchläufer = alteDl
  Else
  Set rs = CurrentDb.OpenRecordset("SELECT Durchläufer FROM artikel WHERE Artikel = '" & Me.Holzart & "'")
  If Not rs.EOF Then
  If Trim(Nz(Me.Durchläufer)) = "" Then Me.Durchläufer = rs("Durchläufer")
  End If
  rs.Close
  Set rs = Nothing
  End If
End Sub

Das ist mein aktueller Code.
Leider nach wie vor dasselbe Verhalten: Ich gebe eine Holzart ein, sobald ich etwas anderes bei Durchläufer eingebe, wie in der Tabelle hinterlegt, wird der Wert auf den der Tabelle gesetzt, unabhängig von dem , was ich Eingebe.
 
Zuletzt bearbeitet:
Du überschreibst zuerst mit alteDl. Was steht da drin?

Zudem. Um ein Wert auszulesen reicht ein DLookup anstelle eines Recordsets
 

Neue Beiträge

Zurück