Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Fehlermeldungen bei Texteingabe

Begonnen von MarkusR, Mai 23, 2013, 11:24:22

⏪ vorheriges - nächstes ⏩

MarkusR

Hallo zusammen,

ich habe hier zwei seltsame Fehlermeldungen bei meinen Formularen:

1. "Sie können diesem Objekt keinen Wert zuweisen":
Diese Fehlermeldung kommt, wenn ich per Hand Text in ein Textfeld eingeben möchte. Und zwar sieht das ganze wie folgt aus: Ich habe ein ungebundenes Formular. In diesem Formular habe ich ein Listenfeld (das mir alle Datensätze aus einer Tabelle, tblAngebote, anzeigt) und ein Unterformular (mit Datensatzherkunft auch tblAngebote), das mit dem Listenfeld über angID verknüpft ist. Das Unterformular selber hat auch noch zwei Unterformulare, die hier aber eigentlich keine Rolle spielen.
Jedenfalls habe ich in dem am Listenfeld verknüpften Ufo 4 Felder: angID (das Feld ist gesperrt, wird ja automatisch zugewiesen), ein Kombifeld angkndID_F (da kann ich aus einer verknüpften Tabelle, tblKunden, einen Kunden auswählen), ein Textfeld angNummer (hier wird eine Angebotsnummer eingetragen) und ein Feld für das Datum angDatum.
Öffnet sich das Formular steht bei angID "Neu" und die anderen Felder sind leer (Ausnahme Kombifeld, hier habe ich einen Standardwert). Möchte man jetzt Text in ein leeres Feld eingeben kommt eben die oben genannte Fehlermeldung. Klickt man diese weg, so steht der Text trotzdem in dem Textfeld (man kann dem Feld also sehr wohl einen Wert zuweisen!).
Seltsam ist zudem, dass das nur Auftritt, wenn man das Formular gerade geöffnet hat. Hat man die Fehlermeldung weggeklickt, das Angebot erstellt und geht dann zu einem neuen Datensatz, erscheint die Fehlermeldung nicht mehr.


2. "Sie wollten den Null-Wert einer Variablen zuweisen, die nicht den Datentyp Variant hat":
Anderes Formular, gleicher Aufbau wie eben: Ein ungebundenes Formular mit Listenfeld und verknüpftem Ufo. Wenn ich bei einem neuen Datensatz etwas eingeben möchte (egal in welchem Feld) kommt diese Fehlermeldung. Klickt man die Weg, wurde der Text trotzdem angenommen. Und auch hier tritt der Fehler nur auf, wenn man das Formular grad geöffnet hat. Beim nächsten neuen Datensatz erscheint die Fehlermeldung nicht mehr.


Hab schon einiges ausprobiert und die Suche hat mir auch nichts gebracht. Kann mir vielleicht jemand helfen? Hoffe die Informationen reichen aus, ansonsten kurz nachfragen, dann erläuter ich noch weiter!

Danke im Voraus! Gruß,
Markus

database

Hallo,

zu 1.

Hast du beim Öffnen des Formulars irgendeinen Filter aktiviert?
Du schreibst, dass nach dem Öffnen des Formulars im UFo ein neuer DS angezeigt wird - das ist eigentlich nicht normal, hier sollte der erste DS der Tabelle sichtbar sein.

zu 2.

hast du in den Tabellen irgendwelche Felder stehen, bei denen du NULL-Werte ausschließt (Eingabe erforderlich 'ja')?

MarkusR

Guten Morgen Peter,

zu 1.

nein, da ist kein Filter aktiviert. Hatte es sogar versucht mit

Private Sub Form_Current()
    DoCmd.RunCommand acCmdRecordsGoToFirst
End Sub


Aber er zeigt beim öffnen trotzdem einen neuen Datensatz an. Könnte das vielleicht an der Verknüpfung mit dem Listenfeld liegen? Das Listenfeld sieht so aus:

SELECT Max(tblAngebote.angID)+1 AS AngebotID, 'Neu...' AS AngebotsNr, '' AS Datum, '' AS ArtikelNr
FROM tblAngebote
UNION
SELECT tblAngebote.angID, tblAngebote.angNummer, tblAngebote.angDatum, tblArtikel.artArtikelNr
FROM tblArtikel RIGHT JOIN (tblAngebote LEFT JOIN tblArtikel2Angebote ON tblAngebote.angID = tblArtikel2Angebote.a2aangID_F) ON tblArtikel.artID = tblArtikel2Angebote.a2aartID_F
WHERE angNummer LIKE '**' AND angDatum LIKE '**' AND artArtikelNr LIKE '**'
ORDER BY AngebotID DESC;


