Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access Bericht soll zwei Formulare berücksichtigen.





Frage

Hallo zusammen, stehe wieder mal vor einem Problem. Vielleicht erbarmt sich jemand meiner. Ich habe ein Form AnfrageGlas und ein Form Lieferanten. Nun möchte ich den Lieferanten mit einem Angebot überraschen. Bericht soll zwei Formulare berücksichtigen. Dazu würde ich gerne ein Bericht auf der Basis einer Abfrage(falls es nur mit dem Bericht möglich ist-gerne auch diese Möglichkeit) ertsellen, der alle Felder des Forms AnfrageGlas (inklusive Feld LieferantenName) ausgibt. Adressdaten vom Lieferanten sollen aber aus dem Form Lieferanten geholt werden. Tabs stehen in 1:~ per LieferantenNr. Verschiedene Abfragen ausprobiert - es wird entweder nichts oder alle DS ausgegeben. Vielen Dank für die Zuschriften. Valery

Antwort 1 von Teddy7

Hallo Valery !
Da sollten wir zuerst mal Begriffsklärung machen.
Ein Bericht kann sich zwar Daten aus einem Formular holen. Das ist aber nur sinnvoll, wenn man z.B. auf einem Selektionsbild den Zeitraum eingegeben hat, den der Bericht berücksichtigen soll.
Der Bericht, den Du meinst, wird sich auf die gespeicherten Daten beziehen - und die stehen in den Tabellen oder in Abfragen.
Diese Daten sind natürlich in Formularen erfasst worden.
So - wir brauchen also als Datenquelle des Berichts Daten aus der Tabelle AnfrageGlas und aus der Tabelle Lieferanten.
Ich gehe mal davon aus, dass ein Lieferant eine Anfrage bekommt (kein Angebot). Wir brauchen also eine Abfrage über die Tabelle AnfrageGlas. Dann wird in diese Abfrage die Tabelle Lieferanten hineinverknüpft. Die Verknüpfung muß dann erfolgen über ein Feld Lieferant, das in der AnfrageGlas steht, mit dem Feld Lieferant in der Tabelle Lieferanten.
Auf den dabei entstehenden Strich klickst Du rechts und gehst auf Verknüpfungseigenschaften. Da markierst Du die Möglichkeit 2 = alle Sätze auf AnfrageGlas und nur die passenden aus Lieferanten.

Jetzt machst Du mit dem Berichtsassistenten einen Bericht mit Datenquelle diese Abfrage. Dabei gruppierst Du den Bericht nach AnfrageNr.

So - jetzt brauchst Du noch eine Möglichkeit, den Bericht aufzurufen - und zwar nur für eine Anfrage.

Das kann man so machen, daß man in ein Selektionsbild(Formular) ein Feld legt, in dem man die AnfrageNr erfassen kann und einen Befehlsbutton.
In dem Befehlsbutton(Klick-Ereignis) öffnet man dann den Bericht. Dabei gibt man die gewünschte AnfargeNr mit. Das bewirkt dann automatisch, daß die Datenquelle auf diese AnfrageNr eingeschränkt(gefiltert) wird und nur die eine Anfrage rauskommt.

Der Aufruf sieht etwa so aus:
Dim suche As String
suche = "AnfrageNr = " & txtAnfrageNr
DoCmd.OpenReport "repAnfrage", acViewPreview, , suche

Dabei sei der Feldname in der Abfrage = AnfrageNr und das Feld auf der Selektionsform heiße txtAnfrage.

/////Natürlich kann man so einen Befehlsbutton auch in ein Übersichtsbild (Endlosformular) legen, in dem alle ungedruckten (offenen) Anfragen angezeigt werden und dann die AnfrageNr übergeben, auf der der Cursor steht.//////

Viel Spaß beim Basteln
Teddy

Antwort 2 von valery

Hallo Teddy,
vielen Dank für die prompte Antwort. Bin dem Hinweis gefolgt und Verknüpfungseigenschaften in der Anfrage geändert.
In dem Bericht wird jetzt der richtige DS + LieferantenName aus der Tabelle AnfrageGlas angezeigt, jedoch keine Angaben aus der Tabelle Lieferanten (Nachname, Adresse, etc.). Was mache ich den falsch? Wäre es möglich, wenn ich Ihnen meine kleine EntwicklungsDB zusende? Es sind gerade mal 4 mb.
Bin erst am Anfang des Accessweges...
Gruß
Valery

Antwort 3 von RalfH

Hallo,
hast du die Beziehungen in der Datenbank selbst richtig verknüpft ?
Sollte eine 1-N Verknüpfung sein.
Schau mal hier
Gruß Ralf

Antwort 4 von Teddy7

Dann kann es nur sein, dass die Schlüsselbegriffe nicht übereinstimmen.
Die mail-Adresse wird hier üblicherweise über pager (also persönlich) bekanntgegeben. Da Du aber kein member bist geht das nicht.
Gruß
Teddy

Antwort 5 von Teddy7

@Ralf
Beziehungen in der Datenbank - also zwischen den Tabellen sollte man weglassen. Das gibt nur Ärger und keinen Nutzen.
Alle Programmierer, mit denen ich gesprochen habe, sind sich einig, dass es reicht, die Beziehungen in Abfragen abzubilden.
Einzige Ausnahme: bei abhängigen Tabellen, bei denen man Löschweiterleitung haben will - also den Kopfsatz löscht und die Positionsdaten automatisch mit gelöscht haben will.
Gruß
Teddy

Antwort 6 von RalfH

@Teddy7

Vielen Dank für Deinen Hinweis,
aber aus eigener Erfahrung weis ich das es gerade für Anfänger von MS Access oder anderen relationalen DB`s wichtig ist die Normalisierungen ( nach Codd ) zu verstehen und anzuwenden.

Als erfahrener Proggi hast Du natürlich diverse Möglichkeiten auf Fehlern von Usern zu reagieren und diese durch entsprechender Programmierung abzufangen. Dazu bedarf es aber Erfahrung, die ein Anfänger ja noch nicht hat und diese erst einmal aufbauen muss.

Nehmen wir als Beispiel mal die Redudanzen -(Überflüssige Informationen).
Beispiel: Ein User gibt den Namen Meier ein, der nächste Maier und der übernächste gibt Meyer ein, für ein und denselben Kunden.
Und schon haben wir Redudanzen.
3 Datensätze für ein und dieselbe Person.
Gehen wir jetzt noch davon aus, das 5 User 1 Jahr lang an dieser DB arbeiten, und im Schnitt alle 4 Wochen so ein Fehler auftritt, so haben wir nach nem Jahr mindestens 39 redudante Datensätze.

Außer dem Verbrauch von unnötig viel Speicherplatz, führen Redudanzen auch zu Widersprüchen-Anomalien. Da gibt es dann auch schon wieder 3 Arten von: Änderungsanomalien,Einfügeanomalien und Dein oben beschriebens Beispiel Löschanomalien.

Wenn ich jetzt den Datensatz für Meier ändern möchte, und die Tabellen nicht normalisiert und in Beziehung stehen, bekomme ich Probleme. Wenn In den Abfragekriterien bei einer Abfrage Meier steht, bekomme ich als Anfänger auch nur diesen DS, und nicht Maier und Meyer. Wenn ich dann diesen gefundenen DS ändere wirkt sich dies Änderung ja nicht auf die nicht gefundenen DS aus und somit verstärken sich auch die Widersprüche.

Ich denke schon das es gerade für Beginner sehr wichtig ist,die Normalisierungen zu verstehen und anzuwenden.


Gruß Ralf