Hallo,
bin gerade neu hier in diesem Forum und weis jetzt nicht ob das Thema hier her gehört. Falls nicht dann tut es mir leid. Desweitern schonmal entschuldigung für den vielen Text ;D ;D.
So das erstemal dazu. Mein anliegen ist folgendes. Ich habe ein Schulprojekt bekommen wo ich über eine access datenbank einen Bericht erstellen muss welches dann am ende ein Angebot darstellen soll.
Die aufgabe Ist wie oben beschrieben im groben klar aber ich wollte hier nochmal eben es im einzelnen darstellen. Ich habe eine Tabelle mit Autohäusern die verschiedene marken von autotypen hat. Dann gibt es eine Tabelle welche verschiedene Autotypen beherbergt. Desweiteren ist dort eingetragen welchen Typ und welchen preis der wagen hat. Der Preis ist nicht der preis des autos sondern der preis für die aktionszugehörigkeit. Nun soll eine abfrage erstellt über ein Formular erstellt werden. Dies habe ich soweit hin bekommen. Mein problem liegt jetzt darin das angezeigte suchergebniss in einem Bericht angezeigt werden soll, aber nach einem bestimmten muster.
und zwar wenn ich den Bericht erstelle dann sieht es wie folgt aus:
(Logo des fahzeuges soll heissen das es das VW, seat oder mercedes und andere logos sein soll und der Fahzeugname so was wie polo, golf, passat usw.)
Logo des fahrzeuges1 -- Fahrzeugname1
Logo des fahrzeuges1 -- Fahrzeugname2
Logo des fahrzeuges1 -- Fahrzeugname3
Logo des fahrzeuges2 -- Fahrzeugname1
Logo des fahrzeuges2 -- Fahrzeugname2
usw.....
Die soll aber foldendermassen aussehen:
Logo des fahrzeuges1 -- Fahrzeugname1, Fahrzeugname2, Fahrzeugname3, usw.
Logo des fahrzeuges2 -- Fahrzeugname1, usw.
Logo des fahrzeuges3 -- Fahrzeugname1, Fahrzeugname2, usw.
Soll also im ganzen bedeuten das ich einmalig das Logo vorhanden sein soll und dann die namen der Fahzeuge zusammengeschrieben.
Das war jetzt mein ganzes Problem was ich habe. Das andere habe ich ja wie gesagt hinbekommen nur das mit der Anzeige im Bericht das ist leider noch mein Problem. Desweiteren habe ich danach noch bestimmt das problem mit dem ausdrucken über das suchformular des berichtes, aber soweit bin ich ja noch nicht gekommen. ;D
Hoffe nun das man mir helfen kann.
Hallo,
müssen die Fahrzeuge nebeneinander stehen ?
Wenn ja wäre das ein etwas größerer Aufwand mit VBA.
Oder genügt diese Darstellung:
Logo des fahrzeuges1
-- Fahrzeugname1
-- Fahrzeugname2
-- Fahrzeugname3
-- usw.
Logo des fahrzeuges2
-- Fahrzeugname1
-- usw.
Logo des fahrzeuges3
-- Fahrzeugname1
-- Fahrzeugname2
-- usw.
Es wäre schön wenn die Fahrzeuge nebeneinanderstehen würden da es dann platzsparend ist wenn man mehrere Automarken hat.
Hallo,
wie gesagt, das ist etwas mehr Aufwand.
http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen
ok werde das mal versuchen ein zu binden. Aber wir bekomme ich das mit den Bildern hin. Diese sind ja extern in einem anderen Ordner. Habe jetzt versucht über einen Link die Bilder anzeigen zu lassen aber das geht leider nicht. Es wird nämlich bei mir im Bericht nur der Link angezeigt und nicht das Bild.
Hoffe du kannst mir da auch helfen wie ich das am besten mache.
Habe da noch eine Frage zu dem VBA Code. (Tschuldige das ich so oft frage aber bin halt total der neuling).
Und zwar wenn ich das so ein mein Feld eingebe und die Daten ändere dann also von:
=SQLListe("SELECT Nachname FROM tblPerson WHERE FirmaID = " & FirmaID; ","; ",")
auf:
=Name("SELECT Fahzeugname FROM Zusammenfassung WHERE Marke = " & [Marke];",";",")
dann kommt immer im Bericht #Name?
Kann es vllt daran liegen das ich die daten aus einer Abfrage die für ein Suchformular wichtig ist richtig angezeigt bzw gelesen werden können.
Hallo,
Frage:
Warum änderst du den Code von "SQLListe" auf "Name" (!) ?!
Was hast du dir dabei gedacht, was ist der Grund?
Naja habe gedacht man könnte das einfach ändern damit ich weis was da jetzt genau passiert. Aber auch wenn ich das wieder in den Ursprungszustand bringe mit SQLListe auch dann kommt immer noch #Name?.
Ich weis wirklich nicht woran das liegen soll. Kann auch sein das ich es falsch verstanden habe diese Formel.
Mein gedanke ist das die Formel so aufgebaut ist das "SELECT Fahzeugname" die Spalte selektiert wo die Autotypen drin stehen. Dann "FROM Zusammenfassung" die Daten aus der Abfrage welche filter nach dem Autohausnamen und welchen angebotspreis man diesem machen kann. Damit sollen dann alle Autos angezeigt werden die dieser Speziefikation angehören und die das autohaus hat. Dann "WHERE Marke = " & [Marke];",";"," " damit soll ,so wie ich es verstanden habe aus der liste heraus gesucht werden, alle autos die zu vw gehören oder zu seat und diese dann in eine zeile schreiben. Es können ja auch mehrere Automarken zu einem Autohaus gehören. Also wie gesagt das was in der Abfrage gefiltert wird. Dies ist mein verständnis dieser Formel und diese habe ich dann nachdem ich einfach einen Autobericht erstellt habe in das feld eingetragen wo dann Fahrzeugname steht. Weis nicht ob das so richtig ist geschweige ob das so funktioniert.
Hoffe ich habe das jetzt einigermaßen richtig rüber gebracht.
Hallo,
hast Du überhaupt die Funktion "SQLListe" in ein Standardmodul geschrieben, so wie es bei DBWIKI beschrieben ist?
und es muss so lauten (vermutlicher Tippfehler):
=SQLListe("SELECT Fahrzeugname FROM Zusammenfassung WHERE Marke = '" & [Marke] & "'";",";",")
Voraussetzung ist, dass "Marke" ein im entspr. Berichtsbereich existierendes Textfeld ist und das Tabellenfeld "Marke" den Datentyp TEXT aufweist.
btw:
Zitat..SELECT Fahrzeugname FROM Zusammenfassung WHERE Marke = '" & [Marke] & "'"........
ist ein (zusammengesetzter) SQL-String (d. h. Auswahlabfrage), der alle Fahrzeugnamen aus den Datensätzen ausliest, bei denen der Wert des Tabellenfeldes "Marke" mit dem akt. Wert des Berichts-Textfeldes "Marke" übereinstimmt (Kriterium). Wenn "Marke" den Datentyp TEXT besitzt, dann sind Hochkommata um den Kriteriumswert erforderlich.
Die Funktion(!) "SQLListe" macht nun aus der "vertikalen" Liste, die die Abfrage liefert, eine "horizontale" , kommagetrennte Auflistung (String, "Textzeile") mit den gefilterten Fahrzeugnamen einer bestimmten Marke.
Ja den code habe ich in modul kopiert. Aber auch nach tippfehler berichtigung kommt immer noch ein Fehler.
Würde ja gerne meine Datenbank hochladen, damit man es einfach mal sieht. Aber die ist leider hier zum hochladen zu gross
Hallo,
ZitatAber die ist leider hier zum hochladen zu gross
so sollten das klappen:
1. aufs notwendigste reduzieren
2. komprimieren
3. zippen
4. hochladen
So habe nun endlich geschafft die Datenbank so zu kompriemieren das es auf die größe der Datei passt. Habe auch 2 Bsp.-Bilder hinzugepackt.
Kurz zur erklärung über das Formular "Suchformular" soll gesucht werden und dann die daten die in dem Unterformular auftauchen nach dem oben beschriebenen Muster in ein bericht gepackt werden.
Hoffe nun das ihr damit zurecht kommt.
Hallo,
Zitatdie daten die in dem Unterformular auftauchen nach dem oben beschriebenen Muster in ein bericht gepackt werden
wie kommen denn die gesuchten Daten ins Unterformular?
Es gibt keinen diesbezüglichen Code - hast du evtl. zuviel gelöscht?
Der Button zum Öffnen des Berichts befindet sich im Hauptformular, das Datenfeld zum Filtern des Berichts im Unterformular.
Der Zugriff auf das Formular-Steuerelement sähe dann in der Abfrage bspw. folgendermaßen aus:
Forms![Suchformular]![Zusammenfassung Unterformular1].Form!AutohausDas alles hilft aber nicht wirklich, das eigentliche Problem mit der Auflistung der Fahrzeugnamen im Bericht mit Hilfe der Funktion "SQLListe" zu lösen. Dazu finde ich leider keinen Ansatz/Versuch in deiner Beispiel-DB.
PS:
ZitatHabe auch 2 Bsp.-Bilder hinzugepackt.
Sorry, aber das war völlig überflüssig. Die Bilder sind verzichtbar, sie haben nichts mit dem Problem zu tun.
Die Daten aus dem Unterformular kommen von dem anderem Formular welches ich nur in das Suchformular eingebunden habe. Sprich also es sind 2 Formulare miteinander verbunden.
Das mit der SQL anweisung da habe ich den code in VBA reinkopiert. Denke mal wo ich jetzt wirklich mal so auf dem schirm habe gesehen das es ja nicht VBA ist sondern SQL. Habs also falsch eingetragen ;D. Jetzt weis ich aber echt nicht wo ichs dann eintragen soll.
Mit den Bildern habe ich gedacht nur damit man sieht wie es im grunde aussehen sollt, also mit grafik usw.
Die Funktion SQLListe fügst du in ein allgemeines Modul ein, nicht ins Klassenmodul des Formulars und erst recht nicht beides.
Beim Kriterium in der Abfrage musst du störende Leerzeichen entfernen, damit du was findest.
Die Aktualisierung des Textfeldes sollte nach Eingabe einer Fahrzeugmarke angestoßen werden.
Das Wort "Marke" solltest du nicht verwenden, das ist in Access eine Eigenschaft von Formularen und Steuerelementen und vielem mehr.
Wenn du all das beachtest, sollte es wohl klappen mit der Fahrzeugtypenliste.
Danke für deine schnelle hilfe. Habe auch soweit alles geänder was du geschrieben hast mit dem Namen und den code in ein Modul ein zu tragen. Leerzeichen in den Daten sollten eigentlich nicht vorhanden sein, so hoff ich mal.
Was ich aber jetzt nicht ganz verstehen ist
ZitatDie Aktualisierung des Textfeldes sollte nach Eingabe einer Fahrzeugmarke angestoßen werden.
Meinst du das so das ich dann in meinem Formular eine Fahrzeugemarke eingeben muss oder wie soll ich das verstehen.
ZitatLeerzeichen in den Daten sollten eigentlich nicht vorhanden sein
Es geht nicht um Leerzeichen in den Daten, sondern in deinem Kriterienstring, und zwar hier:
ZitatWHERE Marke = ' " & [Marke] & " ' ";",";",")
ZitatWas ich aber jetzt nicht ganz verstehen ist
Du hattest doch ein Formular zum Testen erstellt, dort muss nach der Eingabe einer Marke das Textfeld mit der Typenliste aktualisiert werden - dachte ich. Das tut es aber wohl von ganz allein. :-)
Habe jetzt das mal probiert und die leerzeichen aus der Formel raus genommen und folgendes Passiert:
Nach dem ich den Kriterienstring geändert habe wurde dieser folgendermassen von access formatiert
Zitat=SQLListe("SELECT Fahrzeugname FROM Zusammenfassung WHERE Fahrzeugmarke = '" & [Fahrzeugmarke] & "'";",";",")
Nun wenn ich den bericht öffne dann erscheint bei der Kategorie "geht nicht". Dies ist ja richtig wenn ein fehler vorliegt. Also wird der code as dem allg. Modul aufgerufen aber funktioniert nicht. Dieses Geht nicht habe ich extra eingetragen um zu sehen ob er überhaupt den code benutzt.
Teilauschnitt des Codes im allg. Modul wegen der zuvor beschriebenen Veränderung:
ZitatOn Error Resume Next
Set DB = CurrentDb()
Set RS = DB.OpenRecordset(SQL, dbOpenSnapshot)
If Err.Number <> 0 Then
Res = "Geht nicht" -- Vorher "#Fehler"
Err.Clear
Else
Also werden leider nicht die Autotypen in zeile geschrieben sondern wo vorher die einzelnen typen unter einander standen steht jetzt "geht nicht"
Hast du die Abfrage "Zusammenfassung" denn auch angepasst?
Du könntest einen Haltepunkt in die VBA-Prozedur setzen und genauer hinschauen was zu dem Fehler führt.
Bspw. kannst du dir den übergebenen SQL-String ansehen, per Debug.Print ins Direktfenster ausgeben, kopieren und im SQL-Fenster einer neuen Abfrage testen.
Also habe jetzt statt die abfrage zu nehmen die Tabelle "Autotabelle" genommen. Somit funktioniert das einwandfrei. Also es werden alle autotypen angezeigt die dieser Marke sind. Nun hab ich aber das problem das ich alle autos angezeigt bekomme. Das soll ja nicht sein denn der Preis soll ja auch damit einfliesen. Deswegen ja die abfrage. Aber mit dieser geht es ja nicht wirklich. Nun die frage ob man den SQL String so erweitern könnte das nach der marke und dann nach dem preis gesucht wird und mir dann alle Autos ausgegeben werden die diesen Kriterien entsprechen.
Zeig doch bitte den SQL-Code zur Abfrage, damit man sieht warum es damit nicht geklappt hat.
Und was ist mit dem Preis, wo soll der mit einfließen?
ZitatAlso der code ist vollkommen der Gleiche bis auf die Tatsache das ich bei dem kriterium was geändert habe und zwar von
Zitat=SQLListe("SELECT Fahrzeugname FROM Zusammenfassung WHERE Fahrzeugmarke = '" & [Fahrzeugmarke] & "'";",";",")
auf
Zitat=SQLListe("SELECT Fahrzeugname FROM Autotabelle WHERE Fahrzeugmarke = '" & [Fahrzeugmarke] & "'";",";",")
Somit werden mir dann alle Fahrzeuge die zur marke Seat gehören angezeigt. Das ist ja schonmal gut aber jetzt soll ja wie in dem Suchformular ja nur die Autos angezeigt werden die auch den entsrechenden Preis haben
Habe gedacht man könnte das dann so ins Kriteriumfeld schreiben mit dem Preis als 2tes Kritrium. Aber geht leider nicht
Zitat=SQLListe("SELECT Fahrzeugname FROM Autotabelle WHERE Fahrzeugmarke = '" & [Fahrzeugmarke] & "' AND Preis = '" & [Preis] & "'";",";",")
Hat sich erledigt habe gerade herausgefunden warum es nicht funktioniert hat. Musste den Preis als Text Formatieren und nicht als Zahl. Das ist auch nicht weiter schlimm da mit diesem wert so oder so nicht gerechnet wird.
Aber hab jetzt noch eine Sache und zwar wenn ich dann beim öffnen des Berichts ein Autohaus eingebe und dann den preis dann wird mir das ergebnis auch so angezeigt wie ich es haben will aber jetzt kommt das problem. Wenn ich das über das formular eingebe dann erscheint dann im unter formular folgendes:
Autohaus | Marke | Fahrzeugname | Preis |
usw...
Nun wenn ich den Bericht öffne dann kommt:
Also soll bedeuten das es wie im Unterformular angezeigt wird auch im Bericht doppel angezeigt. Ich bräuchte es aber nur einmal im Bericht stehen, also so:
Gibt es da eine möglichkeit das zu bewerkstelligen?
Hallo,
Du solltest Dich mal mit der Bedeutung der Datentypen auseinandersetzen und die auch konsequent beachten. "Preis" ist sehr vermutlich kein Tabellenfeld mit Datentyp "TEXT" , eher mit Double oder Currency (Währung) , d. h. Gleitkomma- oder Festkommazahl.
Weil im SQL-Code der Punkt als Dezimal-Trennzeichen zu verwenden ist, muss der Kriteriumswert , der (bei deutscher Umgebung) normalerweise ein Komma ist, entspr. umgewandelt werden:
=SQLListe("SELECT Fahrzeugname FROM Autotabelle WHERE Fahrzeugmarke = '" & [Fahrzeugmarke] & "' AND Preis = " & Str([Preis]) ;",";",")
Danke sehr. Habe ich korriegiert und funktioniert einwandfrei. Danke nochmal. Auch das mit dem einzelanzeigen habe ich hin bekommen.
Und ja DF6GL ich sollte mich da mal wirklich mit beschäftigen. Danke für eure hilfe und eure Geduld. Ich weis es war bei weitem nicht einfach.