Ich habe also im Listenfeld die Zeilen absteigend sortiert nach der ID und ganz oben ist eine "neue" ID. Hm...ne, grad mal die Sortierung umgekehrt und er zeigt beim öffnen immer noch einen neuen Datensatz an. Wenn ich aber nur das Unterformular öffne, zeigt er mir den ersten Datensatz an. Muss also ja doch irgendwie an dem Hauptformular oder dem Listenfeld liegen.


zu 2.

nein, solche Felder habe ich nicht. Allerdings bekomme ich gerade den Fehler nicht mehr reproduziert. Nun kommt der gleiche Fehler wie in dem anderen Formular "Sie können diesem Objekt keinen Wert zuweisen".


Keine Ahnung, woran das liegen soll. Hat noch jemand eine Idee?? Vielen Dank im Voraus!

Beste Grüße
Markus

Jonny

Hallo,
wenn ich das richtig sehe kann kein DS kommen.
Max(tblAngebote.angID)+1
Dadurch willst du ja im UFO den DS mit der letzten angID + 1 anzeigen.
Also wenn du 100 ID´s hast die 101 ID.

Gruß

Johann

MarkusR

Hallo Johann,

daran liegt es leider auch nicht. Selbst wenn dem so wäre, müsste er beim Ufo ja trotzdem den ersten Datensatz anzeigen. Ich habe auch probeweise das Max(angID)+1 rausgenommen und den Code so gelassen:

SELECT tblAngebote.angID, tblAngebote.angNummer, tblAngebote.angDatum, tblArtikel.artArtikelNr
FROM tblArtikel RIGHT JOIN (tblAngebote LEFT JOIN tblArtikel2Angebote ON tblAngebote.angID = tblArtikel2Angebote.a2aangID_F) ON tblArtikel.artID = tblArtikel2Angebote.a2aartID_F
WHERE (((tblAngebote.[angNummer]) Like '**') AND ((tblAngebote.[angDatum]) Like '**') AND ((tblArtikel.[artArtikelNr]) Like '**'))
ORDER BY tblAngebote.angID;


Aber das ändert nichts an der Tatsache, dass er beim öffnen auf einen neuen Datensatz springt und die Fehlermeldung erscheint, wenn man dort Daten eingeben möchte!

Gruß
Markus

MarkusR

Was wohl geht, ist dass ich beim Listenfeld einen Standardwert angebe. Dann öffnet er den Datensatz mit dieser als Standardwert angegebenen ID. Um dann einen neuen Datensatz anzulegen muss man dann auf "Neu..." klicken und dann kommt beim Daten eingeben auch keine Fehlermeldung mehr. (Die kam ja wie oben geschrieben nur beim ersten öffnen)
Aber damit umgeht man die Fehlermeldung ja nur, anstatt sie zu beheben. Weiß nicht, ob das der Sinn der Sache wäre...

database

#6
Hallo,

die WHERE Klausel deiner Abfrage erscheint mir aber auch irgendwie seltsam ... was bezweckst du mit   LIKE '**' ?

Wie lautet die Datenherkunft des Unterformulars und wie hast du die Verknüpfung zwischen HAFo und UFo deklariert?

Das Ufo müsste m.E. über ein geeignetes Fremdschlüsselfeld zur gebundenen Spalte des Listenfeldes verknüpft sein - wenn das überhaupt so machbar ist ... k.A. sowas habe ich noch nie versucht.
Standard ist das jedenfalls keiner.
Wenns so nicht klappt müsstest du ein Feld im HAFo mitführen, das je nach angeklicktem DS im Listenfeld dessen ID(PK) übernimmt und nach Auswahl im Listenfeld das UFo aktualisieren.
Hierbei wird die HAFo / UFo - Verknüpfung nicht übers Listenfeld sondern eben dieses zusätzliche Feld hergestellt

ZitatWas wohl geht, ist dass ich beim Listenfeld einen Standardwert angebe. Dann öffnet er den Datensatz mit dieser als Standardwert angegebenen ID
Lege mal ins Klickereignis des Listenfeldes ein Requery aufs UFo (ohne den Standardwert)

MarkusR

Hi,

die WHERE Klausel dient dazu, dass mir auch Datensätze angezeigt werden, die z.B. keine Zeichnungsnr haben (unvollständige Datensätze würden ohne diese WHERE Klausel nicht angezeigt werden).

Die Datenherkunft des Ufos ist tblArtikel. Das HaFo selber ist ungebunden: auf dem HaFo befinden sich das Listenfeld und das UFo, die über die artID miteinander verknüpft sind. Hab die Idee aus einem Buch von Lorenz Hölscher. Kam mir so vor, als wäre sowas Gang und Gebe!
Hm, sehe eigentlich keinen Unterschied, ob ich das UFo mit dem Listenfeld verknüpfe oder noch ein Textfeld dazwischen setze...aber werds natürlich mal probieren, vielleicht hilfts ja.

Gruß
Markus

MarkusR

