Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datensatz vervielfachen

Begonnen von gromax, August 12, 2016, 15:07:55

⏪ vorheriges - nächstes ⏩

gromax

Liebe Access-Profis,

in meiner DB für die Bücher-Verwaltung habe ich nun folgendes Problem:
Wenn ich von einem Buch-Exemplar mehrere gleiche Ausgaben (dieselbe ISBN-Nr.) einpflegen möchte,  so wäre es für den Anwender sehr komfortabel, wenn entsprechend der Eingabe der Anzahlen der eingepflegte Datensatz entsprechend mehrfach in die 'tblBuecher' kopiert werden würde.
Bislang habe ich die automatische Generierung der Kenn-Nummern (vgl. Datei 'Buchausleihe02_Bild.pdf') hinbekommen; leider findet dies nun keinen Niederschlag in der Anzahl der eingepflegten Datensätze; dies wäre wichtig, denn die Nutzer dieser DB können selbsttätig die Auswahl der auszuleihenden Bücher aufrufen und die Ausleihe vollziehen.
Dann könnte ein Ausleihender die Ausgabe
- "Am Bahndamm eine Blume" - 22LK17.1
eine anderer
- "Am Bahndamm eine Blume" - 22LK17.2
und ein weiterer
- "Am Bahndamm eine Blume" - 22LK17.3
ausleihen.

Leider habe ich keinen Plan, wie ich diese Vervielfachung umsetzen könnte.

Für Hilfen - wie immer - vorab meinen Dank!

Viele Grüße
gromax

ebs17

Zitatvgl. Datei 'Buchausleihe02_Bild.pdf'
Die Wolke ist gerade nicht am Himmel.

Vervielfältigen kann man einfach über eine Zahlenhilfstabelle, siehe Grundlagen - SQL ist leicht (1) - Hilfstabellen
Mit freundlichem Glück Auf!

Eberhard

PhilS

Zitat von: gromax am August 12, 2016, 15:07:55Wenn ich von einem Buch-Exemplar mehrere gleiche Ausgaben (dieselbe ISBN-Nr.) einpflegen möchte,  so wäre es für den Anwender sehr komfortabel, wenn entsprechend der Eingabe der Anzahlen der eingepflegte Datensatz entsprechend mehrfach in die 'tblBuecher' kopiert werden würde.
Nur mal als Anmerkung:
Eigentlich widerspricht das Kopieren den Datenbank-Normalisierungsregeln. Richtig wäre es, jedes Buch nur einmalig zu speichern, und deine Exemplarnummern in eine Tabelle tblExemplare auszulagern, die mit einem Fremdschlüssel auf das Buch verweist.

Die Exemplarnummern, bzw. die einzelnen Exemplardatensätze könntest du in einer Schleife in VBA generieren.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

gromax

Hallo Access-Profis,

sorry, dass ich mich solange nicht gemeldet habe - ich hatte einfach keine Zeit!
Jetzt möchte ich die Problematik nochmals aufwerfen, weil die Antwort von ebs17 mit dem eingebrachten Verweis mich überfordert und PhilS mich bzgl. der Normalisierung falsch verstanden hat! Sorry und trotzdem Dank für Eure Antworten!

Der Normalisierung eine Gasse und der Bequemlichkeit eine Autobahn!
Die Bücher existieren in gleicher Ausgabe mehrfach und bedürfen unterschiedlicher ID-Nummern; jedes Buch steht zur Ausleihe an und sollte selbst natürlich auch jeweils eine unterschiedliche Kenn-Nummer (nicht identisch mit den ID-Nummern!) erhalten; ich möchte nur der Bequemlichkeit den Weg ebnen und die Ausleih-Nummern-Vergabe automatisieren.
Ich könnte auch manuell jeden Datensatz wiederholend eingeben, aber das wäre natürlich ätzend!
So sollte es funktionieren:
- Ich gebe den Titel ein.
- Ich gebe die Anzahl ein.
- Access vergibt automatisch zur Kenn-Nummer eine Zähl-Nummer
  Bsp: Titel & Autor & Kategorie & Kenn-Nummer (bis hierher funktioniert alles) und jetzt als Nachsilbe .1 und
