Liebe/-r Experte/-in,
ich habe eine Datenbank in Access 2003 erstellt und stehe nun vor einem vermeintlich kleinen Problem, das ich dennoch nicht lösen kann.
Ein Endlosformular (frmListe) greift als Datenherkunft auf eine Abfrage (reqListe) zurück.
Die Abfrage enthält (neben dem Schlüssel) eine Spalte „Name“ und eine Spalte „Initialen“.
In dem Formular soll nun ein Textfeld den Inhalt nach dem Schema „Name (Initialen)“ enthalten. Da das Feld „Initialen“ aber auch leer sein kann muss dies zunächst abgefragt werden.
So sah mein Versuch aus:
=Wenn(Nz([reqListe]![Initialen];’’)’’;[reqListe]![Name]+’ (’+[reqListe]![Initialen]+’)’;[reqListe]![Name])
Die Fehlermeldung lautet: „Das Objekt entält nicht das Automatisierungsobjekt reqListe.“
ich habe dein Problem noch nicht ganz verstanden, Wahrscheinlich, weil ich die Notation „Name(Initialen)“ nicht richtig aufschlüsseln kann.
Mein Deutungsversuch ist folgender - in Worten: Zeige im Textfeld den Namen, der zu einer bestimmten Initiale gehört.
Ist das richtig verstanden?
Wenn ja, dann würde ich folgendes machen: Eine Abfage bauen, die alle Sätze enthält, wo die Initialen nicht leer sind, und ausgeben die Felder ‚Initialen‘, den zugehörigen ‚Namen‘ und andere Felder (hier nicht behandelt).
Eine solche Abfrage enthält Sätze mit gefüllten Initialen und nur diese Sätze(!). Namen ohne Initialen werden nicht angezeigt.
Wenn’s das war, freue ich mich. Wenn ich dich falsch oder gar nicht verstanden habe, dann bitte erklären, am besten mit einigen Beispielsätzen.
mach Dir das Leben nicht so schwer und trage als Kriterium in der Abfrage in das Feld Initialien ein:
IstnichtNull. Damit werden nur die Datensätze angezeigt in denen etwas eingetragen ist.
Abfrage (reqListe) enthält (neben dem Schlüssel) eine Spalte „Name“ und eine Spalte „Initialen“.
In dem Formular soll nun ein Textfeld den Inhalt nach dem
Schema „Name (Initialen)“ enthalten.
=Wenn(Nz([reqListe]![Initialen];’’)’’;[reqListe]![Name]+’
(’+[reqListe]![Initialen]+’)’;[reqListe]![Name])
Was mache ich falsch? Wie mache ich es richtig?
Hallo Kevin,
zunächst der Hinweis, dass Textfelder nicht durch „+“ zusammengeführt werden sollten, sondern mittels „&“-Zeichen. Das könnte schon die Fehlermenge reduzieren.
Anonsten wird m. E. der Verweis auf die Abfrage „[reqListe]!..“ das eigentliche Problem darstellen.
Du kannst die zugrundeliegende Abfrage im Formular nicht über den Tabellen/Abfragenamen ansprechen, da die Abfrage so nicht adressierbar ist.
Nutze einfach nur den Feldnamen in der Abfrage, das löst MSAccess automatisch auf. Alles andere bedarf der vollständigen Syntax mit allen Verweisen.
Ein Endlosformular (frmListe) greift als Datenherkunft auf
eine Abfrage (reqListe) zurück.
Die Abfrage enthält (neben dem Schlüssel) eine Spalte „Name“
das Wort „Name“ ist ein reservierter Begriff in Access und sollte niemals für Feldbezeichnungen etc. verwendet werden!
und eine Spalte „Initialen“.
In dem Formular soll nun ein Textfeld den Inhalt nach dem
Schema „Name (Initialen)“ enthalten. Da das Feld „Initialen“
aber auch leer sein kann muss dies zunächst abgefragt werden.
So sah mein Versuch aus:
=Wenn(Nz([reqListe]![Initialen];’’)’’;[reqListe]![Name]+’
(’+[reqListe]![Initialen]+’)’;[reqListe]![Name])
Die Fehlermeldung lautet: „Das Objekt entält nicht das
Automatisierungsobjekt reqListe.“
pack auf das Formular ein ungebundenes Textfeld.
Vom Prinzip hast Du das schon, wo Du Deine Wenn-Anweisung reingepackt hast. Die nummst Du nur wieder raus.
Zusätzlich packst Du noch die beiden Felder Name und Initialen auf das Formular mit drauf. Diese Felder machst Du aber unsichtbar (Visible = false).
Nun gibt es auf der Form ein Ereignis (Current).
Hier packts Du dann ein bißchen Code rein.
Ungefähr so:
if nz(Feld_Init,"") = „“ then
Feld_Anzeige = Feld_Name
else
Feld_Anzeige = Feld_Name & " (" & Feld_Init & „)“
endif