Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Namensliste in einem Unterbericht hintereinander aufzählen

Begonnen von Pergus, März 21, 2011, 23:17:56

⏪ vorheriges - nächstes ⏩

Pergus

Hallo an Alle!

Habe folgende Problematik:

In der Datensatzquelle des Berichts 'rptEinzelbericht' habe ich ich die Abfrage 'sqryMitgliederStempelungen' folgendermaßen strukturiert:

Tabelle:'tblMitgliederStempelungen' (n), StempelungsID (Kombischlüssel) , MitgliedsID (Kombischlüssel)
Tabelle:'tblMitglieder' (1), MitgliedsID (Primärschlüssel), Nachname, Vorname

Als Kriterium der StempelungsID habe ich folgendes festgelegt: [Formulare]![frmStempelungen]![StempelungsID]

Da der Bericht 'rptEinzelbericht' nur eine einzige Seite lang werden soll, und ich die jeweiligen Mitglieder, die an einem Einsatz oder einer Übung teilgenommen haben, auflisten soll, suche ich nach einer VBA-Lösung, um diesem Problem Herr zu werden.

Derzeit habe ich den Unterbericht mit dem Etiketten-Assistent erstellt (wäre auch evtl. OK, doch die Liste ist vom Platz her gesehen, sehr beschränkt und dadurch dass die Namen verschiedene Längen haben, musste ich dementsprechende Abstände einkalkulieren!).

Daher meine Vorstellung, ob folgendes möglich ist (mit VBA!): z.B. Wurst Hans, Blau Heiner, Weiß Herbert, usw.

Auf Eure Hilfe hoffend bedanke ich mich im Voraus

Pergus
Win7, Office Professional 2010

MzKlMu

Gruß Klaus

Pergus

Hallo MzKlMu,

danke daß Du Dich wieder meinen "Problemchen" stellst und auch schon prompt eine Lösung vorschlägst!  8)
Werde diese etwas später ausprobieren, da ich jetzt zum Zahnarzt muß!  :-X

Inzwischen grüße ich Dich

Pergus
Win7, Office Professional 2010

Pergus

Hallo MzKlMu,

leider bin ich in VBA nicht recht fit, habe daher noch Fragen zu Deinem Lösungsvorschlag:

Mein Bericht 'rptEinzelbericht' hat als Datensatzquelle eine Abfrage ('sqryMitgliederStempelungen'), und zwar folgend aufgebaut:

Tabelle:'tblMitgliederStempelungen' (n), StempelungsID (Kombischlüssel) , MitgliedsID (Kombischlüssel)
Tabelle:'tblMitglieder' (1), MitgliedsID (Primärschlüssel), Nachname, Vorname

Als Kriterium der StempelungsID habe ich folgendes festgelegt: [Formulare]![frmStempelungen]![StempelungsID],
da der Bericht ('rptEinzelbericht') von einem Formular ('frmStempelungen') per Button-Click geöffnet wird und somit garantiert wird,
dass sich die Abfrage auch die Daten der aktuellen StempelungsID ausgibt.

??? Wo gebe ich den Aufruf der Prozedur ein?

Die auszugebenden Daten (in diesem Fall Mitgliedsnamen als '=Glätten([Nachname] & " " & [Vorname])' im 'Mitglied_Textfeld') befinden sich in einem Unterbericht 'srptMitgliederStempelungen', der als Datenquelle 'sqryMitgliederStempelungen' hat, also die selbe des Berichts 'rptEinzelbericht', aber ohne Kriterium.

Ich würde Dir gerne die Datenbank hochladen, darf es aber leider nicht! Könnte evtl. nur die beschriebene Situation erneut zusammenstellen mit ein paar erfundenen Daten füllen und diese dann heute abend hochladen, sollte es helfen, Dir einiges an Tipparbeit zu sparen!

Danke schon mal vorab

Pergus
Win7, Office Professional 2010

Pergus

Hallo Leute!

Wollte eine leere DB basteln und hochladen, mit der ich mein Problem erklären wollte, bin aber beim kopieren der bestehenden tbl, qry, frm, rpt, usw. auf weitere Anomalien gestoßen!  :-[

Bitte Euch also ohne hochladen der DB um Hilfe !  ???

Gruß

Pergus

Win7, Office Professional 2010

oma

nichts ist fertig!

Pergus

Hallo oma,

danke Dir, bin für jeden Tipp dankbar!!!  ;)

Pergus
Win7, Office Professional 2010

Pergus

Hallo oma,