Datensatz kopieren und .2 und Datensatz kopieren und .3 und
Datensatz kopieren und .4 und
...
Wenn es eine Lösung gibt, bin ich für jeden Hinweis dankbar.

Viele Grüße
gromax

MzKlMu

#4
Hallo,
es bleibt auch damit der falsche Weg. Die Exemplare kommen in eine Tabelle mit der ID des Buches als Fremdschlüssel. In diese Tabelle kommt dann die Zählnummer (in Verbindung mit der BuchID). 5 Exemplare dieses Buches, 5 DS in dieser Tabelle.
Das wäre dann die Exemplartabelle.

Wenn Du die kompletten Buchdatensätze kopierst schleppst Du ja jede Menge doppelter Felder mit, was dann natürlich auch den Normalisierungsregeln widerspricht.

Nachtrag:
Es wird dann noch die eigentliche Ausleihtabelle benötigt. Die Exemplartabelle (je Buch ein DS) enthält auch einen Primärschlüssel und dieser wird als Fremdschlüssel für die Ausleihtabelle verwendet.
Gruß Klaus

gromax

Liebe Access-Profis, lieber Klaus,

wenn Du nochmals den Nerv hast, mir weiterzuhelfen, dann danke ich bereits vorab.
Inhaltlich kann ich bei Deiner Antwort mitgehen, doch kann ich dieses nicht funtionell umsetzen:
Ich gestalte eine Tabelle (tblAnzahl) mit dem Fremdschlüssel des eingegeben Buchtitels (BUC_FS) und einem Feld für die Nummer (.1 und .2 und .3 und ...). Aber wie weiter.
Wie schaffe ich es denn, dass ich entsprechend der Eingabe im Feld 'BUC_AnzahlExemplare' diese Nummern generiert werden. Ich möchte doch diese als Ergänzung zur Mediennummer entwickeln - z.B.
- "Am Bahndamm eine Blume" - 22LK17.1
entsprechend
- "Am Bahndamm eine Blume" - 22LK17.2
und entsprechend
- "Am Bahndamm eine Blume" - 22LK17.3

Wenn Du - oder andere Access-Profis - dazu eine Hilfestellung geben könnten, dann käme ich einen Schritt weiter.

Danke vorab!

Viele Grüße
gromax

gromax

Hallo an alle,

anhängig noch eine Darstellung der Beziehungen in der beschriebenen DB.
Sorry für den Nachtrag!

Viele Grüße
gromax

MzKlMu

#7
Hallo,
die Beziehungen passen so nicht. Du verleihst ja jetzt nicht mehr die Bücher, sondern die Exemplare dieser Bücher.
Die Tabelle mit den Anzahlen würde ich "TblExemplare" nennen. Und die Felder dann natürlich entsprechend umbenennen. (Exemplar_FS, ExemplarNummer). Und der FS in der Verleihtabelle dann Exemplar_FS. Die ExemplarNummer ist eine Zahl ohne den Punkt. Das Hochzählen der ExemplarNummer lässt sich dann automatisieren.
Das Feld  'BUC_AnzahlExemplare' ist überflüssig. Die Anzahl der Exemplare lässt sich aus der Tabelle "TblExemplare" ermitteln. In diese Tabelle sollte noch ein Hakenfeld wenn das Buch nicht mehr da ist. Verlorene/ausrangierte Bücher müssen aber in dieser Tabelle erhalten bleiben.

Die Ergänzung zur Mediennummer kannst Du über eine Abfrage problemlos erledigen.
Die Abfrage muss die Exemplartabelle und die Buchtabelle enthalten. Das gewünschte Feld wird dann einfach berechnet:
ErgMedienNummer: Buc_Mediennummer & "." & ExemplarNummer
Der Punkt wird also auch hinzugefügt.
Diese ErgMedienNummer wird nicht in einer Tabelle gespeichert.
Dafür war vermutlich das Feld "Buc_Mediennummer2" gedacht, was dann natürlich ersatzlos entfällt.

Achtung, ich habe in meinen Hinweisen die von mir vorgeschlagenen Namensänderung berücksichtigt.
Gruß Klaus

gromax

Hallo Klaus,

vielen Dank für Deine Antwort; die Ratschläge habe ich verstanden und umgesetzt - aber es funktioniert noch nicht ganz. Wie immer liegt der Fehler beim Anwender.

