Bestimmtes Feld in Tabelle per VBA ansprechen?!

Hi!

Will bei Access in einem Formular eine Funktion einfügen, das wenn eine Checkbox = true ist, das dnan das aktuelle Datum in eine Tabelle geschrieben wird…!
Leider funktioniert das ganze nicht so wirklich wie ich das will!
Meine Frage ist jetzt wie ich ein bestimmtes Feld einer Tabelle anspreche in VBA Code.

Hier mein Code:

Option Compare Database
Option Explicit

Private Sub Ausgeliehen_Click()
If Ausgeliehen = True Then Schüler_Buch_Detail.Ausleihdatum = Date
End Sub

Private Sub Zurückgegeben_Click()
If Zurückgegeben = True Then Schüler_Buch_Detail.Rückgabedatum = Date
End Sub

Außerdem würde mich interessieren wie man eine Abfrage per VBACode aufruft!

Danke schonmal im Vorraus!

Tschööö Chaos

Private Sub Zurückgegeben\_Click()
If Me!Zurückgegeben Then 
 Currentdb.Execute "UPDATE Schüler\_Buch\_Detail" & \_
 " SET Rückgabedatum = Date WHERE BuchNr = " & BuchNr
end if
End Sub

oder so ähnlich. Zum Aufrufen von Abfragen kann man Docmd.OpenQuery nehmen - besser aber die Execute-Methode (siehe auch im DBWiki: http://www.dbwiki.de/wiki.php?title=Access_Design:Ru…

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Hi!

Vielen Dank! :smiley:
Werds gleich mal ausprobieren!

Tschööö

Hi!

Also ich habs jetz so gemacht wie dus mir geschrieben hast!
Richtig kapiert hab’ ichs aber net!
Außerdem gibt er mir nen Fehler aus!

Private Sub Ausgeliehen_Click()

If Me!Ausgeliehen Then
CurrentDb.Execute „UPDATE Schüler_Buch_Detail“ & _
"SET Ausleihdatum = Date WHERE BuchNr = " & BuchNr
End If
End Sub

Und zwar bei dem & BuchNr!
Für was is des überhaupt da???
Was macht des??
Und wo liegt der Fehler?
Bitte helft mir schnell, muss noch einiges an der Datenbank machen!

Tschööö

„BuchNr“ hab ich den Primärschlüssel deiner Buch-Tabelle genannt - ich kenne ja weder deine Feldnamen noch die Datentypen, die musst du schon selber anpassen! (Ich bin auch davon ausgegangen, dass es in deinem Formular ein Formularfeld namens „BuchNr“ gibt, das an eben dieses Primärschlüsselfeld gebunden ist - auch das musst du ggf. anpassen.

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Hi!

Ok, soweit so gut:

Private Sub Ausgeliehen_Click()

If Me!Ausgeliehen Then
CurrentDb.Execute „UPDATE Schüler_Buch_Detail“ & _
"SET Ausleihdatum = Date WHERE ExemplarID = " & ExemplarID
End If
End Sub

Jetzt bekomme ich noch nen Syntaxfehler in der Updateanweisung!
Hast ne Idee woran das liegen könnte???

Tschööö

Da fehlt ein Leerzeichen…
Es muss heissen:

CurrentDb.Execute "UPDATE Schüler\_Buch\_Detail" & \_
" SET Ausleihdatum = Date WHERE ExemplarID = " & Me!ExemplarID

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Ok, jetzt bekomm ich die Fehlermeldung:

„1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben!“

Ich werd’ langsam echt verrückt!!!
Kannst mir nochmal helfen?

  1. Wie kann ich Felder von einer fremden Datenbank in meine Tabelle kopieren und überprüfen ob sie schon vorhanden sind?
    Falls sie vorhanden sind, sollen die Datensätze aktualisiert werden und wenn nicht einfach nur hinzugefügt werden!

Tschööö

Ok, jetzt bekomm ich die Fehlermeldung:

„1 Parameter wurde erwartet, aber es wurden zu wenig Parameter
übergeben!“

Wenn „ExemplarID“ ein Textfeld sein sollte (aber warum heisst es dann „…ID“?!?):

CurrentDb.Execute "UPDATE Schüler\_Buch\_Detail" & \_
" SET Ausleihdatum = Date WHERE ExemplarID = '" & Me!ExemplarID & "'"
  1. Wie kann ich Felder von einer fremden Datenbank in meine
    Tabelle kopieren und überprüfen ob sie schon vorhanden sind?
    Falls sie vorhanden sind, sollen die Datensätze aktualisiert
    werden und wenn nicht einfach nur hinzugefügt werden!

Geht z.B. (per DAO) über Recordsets - mit FindNext lesen, ob vorhanden, mit Addnew anfügen, mit Edit bearbeiten. Lies mal die Hilfe zu OpenRecordset usw., da sind auch Beispiele angegeben.

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Zu 1.: Weil in dem Textfeld nur die ID steht, welche aber mit dem Schülernamen verbunden ist…! Weiß jetzt net ob des verständlich genug war’…! *gg*

Zu 2.: Ok, werd’ ich machen! Danke für den Tip!

Zu 1.: Weil in dem Textfeld nur die ID steht, welche aber mit
dem Schülernamen verbunden ist…! Weiß jetzt net ob des
verständlich genug war’…! *gg*

Na ja - dann nennt man so etwas aber besser nicht „ID“, sondern „Ausleihcode“ oder wie auch immer. (Im übrigen sollte man derart „sprechende Schlüssel“ besser vermeiden oder wenn’s denn unbedingt sein muss: daraus einen zusammengesetzten Primärschlüssel machen, aber das ist eine andere Baustelle…)

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Mein Lehrer meinte das soll ich so machen…!
Aber wenn du sagst das das so besser ist, dann werd’ ich das beim nächsten Mal beachten!
Bin aber immernoch nicht weitergekommen!
HILFE!
Es funzt immernoch net!!!

Tschööö

Was funktioniert nicht? Wie sieht dein Code jetzt aus? Welche Felddatentypen verwendest du? Was steht zur Laufzeit in den Variablen/Formularfeldern drin (Debuggen! Haltepunkt setzen usw.)? Wo genau tritt der Fehler auf und wie lautet die Fehlermeldung?

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Letztes Problem
Hat sich erledigt!

Ich hab’ jetzt einfach die Checkbox aus dem Programm genommen und lass das Datum jetzt immer von Hand eingeben!

Is mir zu stressig!
Dank aber trotzdem für deine Hilfe!

Bräuchte diese jetzt auch noch ein letztes Mal wenns dir nix ausmacht!

Ich will von einer Tabelle (Schüler_Puffer) in der Schüler mit Name, Vorname und Geburtsdatum eingetragen sind eine Anfügeabfrage starten, die die 3 Daten an die Tabelle „Schüler“ schickt.
Aber das ist nicht das schwere daran!
Ich bekomme es nicht hin, das Access erkennt ob jemad die nur die Klasse gewechselt hat und man nur die Klasse aktualisieren muss oder
ob man nen neuen Eintrag machen soll!
Oder soll ich einfach alles überschreiben lassen?

Was sagst du dazu???

Tschööö

Kann man sicher alles machen - aber dazu müsstest du dich mal etwas besser in die Materie einarbeiten (Stichwort: Recordset, FindFirst, Addnew - steht eigentlich alles in der Hilfe, auch mit Beispielen). Bzw.: Wenn das eine Übungsaufgabe ist: Eigentlich sollte das Euch der Lehrer dann erklärt haben…

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Ne hat er eben net! Der hat uns ins kale Wasser in der Hinsicht geworfen!
Deshalb wärs nett wenn du mir dabei helfen würdest!
Bitte ich steh voll unter Druck!
Müsste das bis morgen haben…und eigentlich hab’ ich auch vor das ichs hab’!

Also wie würdest du das Problem angehen bzw. lösen?

Tschööö

Na, ich würde halt nachschauen, ob es den jeweiligen Schüler schon gibt, wenn nicht, dann neu anlegen, etwa so:

Dim RS as DAO.Recordset, RSA as DAO.Recordset
Set RSA = Currentdb.Openrecordset("tblSchülerPuffer",dbopendynaset)
Set RS = Currentdb.Openrecordset("tblSchüler",dbopendynaset)
Do Until RSA.eof
 RS.Findfirst "Nachname='" & RSA!Nachname & \_
 "' AND Vorname ='" & RSA!Vorname & \_
 "' AND Geburtsdatum=#" & Format(RSA!Geburtsdatum,"yyyy-mm-dd") & "#"
 If RS.Nomatch then ' nicht gefunden, neu anlegen
 RS.Addnew
 RS!Vorname = RSA!Vorname
 RS!Nachname = RSA!Nachname
 RS!Geburtsdatum = RSA!Geburtsdatum
 else
 RS.Edit
 end if
 RS!Klasse = RSA!Klasse
 RS.Update
 RSA.Movenext
Loop
RS.Close
RSA.CLose

oder so ähnlich. Das Ganze geht auch mit einer Anfüge- und einer Aktualisierungsabfrage - die man dann aber geschickt (mit einem Left Join) aufbauen muss.

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)