PDA

Vollständige Version anzeigen : Warum geht das nicht???


Xena
05.11.2001, 14:35
Hi Leute :)
Ihr könnt mir doch bestimmt sagen, warum ich bei folgendem Code die Fehlermeldung "Objekt erforderlich" bekomme !? *hoff*
Ich weis echt nicht warum das nicht geht, denn das verwende ich so schon woanders und da geht es ja auch!


Dim dbmy As Database
Dim tblmy As DAO.recordset

Set dbmy = Application.CurrentDb
Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Daten", dbOpenDynaset)

tblmy.AddNew
tblmy.Fields(Personalnummer) = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
'tblmy![Vorname] = Formulare!Mitarbeiter_hinzufuegen!Vorname
'tblmy![Nachname] = Formulare!Mitarbeiter_hinzufuegen!Nachname
'tblmy![Geburtsdatum] = Formulare!Mitarbeiter_hinzufuegen!Geburtsdatum
'tblmy![Privat_Strasse] = Formulare!Mitarbeiter_hinzufuegen!Strasse
'tblmy![Privat_Hausnr] = Formulare!Mitarbeiter_hinzufuegen!Hausnummer
'tblmy![Privat_PLZ] = Formulare!Mitarbeiter_hinzufuegen!PLZ
'tblmy![Privat_Ort] = Formulare!Mitarbeiter_hinzufuegen!Ort
'tblmy![Privat_Telnr] = Formulare!Mitarbeiter_hinzufuegen!Telefonnummer
'tblmy![Mobil_Telnr] = Formulare!Mitarbeiter_hinzufuegen!Handynummer
'tblmy![EMail] = Formulare!Mitarbeiter_hinzufuegen!EMail
'tblmy.Update

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Gehalt", dbOpenDynaset)

'tblmy.AddNew
'tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
'tblmy![Eintrittsdatum] = Formulare!Mitarbeiter_hinzufuegen!Eintrittsdatum
'tblmy![Gehalt] = Formulare!Mitarbeiter_hinzufuegen!Gehalt
'tblmy![Provision_Ja_Nein] = Formulare!Mitarbeiter_hinzufuegen!Provision_JaNein
'tblmy![Provision_Prozent] = Formulare!Mitarbeiter_hinzufuegen!Provision_proz
'tblmy![Krankenkasse] = Formulare!Mitarbeiter_hinzufuegen!Krankenkasse
'tblmy.Update

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Bemerkungen", dbOpenDynaset)

'tblmy.AddNew
'tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
'tblmy![Bemerkungen] = Formulare!Mitarbeiter_hinzufuegen!Bemerkungen
'tblmy.Update


Schonmal danke im voraus :)

So long Xena ^_^°

struppi
05.11.2001, 16:50
Hallo Xena
Schau mal unter Verfügbare Verweise nach ob Deine DAO 3.6 Object Libary oder tiefer registriert ist.
Gruß struppi

Sascha Trowitzsch
05.11.2001, 17:46
tblmy.Fields("Personalnummer") = Formulare!Mitarbeiter_hinzufuegen!Personalnummer

Xena
06.11.2001, 12:01
Hi,

meine DAO 3.6 Object Libary ist soweit ich weis registriert usw. und an einer anderen Stelle funktioniert es ja auch auf dieselbe Art und Weise . . .
Zur Not tut es auch eine Alternativ-Lösung, denn ich benutze das nur so, weil ich mit sql-Statements (insert into .. . ) immer ein Pop-Up bekommen habe :"Sie fügen jetzt einen neuen Datensatz hinzu . . bla bla blubb" -> Ja -> Nein

und das bekomme ich mit der Lösung (die ja leider nicht funzt) nicht.

So long

Xena ^_^°

Mattes
06.11.2001, 12:21
Hallo Xena,

Dim tblmy As DAO.recordset

is ok, aber
Dim dbmy As Database erseztz Du mal bitte durch

Dim dbmy As DAO.Database

Das ist das, was mir auffällt, und ich bin kein Crack!

Xena
06.11.2001, 12:41
Hmm, ich hatte ja Hoffnung, daß das jetzt geht . . .
Tut es aber leider nicht.
Ich bekomme immernoch dieselbe Fehlermeldung wie vorher "Objekt erforderlich"

. . . Und die Suche geht weiter . . .

So long Xena ^_^°

A.S.
06.11.2001, 12:44
Hallo Xena,

an welcher Stelle Deines Codings wird denn der Fehler angemeckert (Beim Lauf) und wo liegen die Unterschiede zwischen den beiden Codingversionen, die Du benutzt?

Gruß

Arno

Anne Berg
06.11.2001, 12:47
Sag doch einfach mal, an welcher Stelle genau der Fehler auftritt.

Gruß Anne

Xena
06.11.2001, 12:56
Hi Leute,

