PDA

Vollständige Version anzeigen : Berichtsvorschau von Daten aus ListenFeld


Max0
06.07.2006, 08:30
Huhu, hab da mal eine Frage an euch..

Ich habe mehrere Datensätze in einem Listenfeld stehen, teilweise auch zu einem Kunden mehrere, das sieht folgender maßen aus..

Kunde1 Artikel3
kunde2 Artikel1
Kunde3 Artikel2
Kunde1 Artikel2
usw...

Nun möchte ich genau zu dem Kunden den ich im listenFeld angeklickt habe meinen Bericht öffnen... mache ich einen normalen Button zur Berichtsvorschau öffnet er halt für jeden Kunden den Bericht und in alphabetische Reihenfolge, würde halt gerne nur einen Bericht haben... und zwar den im Listenfeld ausgewählten Kunden.. wäre super wenn da evntl jemand ein oder zwei Denkanstöße geben könnte

freue mich auf antworten

mfg maxi

J_Eilers
06.07.2006, 08:35
Hi,

Dafür kann man die WhereCondition der OpenReport-Methode verwenden:

DoCmd.OpenReport "DeinBericht", acViewPreview, , "DeinFeld = '" & Me!Listenfeld & "'"

Worf1001
06.07.2006, 08:42
Hallo Maxi,

Mit der OpenReport-Methode kannst Du den Bericht öffnen und zusätzlich Bedingungen angeben. Die Syntax lautet:


DoCmd.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)


Nun, ich nehme mal an, dass es in Deinem Listenfeld 3 Felder gibt: Kunden-ID (nicht angezeigt), Kunde, Artikel.

Dann würde das in etwa so aussehen:


DoCmd.OpenReport "Berichtname", acViewPreview, "IDFeldname = '" & Me!Listenfeld.Column(0) & "'"

Max0
06.07.2006, 09:02
Huhu, ja eine Id hab ich natürlich die ausgeblendet ist, allerdings besteht das Listenfeld aus 8 Spalten, gibt noch paar mehr infos die noch daneben stehen und die ID bezieht sich nicht auf den Kunden, deshalb kann ich die ID auch nicht als Feldnamen nehmen.


um das nochma zu verdeutlichen könnte mein Listenfeld zb. so aussehen

OpNr Kunde Artikel Kosten etc

1 Kunde1 Artikel3 50
2 kunde2 Artikel1 60
3 Kunde3 Artikel2 80
4 Kunde1 Artikel2 90
....