Nö...ändert nichts. Funktioniert genauso (macht ja im Grunde auch nichts anderes) und Fehlermeldung kommt immernoch :(

DF6GL

Hallo,

lad das DIng doch mal hoch, wie immer datenreduziert, repariert/komprimiert und gezippt...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MarkusR

Guten Morgen,

hab jetzt mal alle Tabellen, Abfragen und Formulare (in einer abgespackten Version), die benötigt werden um das ganze nachzuvollziehen in eine Datenbank gepackt (datenreduziert, repariert und gezippt!). Wenn Ihr dann das "Navigationsformular" öffnet, könnt ihr oben die ersten zwei Menüpunkte auswählen: "Artikel anlegen & bearbeiten" und "Angebot erstellen". Den Rest habe ich rausgelassen.
Ich habe drei Beispielartikel und ein Beispielangebot erstellt...

Noch mal vielen Dank für Eure Hilfe!

Gruß
Markus

[Anhang gelöscht durch Administrator]

DF6GL

#11
Hallo,

wenn es sich um den Effekt (Fehlermeldung)  handelt, der beim erstmaligen Anlegen eines neuen Angebotes (Klick auf Neu und dann Auswahl eines Kunden) nach dem Start der DB auftritt, dann kann der so eliminiert werden:




Im Form "frmAngeboteErstellen":


Verknüpfung im UFO-Steuerelement löschen.

Private Sub lstAngebote_Click()
Me!frmArtikel2Angebote.Form.Filter = "angID = " & Me!lstAngebote.Column(0)
Me!frmArtikel2Angebote.Form.FilterOn = True
  ' Me!frmArtikel2Angebote.Form.Refresh
End Sub

und im Form "frmArtikel2Angebote":

Private Sub Form_AfterUpdate()
Me.Parent!lstAngebote.Requery
End Sub


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

database

Hallo,

ich habe nur ganz kurz mal das Ding angeschaut.
M.E. liegt es an dieser leidigen Verknüpfung zum Listenfeld.
Auch wenn du einen neuen Datensatz für die tblAngebote erstellst bleibt diese Verknüpfung ja aufrecht.
Und wie sich das für mich darstellt, wird die AngID mit sich selbst verknüpft.
Das Listenfeld wird nicht entleert und deshalb ist zwischen dem neuen Datensatz und dem Listenfeld keine Übereinstimmung vorhanden.
Wenn du diese Verknüpfung rausnimmst, kannst du ganz normal einen neuen Angebotsdatensatz erstellen und die Felder ausfüllen.

Das Listenfeld kannst du ja lassen und z.B. ins Doppelklick-Ereignis per VBA einen Filter einbauen, der bei Bedarf das gewünschte Angebot im UFo darstellt.

Das nächste Problem ist das UFo mit den Artikeln, das auch mit der AngID verknüpft ist.
Du bekommst so ja nur Artikel zur Auswahl angeboten, die sich in einem bestehenden Angebot befinden - was aber bei einem NEUEN Anbot ja nicht der Fall sein kann.



MarkusR

Hallo,

ersteinmal wieder vielen Dank für Eure Hilfe!

@DF6GL
Hab Deinen Code eingebaut und die Verknüpfung rausgenommen -->> funktioniert prima! Vielen Dank!

@database
Das das an dem Listenfeld liegt, stimmt. Mit der Lösung von DF6GL funktioniert das wunderbar. Das Ufo mit den Artikeln ist richtig verknüpft. Dort wähle ich zu jedem Angebot, dass ich erstelle, die Artikel über das Kombifeld aus. Das Kombifeld hat als Datenherkunft die tblArtikel, somit werden alle Artikel angezeigt.

MarkusR

#14
Da wird ja der Hund in der Pfanne verrückt...

Jetzt wollte ich beim Formular zum Artikel anlegen & bearbeiten das genauso machen wie beim Formular zum Angebote erstellen. Verknüpfung vom UFo entfernen, beim Listenfeld die Sub zum Filtern einfügen und beim UFo nach Aktualisierung das Listenfeld aktualisieren. Und was kommt? Ein Runtime Error, der Access schließt:

Microsoft Visual C + + Runtime Library
Program: C:...

This application has requested the Runtime to terminate it in an unusual way.
Please connect the....blabla

Also überprüft woran es liegt und siehe da, die Sub "nach Aktualisieren" im UFo ist schuld!

Private Sub Form_AfterUpdate()
   Me.Parent!lstArtikel.Requery
End Sub


Wenn ich die raus lasse, kommt der Fehler nicht. Lässt sich auch in der hochgeladenen Beispiel DB reproduzieren...jemand ne Ahnung, woran das liegen kann?


Edit:
Hm...beim UFo ist noch eine Sub Form_Current drin. Diese zwei Subs scheinen sich wohl nicht zu vertragen. Lasse ich die Form_Current Sub raus, kommt der Runtime Error nicht.