Benutzer mit den meisten Antworten
Laufzeitfehler 80020009 und 'Sie können diesem Obejkt keinen Wert zuweisen'

Frage
-
obige Fehler beschäftigen mich seit Monaten, ohne dass ich eine Lösung gefunden habe. Eine Anfrage vor Wochen hat keine Lösung gebracht.
- Die Acc2007-DB ist auf einer netzwerk-freigabe gespeichert und wid NUR von einem Rechner aus geöffnet.
- Es gibt keine Frontend/Backend-Aufteilung
- Der Fehler entsteht innerhalb eines Button_clicked Codes eines Formulars
Die dem Formular zugrundeliegende ABfrage verknüpft zahlreiche Tabellen, unter anderem die Tabelle "Rechnungen" mit der Tabelle "Auftraege" über eine 1:1 Verknüfpung (Pfeil am Rechnugen-Ende der Beziehung und an beiden Enden eine '1')
Im Code weise ich an 2 Stellen jeweils Feldern der Tabelle Rechnung Werte zu, und zwar in unterscheidlöicher Technik:
1. Wert in das zugehörige Textfeld schreiben -> Laufzeitfehler 80020009
2. Wert direkt in das Tabellenfeld schreiben - >'Sie können diesem Obejkt keinen Wert zuweisen'
In beiden Fällen poppt die Box mit der Fehklermeldung auf, ich klicke auf debuggen, anschliessend auf F5 und alles funktioniert wie gwünscht.
Mich irritiert vor allem, dass der Code nach der Verzögerung durch debuggen und anschl. F5 anscheinend ausführbar ist , wie als bräuchte Access eine kleine Pause.
Was kann ich tun ?
Antworten
-
Hallo,
NicoNi wrote:
Die Aufteilung Frontend-/Backend steht sicherlich an, aber den Aufwand
habe ich bislang gescheut.?
Den Assistenten zur Aufteilung aufrufen und starten (in 2010 im Ribbon
Datenbanktools - Daten verschieben - Access-Datenbank), mehr nicht.Wäre das generell günstig - DB auf Netzwerk, Frontend lokal ?
Ja, klar. Schau dir mal http://www.donkarl.com?FAQ1.35 an.
Public Sub Rechnungsnummer_generieren()
Aus welchem Ereignis wird die Prozedur denn aufgerufen?
Me.Dirty = False
Dir ist bewusst, dass diese Zeile u.U. andere Ereignisse ausloest, die auf
die aktuelle Prozedur Einfluss haben koennen?If IsNull(Me.RE_Rechnung_Code) Then
Debug.Print "Höchste Rechnungsnummer für diesen Gutachter: " & DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)
If IsNull(DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)) Then
Me.RE_Rechnung_fortlaufendeNummer = 1
Else
If IsNull(Me.RE_AuftragNr) Then
Stop
End If
Me.Rechnungsnummer_fortlaufend_txt = DMax("[RE_Rechnung_fortlaufendeNummer]", "Rechnungen", "[GA_Gutachter]=" & Me.GA_Gutachter) + 1Weiter oben schreibst du den Wert in Me.RE_Rechnung_fortlaufendeNummer und
hier nicht. Ist das gewollt?If Me.Dirty Then
DoCmd.RunCommand acCmdSaveRecordHier kannst du genauso
Me.Dirty = Falseverwenden. acCmdSaveRecord steht nur zur Verfuegung, wenn der Menuepunkt
vorhanden ist.Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com- Als Antwort markiert NicoNi Donnerstag, 20. Oktober 2011 09:53
Alle Antworten
-
Hallo,
NicoNi wrote:
- Die Acc2007-DB ist auf einer netzwerk-freigabe gespeichert und wid NUR
von einem Rechner aus geöffnet.
- Es gibt keine Frontend/Backend-AufteilungWarum nicht?
- Der Fehler entsteht innerhalb eines Button_clicked Codes eines
FormularsZeig mal den Code und markiere die Zeile, die den Fehler ausloest.
Im Code weise ich an 2 Stellen jeweils Feldern der Tabelle Rechnung
Werte zu, und zwar in unterscheidlöicher Technik:
1. Wert in das zugehörige Textfeld schreiben -> Laufzeitfehler 80020009
2. Wert direkt in das Tabellenfeld schreiben - >'Sie können diesem
Obejkt keinen Wert zuweisen'Oeffne mal die Abfrage und versuch, diese Felder zu aktualisieren. Wenn das
auch schon nicht geht, zeig mal die Abfrage.Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com -
Die Aufteilung Frontend-/Backend steht sicherlich an, aber den Aufwand habe ich bislang gescheut.
Wäre das generell günstig - DB auf Netzwerk, Frontend lokal ?
HIer kommt der erste (Teil-)code:
Public Sub Rechnungsnummer_generieren()
'If IsNull(Me!Rechnung_Datum_txt) Then
' Me.Rechnung_Datum_txt = Now()
'End If
Me.Dirty = False
If IsNull(Me.RE_Rechnung_Code) Then
Debug.Print "Höchste Rechnungsnummer für diesen Gutachter: " & DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)
If IsNull(DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)) Then
Me.RE_Rechnung_fortlaufendeNummer = 1
Else
If IsNull(Me.RE_AuftragNr) Then
Stop
End If
Me.Rechnungsnummer_fortlaufend_txt = DMax("[RE_Rechnung_fortlaufendeNummer]", "Rechnungen", "[GA_Gutachter]=" & Me.GA_Gutachter) + 1
End If
Me.RE_Rechnung_Code = Year(Now) & "-" & Format(Me.RE_Rechnung_fortlaufendeNummer, "00000")
Debug.Print "neu generierte Rechnungsnummer:", Me.RE_Rechnung_fortlaufendeNummer
End If
If Me.Dirty Then
DoCmd.RunCommand acCmdSaveRecord
End If
DoCmd.Requery
'jetzt muss noch wieder auf den Datensatz gesetzt werden.
End Subes klemmt in der fett gedruckten Zeile ...
das Me.Dirty... ist glaube ich mal hineingeraten um den Fehler zu beheben. ->könnte es das sein ?
-
Am 19.10.2011 schrieb NicoNi:
Die Aufteilung Frontend-/Backend steht sicherlich an, aber den Aufwand habe ich bislang gescheut.
Welcher Aufwand? 1 Minute ist kein Aufwand.
Wäre das generell günstig - DB auf Netzwerk, Frontend lokal ?
Nicht günstig, sondern IMHO nötig.
Me.Rechnungsnummer_fortlaufend_txt = DMax("[RE_Rechnung_fortlaufendeNummer]", "Rechnungen", "[GA_Gutachter]=" & Me.GA_Gutachter) + 1
es klemmt in der fett gedruckten Zeile ...
Ist Me.Rechnungsnummer_fortlaufend_txt ein ungebundenes Textfeld oder
die Datengrundlage aus der Tabelle?Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/ -
Hallo,
NicoNi wrote:
Die Aufteilung Frontend-/Backend steht sicherlich an, aber den Aufwand
habe ich bislang gescheut.?
Den Assistenten zur Aufteilung aufrufen und starten (in 2010 im Ribbon
Datenbanktools - Daten verschieben - Access-Datenbank), mehr nicht.Wäre das generell günstig - DB auf Netzwerk, Frontend lokal ?
Ja, klar. Schau dir mal http://www.donkarl.com?FAQ1.35 an.
Public Sub Rechnungsnummer_generieren()
Aus welchem Ereignis wird die Prozedur denn aufgerufen?
Me.Dirty = False
Dir ist bewusst, dass diese Zeile u.U. andere Ereignisse ausloest, die auf
die aktuelle Prozedur Einfluss haben koennen?If IsNull(Me.RE_Rechnung_Code) Then
Debug.Print "Höchste Rechnungsnummer für diesen Gutachter: " & DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)
If IsNull(DMax("[Re_Rechnung_fortlaufendenummer]", "Rechnungen", "[RE_Rechnung_GutachterNr]=" & Me.GA_Gutachter)) Then
Me.RE_Rechnung_fortlaufendeNummer = 1
Else
If IsNull(Me.RE_AuftragNr) Then
Stop
End If
Me.Rechnungsnummer_fortlaufend_txt = DMax("[RE_Rechnung_fortlaufendeNummer]", "Rechnungen", "[GA_Gutachter]=" & Me.GA_Gutachter) + 1Weiter oben schreibst du den Wert in Me.RE_Rechnung_fortlaufendeNummer und
hier nicht. Ist das gewollt?If Me.Dirty Then
DoCmd.RunCommand acCmdSaveRecordHier kannst du genauso
Me.Dirty = Falseverwenden. acCmdSaveRecord steht nur zur Verfuegung, wenn der Menuepunkt
vorhanden ist.Gruss - Peter
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com- Als Antwort markiert NicoNi Donnerstag, 20. Oktober 2011 09:53
-
Zunächst mal vielen Dank.
Die Aufteilung in BE/FE hat anscheinend wirklich in 1 Minte reibungslos geklappt.
Die Me.Dirty's habe ich probeweise auskommentiert.
Bei einem Test-Datensatz hat es jetzt reibungslos geklappt - Jubel!!!!!!!
Ich werde mal beobachten, wie es sich bei realen Daten bewährt.