leider funktioniert das bei mir nicht, da meine Kriterien nicht dem Beispiel gleichen.  :-\
D.h.: Ich muß pro 'StempelungsID' eine 'MitgliedsID' auslesen, aber statt der ID mit dem vollen Namen.  :-[

Meine Abfrage 'sqryMitgliederStempelungen', als Datenquelle für mein Bericht 'rptEinzelbericht',  ist wiefolgt:

Tabelle:'tblMitgliederStempelungen' (n), StempelungsID (Kombischlüssel) , MitgliedsID (Kombischlüssel)
Tabelle:'tblMitglieder' (1), MitgliedsID (Primärschlüssel), Nachname, Vorname

Als Kriterium der StempelungsID habe ich [Formulare]![frmStempelungen]![StempelungsID],
schließlich soll mein Bericht ('rptEinzelbericht') nur die Mitglieder anzeigen, die im Formular 'frmStempelungen' soeben eingegeben wurden!

ZitatDie auszugebenden Daten (in diesem Fall Mitgliedsnamen als '=Glätten([Nachname] & " " & [Vorname])' im 'Mitglied_Textfeld') befinden sich in einem Unterbericht 'srptMitgliederStempelungen', der als Datenquelle 'sqryMitgliederStempelungen' hat, also die selbe des Berichts 'rptEinzelbericht', aber ohne Kriterium.

Hast Du, oder irgend jemand ne Lösung? Wie gesagt, ich habe es derzeit mit dem Etiketten-Assistent erstellt, funktioniert zwar, es sollten aber nie mehr als 12 Mitglieder anwesend sein, da der Bericht sonst den Rahmen sprengen würde (Bericht darf nicht länger als eine Seite sein!). Übrigens keine Angst, der Verein hat keine 20 Mitglieder, und es werden auch in Zukunft nicht mehr werden, da sich sonst laut Statut des Vereins die Anforderungen ändern würden und die jetzige Datenbank für diesen Verein unbrauchbar werden, da sich dann das Land Südtirol darum kümmern würde!

Grüße

Pergus
Win7, Office Professional 2010

Pergus

Hallo oma,
habe einen Beitrag von Dir im Forum gefunden: http://www.access-o-mania.de/forum/index.php?topic=6232.0

ZitatHallo,

ein anderer Vorschlag der evt etwas leicher für dich ist(?)

Erstelle ein Modul in deiner DB u. kopiere folgende Funktion :


Code: In Zwischenablage kopieren

Public Function Zeile(ANr As String, Fabrikat As String) As String
Dim strSQL As String
Dim rs As DAO.Recordset

strSQL = "SELECT Gerätetyp FROM DeineTabelle WHERE ANr = " & "'" & ANr & "'" & " AND Fabrikat = " & "'" & Fabrikat & "'"
Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly)

While Not rs.EOF
 Zeile = Zeile & "; " & rs!Gerätetyp
 rs.MoveNext
Wend

Zeile = Mid(Zeile, 2, 1000)
rs.Close
Set rs = Nothing
End Function



Nun kannst du eine Abfrage mit dieser Funktion erstellen:

Code: In Zwischenablage kopieren

SELECT ANr, Fabrikat, Zeile([ANr],[Fabrikat]) AS Typen
FROM DeineTabelle
GROUP BY ANr, Fabrikat;




Du musst dein Tabellennamen anpassen u. ANr ist Feld mit Artikelnummer, Fabrikat ist Feld mit SEG, ALDI..., und Feld Gerätetyp ist Feld mit WA820.. usw

mit richtiger Anpassung solltest du deine gewünschte Darstellung erhalten


Gruß Oma

Habe versucht die Code in einem Modul so anzupassen:

Public Function Zeile(Nachname As String, Vorname As String) As String
Dim strSQL As String
Dim rs As DAO.Recordset

strSQL = "SELECT MitgliedsNr FROM tblMitglieder WHERE Nachname = " & "'" & Nachname & "'" & " AND Vorname = " & "'" & Vorname & "'"
Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly)

While Not rs.EOF
 Zeile = Zeile & "; " & rs!MitgliedsNr
 rs.MoveNext
Wend

Zeile = Mid(Zeile, 2, 1000)
rs.Close
Set rs = Nothing
End Function


Meine Abfrage lautet wiefolgt:

SELECT Nachname, Vorname, Zeile([Nachname],[Vorname]) AS Typen
FROM tblMitglieder
GROUP BY Nachname, Vorname;


Leider meckert da der Debugger und meint, daß ihm ein Parameter fehle? Folglich lässt er mich nicht mehr aus der Sub-Routine aussteigen!  >:(

Was mache ich falsch ??? ??? ??? ???

Möchtest Du mir da helfen?  ;)

Danke

Pergus
Win7, Office Professional 2010

database

Hallo Gustav,

verstehe nicht ganz - du holst mit einer Funktion die Mitgliedsnummer aus der tblMitglieder, in der auch die Namen der Mitglieder stehen.
Warum denn nicht gleich so:


SELECT Nachname, Vorname, MitgliedsNr
FROM tblMitglieder

oma

Hallo Pergus,

die Sache kann man vereinfachen, wenn man in deinem Fall mit 2 Abfragen arbeitet.

1. Abfrage qryMitglieder

SELECT StempelungsID, Nachname,Vorname
FROM tblMitgliederStempelungen
INNER JOIN tblMitglieder ON tblMitgliederStempelungen.MitgliedsID = tblMitglieder.MitgliedsID



2. Abfrage mit qryMitglieder:

SELECT StempelungsID, SpalteZ([StempelungsID]) AS Ausgabe
FROM qryMitglieder
GROUP BY StempelungsID, SpalteZ([StempelungsID])


Als Funktion wird hierbei benutzt:

Public Function SpalteZ(Feld As Long) As String

strSQL = "SELECT Nachname, Vorname FROM qryMitglieder WHERE StempelungsID =" & Feld
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)

    Do While rs.EOF = False
        SpalteZ = SpalteZ & "  " & rs!Nachname & ", " & rs!Vorname
        rs.MoveNext
    Loop

End Function


Damit du die Sache nachvollziehen kannst, anbei auch ein kleines Beispiel


Gruß Oma

[Anhang gelöscht durch Administrator]
nichts ist fertig!

Pergus

Hallo Peter, hallo oma,

danke für Eure hilfreichen antworten, werde heute Abend beide Lösungsvorschläge versuchen und im Forum dann antworten!  :D

Pergus
Win7, Office Professional 2010