ich hab immer das Problem, ich bekomme zwar eine Fehlermeldung, aber ich finde nie raus an welcher Stelle im Code der Fehler auftritt. Beim compilen tritt auch kein Fehler auf.

Der Unterschied der beiden Versionen liegt darin, dass bei der einen ein dummes Pop-Up-Fenster aufgeht, wo man jedes INSERT INTO bestätigen muss. Und bei der anderen eben nicht.

Version mit POP-UP:

Dim rs As recordset
Dim db As Database
Dim sql_string As String
Set db = Application.CurrentDb
sql_string = "INSERT INTO Mitarbeiter_Daten (Vorname, Nachname, Geburtsdatum, Privat_Strasse, Privat_Hausnr, Privat_PLZ, Privat_Ort, Privat_Telnr, Mobil_Telnr,EMail) values (,Formulare!Mitarbeiter_hinzufuegen!Vorname,Formulare!Mitarbeiter_hinzufuegen!Na chname,Formulare!Mitarbeiter_hinzufuegen!Geburtsdatum,Formulare!Mitarbeiter_hinz ufuegen!Strasse,Form ulare!Mitarbeiter_hinzufuegen!Hausnummer,Formulare!Mitarbeiter_hinzufuegen!PLZ,F ormulare!Mitarbeiter_hinzufuegen!Ort,Formulare!Mitarbeiter_hinzufuegen!Telefonnu mmer,Formulare!Mitar beiter_hinzufuegen!Handynummer,Formulare!Mitarbeiter_hinzufuegen!EMail);"
DoCmd.RunSQL sql_string
sql_string = "INSERT INTO Mitarbeiter_Gehalt (Personalnummer,Eintrittsdatum,Gehalt,Provision_Ja_Nein,Provision_Prozent,Kranke nkasse) values (Formulare!Mitarbeiter_hinzufuegen!Personalnummer,Formulare!Mitarbeiter_hinzufue gen!Eintrittsdatum,Formulare!Mitarbeiter_hinzufuegen!Gehalt,Formulare!Mitarbeite r_hinzufuegen!Provis ion_JaNein,Formulare!Mitarbeiter_hinzufuegen!Provision_proz,Formulare!Mitarbeite r_hinzufuegen!Krankenkasse);"
DoCmd.RunSQL sql_string
sql_string = "INSERT INTO Mitarbeiter_Bemerkungen (Personalnummer,Bemerkungen) values (Formulare!Mitarbeiter_hinzufuegen!Personalnummer,Formulare!Mitarbeiter_hinzufue gen!Bemerkungen);"
DoCmd.RunSQL sql_string


Version ohne POP-UP:

Dim dbmy As DAO.Database
Dim tblmy As DAO.recordset

Set dbmy = Application.CurrentDb
Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Daten", dbOpenDynaset)

tblmy.AddNew
tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
tblmy![Vorname] = Formulare!Mitarbeiter_hinzufuegen!Vorname
tblmy![Nachname] = Formulare!Mitarbeiter_hinzufuegen!Nachname
tblmy![Geburtsdatum] = Formulare!Mitarbeiter_hinzufuegen!Geburtsdatum
tblmy![Privat_Strasse] = Formulare!Mitarbeiter_hinzufuegen!Strasse
tblmy![Privat_Hausnr] = Formulare!Mitarbeiter_hinzufuegen!Hausnummer
tblmy![Privat_PLZ] = Formulare!Mitarbeiter_hinzufuegen!PLZ
tblmy![Privat_Ort] = Formulare!Mitarbeiter_hinzufuegen!Ort
tblmy![Privat_Telnr] = Formulare!Mitarbeiter_hinzufuegen!Telefonnummer
tblmy![Mobil_Telnr] = Formulare!Mitarbeiter_hinzufuegen!Handynummer
tblmy![EMail] = Formulare!Mitarbeiter_hinzufuegen!EMail
tblmy.Update

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Gehalt", dbOpenDynaset)

tblmy.AddNew
tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
tblmy![Eintrittsdatum] = Formulare!Mitarbeiter_hinzufuegen!Eintrittsdatum
tblmy![Gehalt] = Formulare!Mitarbeiter_hinzufuegen!Gehalt
tblmy![Provision_Ja_Nein] = Formulare!Mitarbeiter_hinzufuegen!Provision_JaNein
tblmy![Provision_Prozent] = Formulare!Mitarbeiter_hinzufuegen!Provision_proz
tblmy![Krankenkasse] = Formulare!Mitarbeiter_hinzufuegen!Krankenkasse
tblmy.Update

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Bemerkungen", dbOpenDynaset)

tblmy.AddNew
tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
tblmy![Bemerkungen] = Formulare!Mitarbeiter_hinzufuegen!Bemerkungen
tblmy.Update


So long Xena ^_^°

