Hallo,
Ich verwende die Methode Seek, um in der Tabelle „MeinTab“ den Satz mit dem Namen „Name“ zu finden, um dann ein Datenfeld in dem gefundenen Satz mit dem aktuellen Tagesdatum zu füllen.
Das Textfeld „NameR“ der Tabelle ist PrimaryKey.
Folgende Befehlsfolge läuft ab:
Set tbldef = dbOpenRecordset(„MeinTab“, dbOpenTable)
With tbldef
.Index = „NameR“
.Seek „=“, Name
if .NoMath Then
MsgBox …
Exit Sub
.Edit
.DatumFeld = Date
.Update
.Close
End With
Im Einzelschrittverfahren kann ich verfolgen, dass obige Befehle ohne Beanstandung ablaufen. Aber das erwartete Ergebnis trifft nicht ein: es wird immer nur das Datumfeld des ersten Tabellensatzes aktualisiert, egal, welchen Namen ich des Seek-Methode anbiete!
Warum??
Hallo Reinhard
Im Einzelschrittverfahren kann ich verfolgen, dass obige
Befehle ohne Beanstandung ablaufen.
Das glaube ich nicht… jedenfalls nicht mit den Syntax-/Tippfehlern
Aber das erwartete Ergebnis trifft nicht ein
Was ist das erwartete Ergebnis?
es wird immer nur das Datumfeld des
ersten Tabellensatzes aktualisiert
Heisst das, „seek“ findet einen Datensatz mit NameR = Name und aktualisiert diesen (ist das dein erwartetes Ergebnis, dann wäre ja alles i.O.), oder soll das heissen, dass immer der erste Datensatz der Tabelle (welcher auch immer das sein soll) aktualisiert wird?
Gruss
Peter
Hallo Peter
Vielen Dank für Deine Antwort.
Das erwartete Ergebnis ist , dass in dem Satz mit dem angebotenen Namenfeld (Seek „=“, Name) das Datumfeld mit dem aktuellen Tagesdatum versehen wird.
Es wird aber immer der 1. Satz der Tabelle aktualisiert, egal, welchen Namen ich der Seek-Methode anbiete. Dieser 1.Satz der Tabelle ist aber nie der gesuchte Satz.
Wenn NoMatch nicht zutrifft, gehe ich davon aus, dass der Satz gefunden wurde.
Trotzdem wird der falsche, nämlich 1. Satz der Tabelle aktualisiert.
Was ist falsch?
Gruss Reinhard
Hallo Reinhard
Vielen Dank für Deine Antwort.
Gerne.
Das erwartete Ergebnis ist , dass in dem Satz mit dem
angebotenen Namenfeld (Seek „=“, Name) das Datumfeld mit dem
aktuellen Tagesdatum versehen wird.
OK. Ist „Name“ eine Variable oder soll das einen konkreten Wert (String) darstellen (dann solltest du " ‚Name‘ " schreiben, so dass man diesen Unterschied erkennen kann). Wenn es sich um eine Variable handelt, dann solltest du sie nicht „Name“ nennen (besser z.B.: strName). Ich kenne das von früher (heute achte ich darauf), dass es Probleme gibt, wenn man Bezeichner verwendet, die eigentlich reservierte Namen (schon wieder „Namen“, ich hoffe, du verstehst noch, was ich sagen will) von Access sind. Das führt zu Fehlern die oftmals sehr schwer zu finden sind.
Es wird aber immer der 1. Satz der Tabelle aktualisiert, egal,
welchen Namen ich der Seek-Methode anbiete. Dieser 1.Satz der
Tabelle ist aber nie der gesuchte Satz.
Wenn NoMatch nicht zutrifft, gehe ich davon aus, dass der Satz
gefunden wurde.
Das gilt zwar nicht für „NoMatch“, aber für andere logische Konstrukte schon: Es gibt eine „dreiwertige“ Logik, je nach dem, ob eine Variable oder ein Feld „NULL“ sein können. Schau mal, ob so etwas in deinem Original-Code vorkommt:
If Null = Null Then
MsgBox "Das erwartet man."
Else
MsgBox "Aber das hier passiert!"
End If
Trotzdem wird der falsche, nämlich 1. Satz der Tabelle
aktualisiert.
Was ist falsch?
Hmmm, schwer zu sagen. Da du offensichtlich nicht deinen Original-Code gepostet hast, könnte es ja sein, dass im Original doch noch irgendwo ein kleiner Fehler steckt.
Überprüfe nochmal deinen Index („NameR“), ob der wirklich so heisst (der Indexname, nicht der Name des Feldes!). Aber das sollte eigentlich zu einem Laufzeitfehler führen, wenn der falsch wäre.
Ansonsten kann ich dir noch anbieten, mir deine Datenbank zu schicken (wenn keine höhere Version als Access 97 !), oder statt mühsam via „seek“ zu positionieren und upzudaten, das Ganze einfach per „Execute“ zu bewerkstelligen:
CurrentDb.Execute ("UPDATE MeinTab SET DatumFeld = " & CDbl(Date) & " WHERE NameR = '" & strName & "';")
Gruss
Peter
Hallo Peter,
Schönen Dank für Deine Antwort.
Ich hatte gehofft, mit der Methode SEEK, mit der ich bislang noch nicht gearbeitet habe, bei meinem Vorhaben zum Ziel zu kommen. Aber ich werde noch weiter forschen und dabei Deine Anregungen verwerten.
Ansonsten denke ich, dass ich mit der Methode FIND weiterarbeite. Dies ist zwar nicht so schnell in der Verarbeitung, aber meine dateien sind nicht so groß, als dass ich hier eine zeitliche Verzögerung bemerke.
Grüße Reinhard
Hallo Peter,
ich bin’s nochmal. Interessiert Dich das Thema noch?
Dein Tipp war goldrichtig: nicht der Feldname ist wichtig für den Index bei der Seek-Methode, sondern der Indexname!!
Index = „PrimaryKey“, so lautet nämlich mein Indexname und nicht
Index = „NameR“, das ist der Feldname, der wird aber nicht verlangt beim Index.
Ergebnis: alles ok
Herzlichen Dank nochmals
Gruß Reinhard
Hallo Reinhard
ich bin’s nochmal. Interessiert Dich das Thema noch?
Immer…
Dein Tipp war goldrichtig: nicht der Feldname ist wichtig für
den Index bei der Seek-Methode, sondern der Indexname!!
Schön, so etwas hatte ich ja vermutet. Komisch ist nur, dass es keinen Laufzeitfehler gibt?!
Herzlichen Dank nochmals
Gerne!
Gruss
Peter