PDA

Vollständige Version anzeigen : Recordset update?


christianwank
19.06.2003, 15:48
Wie kann ich mir mit Hilfe von recordset eine bestimmten Datensatz aus einer Tabelle suchen, und einen anderen Wert in einer Spalte setzen?

strausto
19.06.2003, 15:49
Schau Dir in der OH mal die Methode Edit (DAO) an.

christianwank
19.06.2003, 15:52
woher weiß ich jetzt, wie bekomme ich, jetzt genau den richtigen Datensatz, den ich such?

strausto
19.06.2003, 15:53
Ist eine Suche über den PrimaryKey möglich?
Dann verwende Seek ansonsten FindFirst.

christianwank
19.06.2003, 16:00
ich möchte den gewünschten Datensatz über zwei Kriterien herausfinden, das erste K ist eine JA/NEIN - Spalte (der eingetragene Wert muss JA sein), das zweite K ist ein Text, den ich mit einer festen Textvariable im Modul vergleiche.

Habe ich dann den Datensatz gefunden, möchte ich in zwei weiteren Spalten die aktuelle Zeit und das aktuelle Datum eintragen, und der Wert im ersten K auf NEIN setzten.

strausto
19.06.2003, 16:07
Dann mache das doch mit einer Aktualisierungsabfrage mit Parameterabfrage!

Szebin
19.06.2003, 23:01
Hi Christian,

Dieses Code-Beispiel setzt voraus, daß der zu suchende Datensatz immer vorhanden ist. Wenn es vorkommen kann, daß bei Deiner Suche kein Datensatz gefunden wird, solltest die eine If-Then-Anweisung mit einem DCount einbauen.


Dim db As Database
Dim rs As Recordset

TempVar = Me!DeineTextvariable

Set db = CurrentDb

Set rs = db.OpenRecordset("SELECT * FROM DeineTabelle WHERE FeldKriterium1 = -1 And FeldKriterium2 = " & "'" & TempVar & "'" &";")
rs.Edit
rs!FeldKriterium1 = 0
rs!FeldZeit = Time()
rs!FeldDatum = Date()
rs.Update
rs.Close

db.Close

SPE
02.10.2004, 20:12
Hallo Szebin,

wenn ich den Code bei mir eingebe (Access2000) bekomme ich sofort den Fehler:
Dim db as Database (benutzerdefinierter Typ nicht definiert).

Woran kann das liegen?

racoon0506
02.10.2004, 21:27
Fehlender Verweis!
du musst im Codefenster (welcher dazu geöffnet ist, ist egal!) auf Extras/Verweise gehen und dort den Verweis auf Microsoft DAO 3.x aktivieren (bzw.die höchste vorhandene Version davon!)
dann sollte die Meldung nicht mehr erscheinen....
Ausserdem sollte dann auch

Dim db As Database
Dim rs As Recordset

in

Dim db As DAO.Database
Dim rs As DAO.Recordset

geändert werden, weil es damit egal ist, an welcher Prioritätenstelle der Verweis ist
(sprich in der Liste vor oder hinter ADO...)

Auch, wenn es stilistisch korrekt ist, du kannst dir das
Dim db As Database und Set db = CurrentDb sparen, wenn du in der Zeile
Set rs = db.OpenRecordset("SELECT * FROM....
das db durch CurrentDb ersetzt, also so:

Set rs = CurrentDb.OpenRecordset("SELECT * FROM ....


beinahe vergessen: Wenn du den Code so verkürzen solltest, muss auch das
db.Close am Ende raus, da sonst hier wieder ein Fehler verursacht wird....

Arne Dieckmann
02.10.2004, 23:39
"db.Close" ist bei CurrentDb sowieso überflüssig. S. dazu FAQ 7.5 oder gleich das Zitat daraus:
db.Close bezieht sich hier auf eine externe Datenbank, die mit OpenDatabase geöffnet wurde. Bei Currentdb macht Close keinen Sinn. Man öffnet es nicht selber und kann es auch nicht so schließen. Wenn man das übersieht, wird der resultierende Fehler aber von Access stillschweigend geschluckt.

racoon0506
03.10.2004, 02:23
...da lernt man ewiglich, das man alle Objektvariablen schliessen soll, und siehe da....
Access meckert mal nicht über eine unsinnige Anweisung! Wieder was gelernt!