Wie baue ich denn die tblExemplare "zwischen" die tblBuecher und die tblAusleihen? Ich habe es in der Anlage visualisiert, aber die tblExemplare bleibt ohne Datensätze - trotz dieser Verknüpfungsart?!
Selbst wenn ich ein neues Buch in der tblBuecher anlege, wird dieses nicht an die tblExemplare "weitergegeben"!

Der Hinweis mit dem Hakenfeld ist prima; ich habe dieses schon in der tblBuecher mit 'BUC_geloescht' angelegt; muss ich dieses in die Tabelle tblExemplare umlegen?

Was ich natürlich nicht umsetzen kann, ist das "automatische Hochzählen"; wie macht man dieses und wo? Muss dann nicht für jedes gleichlautende Exemplar ein "DS" angelegt werden?

Deinen Code habe ich in die Abfrage übernommen und das Feld 'BUC_Mediennummer2' wurde gelöscht.
Meinen Respekt, wie Du meine Struktur so eindeutig erlesen konntest!

Vorab vielen Dank!

Viele Grüße
gromax


MzKlMu

#9
Hallo,
ZitatSelbst wenn ich ein neues Buch in der tblBuecher anlege, wird dieses nicht an die tblExemplare "weitergegeben"!
das geht zunächst nicht automatisch, das muss manuell gemacht werden. Um das zu automatisieren wird ein Hauptformular zur Bucherfassung angelegt. Darin ein Unterformular für die Exemplare. Hafo und Ufo sind über die Schlüsselfelder (Buc_PS und Buc_FS) zu verknüpfen. Dann kannst Du im Hafo ein Buch erfassen/anzeigen und im Ufo die Exemplare eintragen. Durch die Verknüpfung Hafo-Ufo wird der Buc_PS automatisch zum Buc_FS weiter gegeben. Das ist wie im richtigen Leben ein Buch hast Du erst, wenn Du auch ein Exemplar davon hast. Mit anderen Worten, zu jedem Buch das vorhanden ist muss es mindestens einen Datensatz bei den Exemplaren geben.
Die Verknüpfungsart bleibt grundsätzlich bei 1. In den Beziehungen wird ohnehin immer die Art 1 eingestellt. Das wird nur bei Bedarf in Abfragen geändert.

Zitat'BUC_geloescht' angelegt; muss ich dieses in die Tabelle tblExemplare umlegen?
Ja, ist ja auch logisch, denn Du "löschst" ja ein Exemplar und nicht das Buch. Das Feld wäre dann auch in "Ex_geloescht" umzubenennen.

Das automatische Hochzählen ist erst mal ein "Nice to have", das kannst Du erst mal manuell machen (zum Testen der Zusammenhänge). Und für jedes Exemplar muss es in der Exemplartabelle einen Datensatz geben.

Kannst Du mir die DB mal hochladen ?
Ich benötige aber zwingend eine MDB (Access2003), ACCDB's kann ich nicht ansehen.

Zusätzliche Anmerkungen/Fragen:

- Wenn es zu einem Buch eine neue Auflage gibt, ändert sich dann die Medinnummer und/oder die ISBN ?
Wenn Nein (was ich annehme), ist die Tabelle für die Auflage falsch. Diese benötigt ein Fremdschlüssel zum Buch, das Erscheinungsdatum der Auflage und die Nummer der Auflage. AUF_FS in der Buchtabelle entfällt, ebenso das Feld BUC_Auflage.

- Was kommt in das Feld BUC_Kategorie, Du haast ja aschon einen FS zur Kategorie > vermutlich überflüssig > löschen.

- Das Feld BUC_AnzahlExemplare entfällt ersatzlos (wie bereits gesagt).

- Was ist das Feld BUC_KatAnz ?

- Kann ein Buch nicht in mehrere Kategorien gehören ?

- Was kommt in das Feld BUC_Herausgaben ?

- BUC_geloescht kommt als EX_gelöscht in die Exemplartabelle.

Nachtrag: Bitte diesen Beitrag noch mal vollständig lesen. Ich habe noch weitere Änderungen/Ergänzungen gemacht
Gruß Klaus