Zum Inhalt springen

Spalte aus Listenfeld in Bericht


TaoNW

Empfohlene Beiträge

Wie kann ich den eine Spalte aus einem Listenfeld in einen Bericht übergeben.

Habe es versucht in dem ich im Bericht an die Stelle an der der Eintrag auftauchen soll folgendes eingetippt habe :

=[Formulare]![HF_Berichte]![bezeichnung]![1]

und was auch noch wichtig wäre:

in dem listenfeld sind mehrere datensätze drin,

also soll der bericht immer alle datensätze beinhalten die im listenfeld stehen.

gibt es da eine "non-select" anweisung.

bisher muss ich nämlich immer einen datensatz anklicken, sonst läuft es im bericht auf einen "#Fehler"

also ganz normal welches formular, welches feld und dann die "1" für die Spalte.

war aber nicht des rätsels lösung

thx 4 help

Link zu diesem Kommentar
Auf anderen Seiten teilen

AFAIK ist es nicht möglich eine Listenspalte direkt als Feld anzusprechen.

Einzelne Werte kann man über die Eigenschaft Column abfragen:


=[Formulare]![HF_Berichte]![Bezeichnung].[Column](1)

Dies betrifft dann die Daten der aktuell ausgewählten Zeile und der 2. Spalte (0 = erste, 1 = zweite usw.)

Ich hoffe das hilft weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

ich brauch aber alle datensätze die im listenfeld stehen, das heißt ohne selektion von einem datensatz

Woher kommen denn die Daten aus dem Listenfeld?

Du könntest evt. die Einschränkungen (where-Bedingung) die du für das Listenfeld machst, falls die Daten aus einer Tabelle/Abfrage kommen, als Filter für den Bericht setzten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die daten im Listenfeld kommen aus einer Suchabfrage.

Ich frag mit meiner Suchfunktion ab nach der Bezeichnung und optional nach Hersteller, Gruppe und Untergruppe.

Dann zeigt er mir alle gefundenen ergebnisse im Listenfeld an.

Und das was im Listenfeld steht soll per Button in einem Bericht angezeigt werden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

Die daten im Listenfeld kommen aus einer Suchabfrage.

Ich frag mit meiner Suchfunktion ab nach der Bezeichnung und optional nach Hersteller, Gruppe und Untergruppe.

Dann hast du ja eine Where-Bedingung, der die Daten einschränkt und brauchst nur genau diese Where-Bedingung als Filter beim Öffnen des Berichtes reinsetzten.

Du kannst die Bedingung ja, da wo du die erstellst in eine Stringvariable packen (falls du die nicht sowieso schon in einer Variablen hast) und beim Öffnen des Berichts wieder verwenden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

uff

ok ich muss mich jetzt zwar einfach mal bedanken das dies anscheinend so funktioniert.

aber ich muss dazu leider sagen : ich versteh nur bahnhof.

das einzige was ich in einem bericht hinbekomme ist einem feld zu sagen das es seine daten von der tabelle bekommt.

wie und wo bau ich den da jetzt eine bedingung ein.

sorry bin leider nur ein anfänger azubi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

aber ich muss dazu leider sagen : ich versteh nur bahnhof.

Ups, sorry. :rolleyes:

Im VBA rufst du ja einen Bericht so auf (z.B. im Klickereignis vom Button auf dem Formular):

DoCmd.OpenReport "Berichtsname", acNormal, , "Where-Bedingung"

Um Mal ein konkretes Beispiel zu nehmen:

DoCmd.OpenReport "Rechnung", acNormal, , "Rechnungsnr = " & txtRechnungsnummer.Value

Das öffnet einen Bericht mit genau einem Datensatz und zwar soll die Rechnungsnummer den Wert haben, der im Textfeld txtRechnungsnummer steht. Die Where-Bedingung in dem Aufruf ist genau das gleiche, wie die Where-Bedingung in einer SQL-Anweisung.

Du schränkst ja die Daten, die in deinem Listenfeld erscheinen sollen durch die Where-Bedingung der Suchabfrage ein. Jetzt brauchst du eigentlich nur noch diese Where Bedingung nehmen und in den DoCmd.OpenReport als Where-Bedingung eintragen. Damit sollte dann der Bericht auf die gleichen Datensätze eingeschränkt sein, die auch in deinem Listenfeld sind.

Die Where-Bedingung kannst du auch in eine Stringvariable speichern. Um bei dem Beispiel von oben zu bleiben:

Dim Variable as String