Und ich muss nun halt wenn ich den ersten Datensatz mit Kunde1 anklicke und dann den Button anklicke automatisch den Bericht vom Kunden 1 in dem dann halt OPNr 1 und 4 stehen würden öffnen, weiss nur nicht was ich da als
Feldname eingeben soll... wenn ich die Bezeichnung vom KundenFeld eingebe öffnet der relativ unbeeindruckt wieder nach alphabetische reihenfolge und zwar alle Berichte :(

mfg Maxi

Pascalx
06.07.2006, 09:13
Guten Morgen

habe momentan ein ähnliches Problem, ich möchte zb. per Button einen Datensatz aus einem Listenfeld löschen, der Datensatz-Lösch Button über den assistenten fragt mich zwar ob ich den angeklickten Datensatz des Listenfelds löschen möchte, allerdings bleibt dieser bei anklicken von Ja immer noch erhalten... Die Datensätze vom Listenfeld stehen bei mir in einer Tabelle... gibt es evntl ne Möglichkeit den angeklickten Datensatz im Listenfeld dann direkt in der Tabelle zu löschen?

Hoffe schweife nicht zu sehr vom eigentlichen Thema ab :p
dachte gerade passt hier ganz gut rein.. geht ja in die Richtung

Worf1001
06.07.2006, 09:14
Hallo,

also es ist einfach eine eindeutige Nummer oder Bezeichnung nötig, damit der Bericht nur einen bestimmten Kunden öffnen kann. Ist die Kundenbezeichnung beispielsweise eindeutig, dann kannst Du den Bericht ja damit öffnen:


DoCmd.OpenReport "Berichtsname", acViewPreview, "KundenName = '" & Me!Listenfeld.Column(1) & "'"

Worf1001
06.07.2006, 09:15
Pascal, mache doch ein eigenes Thema, passt nicht wirklich hier hin und verwirrt nur...

Max0
06.07.2006, 09:21
Hm und wenn ich nun dann einfach nur einen Bericht zu der ausgewählten OpNr haben wollen würde
also um das Bsp. nochmal aufzugreifen bei so einem Listenfeld..

OpNr Kunde Artikel Kosten etc

1 Kunde1 Artikel3 50
2 kunde2 Artikel1 60
3 Kunde3 Artikel2 80
4 Kunde1 Artikel2 90
....

zb nur den Bericht mit OpNr 1 angezeigt zu bekomme... dann müsste ich doch mit folgendem Quellcode richtig liegen oder?

DoCmd.OpenReport "Berichtname", acViewPreview, "OpNr = '" & Me!Listenfeld.Column(0) & "'"

oder?

So klappt das bei mir irgendwie auch nicht, habe die OpNr aber auch nur in einer Tabelle stehen und im Listenfeld ist sie ausgeblendet?
Versteh momentan nicht so ganz wo mein Fehler liegt :/

J_Eilers
06.07.2006, 09:24
@Max0 Sind alle benötigten Informationen im Listenfeld vorhanden? In welcher Spalte stehen welche Werte und für welches Tabellenfeld sollen sie als Bedingung dienen? Um was für Datentypen handelt es sich dabei.

@Pascalx Ist der Datensatz wirklich noch in der Tabelle oder wird er vielleicht nur noch im Listenfeld angezeigt? Versuche mal folgenden Code

Dim strSQL As String

strSQL = "DELETE * FROM DeineTabelle WHERE ID = " & Me!Listenfeld
DBEngine(0)(0).Execute strSQL, dbFailOnError

Me!Listenfeld.Requery

Worf1001
06.07.2006, 09:25
Hallo Max,

wie sieht die Datenherkunft für den Bericht aus?

Max0
06.07.2006, 09:33
Also meine erste Spalte ist die fortlaufende OpNr

Dann kommen 8 weitere Spalten

Kunde opname Preis anfangsDatum dauer endDatum GesamtPreis opart
text text Währung Datum zahl datum zahl text

Die eingabe dieser daten überfolgt über ein formular, über dieses formular werden die daten in eine tabelle geschrieben, aus dieser tabébelle wiederum holt sich das listenfeld die daten.
Ich hätte halt gerne das ich im listenfeld eine op anklicken kann und sie mir dann per button direkt in berichtsform angezeigt wird.

Der Bericht bezieht seine Daten ebenfalls aus der Tabelle wo das Liostenfeld seine Daten herholt.

Worf1001
06.07.2006, 09:51
Hallo Maxi,

probiers mal so:


DoCmd.OpenReport "Berichtname", acViewPreview, "OpNr = " & Me!Listenfeld.Column(0) & "'"

Max0
06.07.2006, 10:04
Huhu

DoCmd.OpenReport "Berichtsname", acViewPreview, "OpNr = " & Me!Listenfeld.Column(0)

bleibt er leider auch völlig unbeeindruckt von, öffnet wieder alle berichte alphabetisch

Worf1001
06.07.2006, 10:07
Hallo,

also meinte ich:


DoCmd.OpenReport "Berichtname", acViewPreview, "OpNr = " & Me!Listenfeld.Column(0) & "'"


Aber, sonst fällt mir gerade nichts mehr ein. Vielleicht sollte ich mal Deine Datenbank sehen.

J_Eilers
06.07.2006, 10:10
Vielleicht meintest du ja auch ein:

DoCmd.OpenReport "Berichtname", acViewPreview, , "OpNr = '" & Me!Listenfeld & "'"

? Denn sonst übergibst du einen Filter und keine WhereCondition. Wenn die gebundene Spalte auf 1 steht, kannst du dir auch das Column sparen und das Hochkommata gehört auch vor den Wert ;)

Worf1001
06.07.2006, 10:13
Stimmt, das kommt davon wenn man nicht genau liest :grins:

Maxo
06.07.2006, 10:21
Huhu also wenn ich den quellcode von J_Eilers nehme dann sagt der debugger mir "Datentypen in kriterienausdruck unverträglich"

Worf1001
06.07.2006, 10:22
Probiere es mal mit Me!Listenfeld.Column(0)

J_Eilers
06.07.2006, 10:27
Oder so, falls es sich um eine Zahl handelt:

DoCmd.OpenReport "Berichtname", acViewPreview, , "OpNr = " & Me!Listenfeld

Maxo
06.07.2006, 10:38
Huhu, super nu geht es, scheint evntl tatsächlich an der Zahl gelegen zu haben, ich danke euch herzlich, super das ihr euch soviel Zeit dafür genommen haben :)

alles gute Maxi