Mattes
06.11.2001, 12:58
hmmmm, wie gesagt, ich hab eigentlich keinenAhnung von VBA, aber wo liegt der Unterschied in folgenden Zeilen?

tblmy.Fields(Personalnummer) = Formulare!Mitarbeiter_hinzufuegen!Personalnummer
tblmy![Personalnummer] = Formulare!Mitarbeiter_hinzufuegen!Personalnummer

...und lautet die Syntax nicht:

tblmy.Fields("Personalnummer") = Formulare!Mitarbeiter_hinzufuegen!Personalnummer

???

A.S.
06.11.2001, 13:04
Hallo Xena,

erstmal auf die schnelle zu den PopUps.

Die Warnmeldungen von Access lassen sich über das Menü Extras / Optionen / "Bearbeiten/Suchen" abschalten. Per VBA kannst Du entweder die SetWarnings-Methode des DoCmd-Befehls einsetzen oder mittels SetOption/GetOption die entsprechenden Einstellungen beim Programmstart / -ende ermitteln bzw. wieder restaurieren.

Letzteres hat den Vorteil das die entsprechenden benutzerspezifischen Einstellungen erhalten bleiben und sich der (evtl. selbst in Acc programmierende) Anwender sich nicht über die Eigenwilligkeiten Deiner Applikation aufregt ;)

Dann klappert das auch ohne PopUps. Das andere muß ich mir noch mal genauer ansehen.

Gruß

Arno

Xena
06.11.2001, 13:05
@Mattes:
Ich hatte die Zeile nur drin, um zu testen, ob ich vielleicht den Kram falsch verwende . . . Das es praktisch dasselbe ist, ist mir klar. bei meinem letztem Posting hab ich das auch rausgenommen . . .
(Ich hab jetzt auch nochmal tblmy.Fields("Personalnummer") = . . . ausprobiert und habe natürlich! noch das gleiche Problem)

So long Xena ^_^°

Xena
06.11.2001, 13:08
@ArnoSimon:
Cool, das muss man natürlich wissen :) Dann kann ich ja meinen alten Code wieder verwenden. Ich hantiere sowieso lieber mit SQL-Statements rum, dann weis ich nämlich genau was da wo eingefügt wird und wo nicht (So rein vom logisch-datenbanktechnischen Denken)

Danke für die Hilfe <3

Xena ^_^°

A.S.
06.11.2001, 13:11
Hallo Xena,

was mir gerade auffällt:

An diesen Stellen mußt Du das Tabellenobjekt "tblmy" erst schließen bevor Du es wieder öffnest, ansonsten erzeugst Du einen Fehler den Du nicht abfängst, da das Objekt bereits in Nutzung ist:


tblmy.Update

tblmy.Close

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Gehalt", dbOpenDynaset)

tblmy.AddNew
.
.
.
tblmy.Update

tblmy.Close

Set tblmy = dbmy.OpenRecordset("Mitarbeiter_Bemerkungen", dbOpenDynaset)

tblmy.AddNew


Da dürfte wahrscheinlich auch der Fehler herkommen, da die OpenRecordset ein Table-Objekt antrifft das bereits geöffnet ist.

Gruß

Arno

Xena
06.11.2001, 13:37
So nachdem mein Rechner nach einem schönen Windows-Deadlock Ereignis wieder da ist und ich die letzte Antwort lesen konnte, hab ich natürlich gleich ausprobiert, ob das ganze funzt, wenn ich tblmy.close zwischendurch mache.
Nun denn es hat leider keinerlei auswirkung auf meinen Fehler . . .

So long Xena ^_^°

MarioR
06.11.2001, 17:22
Hallo Xena,

was mich mal interessieren würde:

Wo hast Du den Code denn stehen, dass Du mit deutscher Syntax arbeiten kannst?
Also ...Formulare!...
statt ...Forms!...
(beim Recordset)

A.S.
06.11.2001, 21:16
Hallo Mario,

hehe ;) Manchmal brauchts 'nen ganzen Wald um den Baum nicht zu sehen ;) ;)

Gruß

Arno

PS Das war jetzt auf mich bezogen

@ Xena,

wie Marios Hinweis schon impliziert, tausche das Formulare!.... gegen Forms!.... aus.

MarioR
07.11.2001, 05:49
Hallo Arno,

na, da winkt ja schon die 2000er-Marke :D

Was das Problem von Xena betrifft:
Acc meckert Formulare! aber eigentlich schon beim Kompilieren mit "Variable nicht definiert" an!?

A.S.
07.11.2001, 06:22
Hallo Mario,

hmm.... Eigentlich schon, ist nur die Frage ob Xena ihr Coding vor dem Testen durch den Compiler schickt oder nicht. Wenn nicht, fällt's erst bei der Laufzeitkompilierung auf.

Gruß

Arno