Variable="Rechnungsnr = " & txtRechnungsnummer.Value

DoCmd.OpenReport "Rechnung", acNormal, , Variable

Wenn also in dem Textfeld z.B. eine 5 drinstand, steht in Variable "Rechnungsnr=5" drin. Du kannst also die Where-Bedingung der Suchabfrage einfach in eine Variable speichern und in der DoCmd.OpenReport Anweisung wieder einsetzten.

Ich hoffe das war etwas verständlicher :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

DoCmd.OpenReport "A_Bestand_Abfrage", acViewPreview, , combine_search(Me.Suchen)

so sieht jetzt das ganze aus.

die funktion combine_search funktioniert ganz toll, diese benutz ich auch für das Listenfeld.

jedoch bekomm ich jetzt immer die Fehlermeldung:

Laufzeitfehler '94':

Unzulässige verwendung von Null.

genau an der stelle an der der obrige quelltext steht mängelt er mir die fehlermeldung an.

ich hab auch mal ohne me.suchen probiert, aber dann heißt es das die funktion nicht optional wäre.

kann ich die funktion hier nicht benutzen? diese ist ja nicht formular abhängig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

kann ich die funktion hier nicht benutzen? diese ist ja nicht formular abhängig.

Was macht die Funktion? Was genau ist Me.Suchen und was und von welchem Typ gibt die Funktion zurück?

Poste bitte mal den genauen Wert, den die Funktion bei einem Durchlauf zurückgibt (Kannst du ja mal mit msgbox(combine_search(Me.Suchen)) ausgeben lassen).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was macht die Funktion? Was genau ist Me.Suchen und was und von welchem Typ gibt die Funktion zurück?

Poste bitte mal den genauen Wert, den die Funktion bei einem Durchlauf zurückgibt (Kannst du ja mal mit msgbox(combine_search(Me.Suchen)) ausgeben lassen).

__________________

Also der Fehler is weg.

aber der bericht ist leer.

die funktion macht folgendes :

sie sucht in der tabelle t_bestand alle datensätze die mit der sucheingabe (in dem fall hier das Feld Forms!HF_Berichte!Suchen )

die funktion combine_search gibt als rückgabewert einen string zurück

wenn ich msgbox(combine_search(Me.Suchen)) ausprobiere gibt mir das einen ewig langen sql text aus

und wie sag ich dem bericht jetzt das er die einzelnen felder aus dem string lesen soll ?

sorry wenn ich zuviel frag

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

die funktion macht folgendes :

sie sucht in der tabelle t_bestand alle datensätze die mit der sucheingabe (in dem fall hier das Feld Forms!HF_Berichte!Suchen )

die funktion combine_search gibt als rückgabewert einen string zurück

Das heißt also, das die Funktion das Suchergebnis, also die einzelnen Werte zurückgibt?

Für den docmd.openreport brauchst du aber eine WHERE-Bedingung, wie sie auch in der SQL-Anweisung verwendet wird, also in der Art: "Feld1=Wert1 AND Feld2=Wert2", die Werte alleine reichen nicht.

Evt. kannst du in der Funktion nachschauen, wie das da eingeschränkt wird und das in deinen DoCmd.OpenReport übernehmen.

EDIT: Ups, hattest ja auch noch editiert :D

Je nachdem wie die SQL-Anweisung aussieht könntest du den String nach dem Text "WHERE" druchsuchen und alles bis dahin abschneiden damit hättest du deine WHERE-Bedingung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich glaub ich muss noch bissl weiter im netz und in den büchern durchschnuppern, weil jetzt fängts bei mir an richtig neblig zu werden.

wie ich da jetzt was mit where bedingung abschneiden soll und umgestalten blick ich jetzt gar nicht mehr.

aber immerhin weiß ich jetzt schonmal wies gehen soll.

danke sehr.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von TaoNW

wie ich da jetzt was mit where bedingung abschneiden soll und umgestalten blick ich jetzt gar nicht mehr.

Schau dir dazu mal die Funktionen Mid(string, start[, length]) und len(string) an (ist in der Accesshilfe ganz gut beschrieben). Mit mid kannst du bestimmte Stücke von einem String auslesen und mit len die Länge eines Strings bestimmen.

z.B. Variable=mid(Text, 5, 8)

Würde aus der Variable Text 8 Zeichen ab dem 5. Zeichen in Variable reinschreiben. Damit wäre das machbar. In einer Schleife nach dem Teilstring "WHERE" suchen und den Teil den du brauchst in eine Variable speichern.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...