Hallo liebes Forum,
ich bin relativer Neuling mit Access.
Leider habe ich zwei kleine Probleme mit meiner Datenbank. Vielleicht wisst ihr ja Rat.
1. Fehlermeldung: "Sie können diesem Objekt keinen Wert zuweisen."
Die Fehlermeldung kommt, wenn ich einen neuen Wert in mein Unterformular eingeben möchte.
Das ganze sieht folgendermaßen aus: Ich habe ein Hauptformular "frmUnternehmenÜberblick". Darin befindet sich ein ungebundenes Formular mit mehreren Registerkarten. Klicke ich eine Registerkarte an wird das entsprechende Unterformular aufgerufen. Die Unterformulare sind alle der Unternehmens ID "UntID" zugeordnet. Wenn ich den ersten Wert in der Registerkarte "Unternehmen" eingebe erscheint die Fehlermeldung. Klicke ich OK kann ich ganz normal einen Wert eingeben.
2. Wenn ich in den Unterformularen einen Wert eingebe und die Registerkarten wechsel sind alle Einträge verschwunden.
Zum Beispiel: Ich gebe in der Registerkarte "Unternehmen" Daten ein. Dann wechsle ich in die Registerkarte "Kosten" und wieder zurück zur Registerkarte "Unternehmen". Dort sind dann keine Einträge mehr vorhanden. Ich muss das Formular erneut öffnen, damit er die Einträge richtig anzeigt. Auch kann ich nur nach dem erneuten Öffnen neue Einträge machen, sonst verschwinden die Eingaben.
Ich glaube die Unterformulare geben ihre Daten nicht direkt weiter. Ich habe schon versucht das ganze mit .Requery zu reparieren, leider aber ohne Erfolg.
Ich habe euch die Datenbank mal mit einem Testdatensatz hochgeladen, falls ihr euch selbst ein Bild mach wollt.
PS: Leider habe ich die Datenbank auch ohne Datensätze nicht klein genug bekommen. Deswegen habe ich sie in zwei Dateien aufgeteilt.
Gruß
Tobias
Hi,
die Datenbank ist beschädigt und so nicht nutzbar, insbesondere fehlen die Formulare. Erstelle eine Test-DB, die nur die benötigten Objekte enthält, ein paar Testdaten sollten auch nicht fehlen. Dann komprimieren vor dem Zippen und bitte nicht zippen+raren, dann sollte das wohl klappen mit dem Upload. Die Grafiken dürften wohl verzichtbar sein.
Entschuldige, ich dachte ich könnte so die 300kb Sperre umgehen.
Jetzt habe ich alles rausgeschmissen, was man (glaube ich) nicht braucht.
Gruß
Tobias
Hi,
ZitatIch glaube die Unterformulare geben ihre Daten nicht direkt weiter.
es liegt an der Formularkonstruktion, d.h. daran, dass du das Hauptformular lediglich zur Verknüpfung einsetzt. Wenn du aber im ersten Unterformular einen neuen Datensatz eingibst, so betrifft das auch das Hauptformular, aber das bekommt das ja gar nicht mit, es bleibt auf "Neu" stehen, auch nach der Speicherung eines neuen Unternehmens. Die Verknüpfung kann aber doch nur funktionieren, wenn im Hauptformular ein gültiger Datensatz ausgewählt wurde. Daraus wird auch der 1. Fehler resultieren, auch wenn die Fehlermeldung keinen wirklich brauchbaren Hinweis gibt.
Fehler Nr. 2 kann hiermit aufgehoben werden:
Private Sub Form_AfterInsert()
Dim id As Long
id = Me.untID
Me.Parent.Requery
Me.Parent.Recordset.FindFirst "untid=" & id
End Sub
Möglicherweise musst du dir aber eine ganz andere Konstruktion überlegen, bspw. könntest du die Felder von frmUnternehmenDetails direkt ins Hauptformular auf Registerkarte-1 integerieren. Dann funktioniert das mit dem einen Ufo als Platzhalter für alle anderen zwar nicht mehr, aber das wäre wohl das kleinere Übel.
Hey MaggieMay,
vielen Dank für deine Antwort. Ich habe versucht den Code, den du vorgeschlagen hast, einzubauen. Leider funktioniert es nicht. Auch durch rumprobieren und Sachen austauschen hat sich kein Erfolg eingestellt.
Mir ist bei folgenden Zeilen etwas aufgefallen:
Me.Parent.Requery
Me.Parent.Recordset.FindFirst "untid=" & id
Nach Me.Parent. findet er die Befehle Requery und Recordset nicht. Jedenfalls schlägt er es mir bei der Eingabe nicht vor.
Beim Aufrufen des Formulars kommt folgende Fehlermeldung:
Zitat
Laufzeitfehler 2452
Der von Ihnen eingegebene Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft
Der Debugger beschwert sich bei der Zeile
Me.Parent.Requery
So sieht es eingebaut in meinem Code aus:
Option Compare Database
Option Explicit
Private Sub Form_Open(Cancel As Integer)
If Me.FilterOn Then
SetzteFormularKopf Me.sfmKopf.Form, "Überblick über das Unternehmen '" & UnternehmensName() & "'"
Me.NavigationButtons = False
Me.RecordSelectors = False
Me.ScrollBars = 2 'vertikal
Else
SetzteFormularKopf Me.sfmKopf.Form, "Überblick über alle Unternehmen"
End If
mpgDaten_Change
End Sub
Private Sub mpgDaten_Change()
Dim ctlDieses As Control
DoCmd.Echo False
With Me.sfmDetails
On Error Resume Next
.SourceObject = ""
.LinkChildFields = ""
.LinkMasterFields = "UntID"
On Error GoTo 0
Select Case Me.mpgDaten.Value
Case Me.pagKosten.PageIndex
.SourceObject = "frmKostenDetails"
.LinkChildFields = "KosUntIDRef"
Case Me.pagSubventionen.PageIndex
.SourceObject = "frmSubventionenEndlos"
.LinkChildFields = "KosUntIDRef"
Case Me.pagEinsparungen.PageIndex
.SourceObject = "frmEinsparungenBerechnet"
.LinkChildFields = "SparUntIDRef"
Case Me.pagUnternehmen.PageIndex
.SourceObject = "frmUnternehmenDetails"
.LinkChildFields = "UntID"
Case Me.pagMassnahmen.PageIndex
.SourceObject = "frmUmsetzungMassnahmenEndlos"
.LinkChildFields = "UmsUntIDRef"
Case Me.pagSteckbrief.PageIndex
.SourceObject = "frmSteckbriefDetails"
.LinkChildFields = "SteUntIDRef"
Case Else
MsgBox "Da ist wohl was schief gelaufen!", vbCritical
End Select
With .Form
If .Formularkopf.Controls.Count = 1 Then
.Formularkopf.Visible = False
Else
.sfmKopf.Visible = False
.sfmKopf.Height = 0
For Each ctlDieses In .Formularkopf.Controls
If TypeOf ctlDieses Is Label Then
ctlDieses.Top = 0
End If
Next
.Formularkopf.Height = 0
End If
End With
End With
DoCmd.Echo True
Form_AfterInsert
End Sub
Private Sub Form_AfterInsert()
Dim id As Long
id = Me.untID
Me.Parent.Requery
Me.Parent.Recordset.FindFirst "untid=" & id
End Sub
Das Hinzufügen von Datensätzen findet bei dir in Unterformularen statt
und dort gehört natürlich auch der diesbezügliche Code hin.
Es funktioniert ;D
Die Fehlermeldung am Anfang ist zwar noch nicht weg, aber das Umschalten der Registerkarten funktioniert.
Vielen lieben Dank!
Hallo,
Zitat von: TobiasR am September 13, 2015, 20:41:18Die Fehlermeldung am Anfang ist zwar noch nicht weg
Hast du das noch nicht versucht:
Zitatbspw. könntest du die Felder von frmUnternehmenDetails direkt ins Hauptformular auf Registerkarte-1 integerieren
?