Access ist toll, kann alles & tut alles
aber mit VBA soll das noch toller sein
wie kann man per VBA auf bestimmte Tabellenelemente zugreifen
gibt es möglichkeiten variablen global zu behalten?
gibt es irgendwo ein „normaldeutsches tutorial für VBA und ACCESS?“
fragen die mich bewegen und ihr hoffentlich beantwortet
Hallo, Mathias!
Access ist toll, kann alles & tut alles
Na ja. Dazu sage ich mal nix…
aber mit VBA soll das noch toller sein
Hmmm…
wie kann man per VBA auf bestimmte Tabellenelemente zugreifen
Auf welche? Felder oder Datensätze? Wie zugreifen?
Relevante Kapitel/Stichworte wären:
- TableDefs-Auflistung, Fields-Auflistung, die entsprechenden Objekte und deren Eigenschaften und Methoden.
- Zum Auslesen/setzen: Recordset-Objekt, DLookup/DMax/D…-Funktionen, DoCmd.RunSql
gibt es möglichkeiten variablen global zu behalten?
Selbstverfreilich: Definition in einem globalen Modul als
Global variable As Typ
gibt es irgendwo ein „normaldeutsches tutorial für VBA und
ACCESS?“
Derer viele. Wie fit bist Du denn in „normalem“ VB? Die DB/Access-spezifischen Ergänzungen (DLookup) für VBA gehen dann relativ leicht. Der Datenbankzugriff über Recordsets etc. sollte auch in der Literatur zu VB beschrieben sein.
Empfehlen kann ich gerade keins. Hier sollten aber solche Links rumturnen (zur Not im Forum VB, wie gesagt: Adaption auf DB ist dann auch kein Problem).
fragen die mich bewegen und ihr hoffentlich beantwortet
Hoffe, es hilft ein wenig weiter.
Gruß, Manfred
Hallo, Manfred!
Frage 2 & 3 sind durch,Danke!
so sieht das Problem zu Frage 1 aus:
Ich habe eine Tabelle mit dem Namen „Global“
in dieser Tabelle gibt es eine Spalte Zählung
wie kann ich
a) den Wert von Zeile x in Variable y speichern
b) wenn ich den wert in der ersten Zeile mit folgender methode setzen will produziert Access Fehlermeldungen
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(„Global“, dbOpenTable)
rs![Zählung] = 1
Die Microsoft-Hilfe ist keine Hilfe!
Hallo, Mathias!
Ich habe eine Tabelle mit dem Namen „Global“
in dieser Tabelle gibt es eine Spalte Zählung
wie kann ich
a) den Wert von Zeile x in Variable y speichern
Was hast Du genau vor?
b) wenn ich den wert in der ersten Zeile mit folgender methode
setzen will produziert Access Fehlermeldungen
Dim rs As Recordset
Der Fehler ist beim dbOpenTable; Du musst das Recordset zum ändern als dbOpenDynaset öffnen, dann kannst Du auch was zuweisen:
Set rs = CurrentDb.OpenRecordset(„Global“, dbOpenDynaset)
rs![Zählung] = 1
Sollte dann funktionieren.
Öffnen mit dbOpenSnapshot lässt keine Änderungen zu, ist aber schneller, wenn Du nur was lesen willst.
Analog kannst Du mit
y = rs(„Zählung“) den Wert in eine (bitte typ-konforme) Variable y schreiben. rs(„Feld“) ist übrigens äquivalent zu Deiner Schreibweise.
Gruß, Manfred
Hallo, Manfred!
Was hast Du genau vor?
Ich will die Weltherrschaft an mich reißen
Aber erst mal reicht es wohl die Datenbank zu Programmieren
Mein finaler Code:
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(„Global“, dbOpenDynaset)
rs(„Zählung“) = 1
rs.Update
rs.Close
Meine finale Fehlermeldung:
Laufzeitfehler ‚91‘:
Objektvariable oder With-Blockvariable nicht festgelegt
Also in die Hilfe gucken
Weitere Informationen erhalten Sie, wenn Sie das fragliche Element ::auswählen und F1 (unter Windows) oder HILFE (beim Macintosh) drücken.
in die nächste Hilfe gucken
Worksheets(1).Range („A2“).value=3.14159
Was haben wir gelernt
-
-> Mac-User brauch wohl echt Hilfe wenn die schon ne eigene Taste dafür haben
-
-> Selbst eindeutige Konstanten wie Pi lassen sich in Tabellen speichern
aber wie setze ich die „1“ in meine Tabelle??
P.S.:Sorry wegen der Ironie aber dieses Forum besteht ja nur, weil Microsoft so @$#! Hilfen schreibt
Um mal auf die Ausgangsfrage zurückzukommen:
Schau mal in Raphael Heins „Yaccess“ rein: http://www.yaccess.de/
Und dort speziell: http://www.yaccess.de/lernen.shtm
Ansonsten ist die Hilfe gar nicht so schlecht, wie immer wieder behauptet wird - wie bei allem: man muss halt damit umgehen können. Z.B. die interaktiven Möglichkeiten ausschöpfen, sich auch mal die Beispiele ansehen, auch mal unter „Siehe auch“ nachsehen usw.
Darüber hinaus geht nichts über ein gutes Buch. (Siehe z.B. diese meine Buchtipps: http://spotlight.de/zforen/amsa/m/amsa-1082824787-21…)
Und natürlich: ins DBWiki und die FAQ (http://www.donkarl.com) schauen - damit erübrigen sich viele Fragen von selbst!
Gruß aus dem Norden
Reinhard Kraasch
(http://www.dbwiki.de - das Datenbank-Wiki)
Hallo, Mathias!
Was hast Du genau vor?
Ich will die Weltherrschaft an mich reißen
Das wird mit MS nicht funktionieren. MS hat die Weltherrschaft schon und gibt sie nicht mehr her.
Aber erst mal reicht es wohl die Datenbank zu Programmieren
Mein finaler Code:
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(„Global“, dbOpenDynaset)
Hier musst Du noch sagen, dass Du ändern willst:
rs.Edit
rs(„Zählung“) = 1
rs.Update
rs.Close
So sollte es eigentlich laufen. Außer, die Tabelle ist sonstwie gesperrt und Du hast keine Zugriffsberechtigungen.
Meine finale Fehlermeldung:
Laufzeitfehler ‚91‘:
Objektvariable oder With-Blockvariable nicht festgelegt
Die sieht mir komisch aus. Sollte bei obigem Sniplet eigentlich nicht auftreten. Hatte aber ähnliche Probleme gehabt, wenn ich mit CurrentDb. geschafft habe. Abhilfe war: Eigenes DB-Objekt in der Prozedur, dann
Set dbMyDb = CurrentDb
Set rs = dbMyDb.OpenRecordset(…)
usw.
Zur Hilfe kann ich Dir wir auch dem Kollegen Reinhard Kraasch zustimmen: Die Hilfe taugt nur was, wenn man sich halbwegs auskennt. Dann komme ich damit recht gut klar.
Als Newbie hat man schlechte Karten. Und die Hilfe ist eben eine Hilfe, kein Tutorial.
Gruß, Manfred
Danke Rainer
ich habe es gefunden:
ein Access Tutorial in normaldeutsch
rs.Edit oder rs.AddNew
Hallo Mathias
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(„Global“, dbOpenDynaset)
dbOpenTable hätte es auch getan… der Fehler liegt an anderer Stelle:
Wenn du die Tabelle öffnest, dann steht der Pointer auf dem ersten Datensatz - wenn einer vorhanden ist!
Welches der erste Datensatz ist, ist nicht immer eindeutig bestimmt (hängt u.a. davon ab, ob die Tabelle einen Primärschlüssel hat). Im „Normalfall“ würdest du die Tabelle z.B. sortiert öffnen (also durch eine SQL-Anweisung mit „ORDER BY“), oder dich durch die „Find“-Methode auf einen bestimmten Datensatz positionieren.
Wenn Du also jetzt diesen aktuellen Datensatz ändern möchtest, dann musst du dies erst einmal durch die „Edit“-Methode einleiten, also:
rs.Edit
Ist kein Datensatz vorhanden, oder möchtest du sowieso einen Datensatz hinzufügen, dann musst du dies durch die „AddNew“-Methode einleiten, also:
rs.AddNew
Dann kannst du so fortfahren, wie in deinem Beispiel.
rs(„Zählung“) = 1
rs.Update
rs.Close
BTW: rs![Zählung] = rs!Zählung = rs(„Zählung“)
Alle diese Anweisungen sind äquivalent. Welche du benutzen möchtest, bleibt dir überlassen. Die eckigen Klammern musst du verwenden, wenn dein Feldname z.B. eine Leestelle enthält.
P.S.:Sorry wegen der Ironie aber dieses Forum besteht ja nur,
weil Microsoft so @$#! Hilfen schreibt
Das Problem ist - wie meistens - dass du nicht weisst, wonach du suchen sollst. Das liegt aber nicht an dir - mir geht es da genauso - das liegt am Prinzip. Wenn man weiss, wonach man suchen muss, dann bietet die Access-Hilfe ausreichend Erklärungen und Beispiele.
Gruss
Peter
Ich brauche immer so lange zum Tippen
Oops, leider haben sich die Antworten überschnitten, weil ich immer sooo lange brauche, um meinen Text einzugeben.
Nichts für Ungut!
Gruss
p.
rs(„Zählung“) = 1
rs.Update
rs.Close
BTW: rs![Zählung] = rs!Zählung =
rs(„Zählung“)
ich weiß nicht, ob ich auf dem aktuellen Stand bin. Aber früher mußte das heißen: rs.Fields(„Zählung“) = 1
rs!Zählung könnte eventuell auch nicht funktionieren (Umlaut)
Gruß
Kiwi
Hallo Kiwi
BTW: rs![Zählung] = rs!Zählung = rs(„Zählung“)
ich weiß nicht, ob ich auf dem aktuellen Stand bin.
Ich weiss es auch nicht… weder von dir noch von mir 
Aber früher mußte das heißen: rs.Fields(„Zählung“) = 1
Stimmt, das wäre dann die vierte Variante.
Was heisst „früher“? Ab 97 geht das mit und ohne „Fields“. Auf ältere Versionen habe ich keinen Zugriff mehr.
rs!Zählung könnte eventuell auch nicht funktionieren (Umlaut)
Ich denke, das geht. Probleme gibt’s bei Leerzeichen, Sonderzeichen und reservierten Worten.
Gruss
Peter
Hallo Peter
BTW: rs![Zählung] = rs!Zählung = rs(„Zählung“)
Aber früher mußte das heißen: rs.Fields(„Zählung“) = 1
Stimmt, das wäre dann die vierte Variante.
Was heisst „früher“? Ab 97 geht das mit und ohne „Fields“. Auf
ältere Versionen habe ich keinen Zugriff mehr.
ah ja, doch noch etwas dazugelernt.
rs!Zählung könnte eventuell auch nicht funktionieren (Umlaut)
Ich denke, das geht. Probleme gibt’s bei Leerzeichen,
Sonderzeichen und reservierten Worten.
stimmt, da war ich etwas zu schnell.
Gruß
Kiwi