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 kopieren

Begonnen von gromax, April 17, 2017, 00:44:08

⏪ vorheriges - nächstes ⏩

gromax

Liebe Access-Profis,

nach längerer Abstinenz habe ich ein vormaliges Projekt wiederaufgenommen; ich versuche in einer Datenbank zur Buchverwaltung Datensätze per VBA zu kopieren. Dies soll dann geschehen, wenn ich von einem Buch mehrere Exemplare mit gleicher ISBN in der Bibliothek halte; neu wird von Exemplar zu Exemplar nur die Aufklebe-Nr. vergeben werden und zwar immer um '1' aufsteigend.

Wenn ich also bei der Erfassung des Buches folgenden Code einsetze, werden die Inhalte des Feldes 'AUF-FS' (Fremdschlüssel für die Auflagenbeschreibung, also 'Erstausgabe', 'erweiterte Ausgabe', 'Nachdruck',...), die über ein Listenfeld eingelesen werden und die Texteinträge im Feld 'BUC_Beschreibung' (Freitext ähnlich einem Klappentext) nicht kopiert.
Wundersam und für mich unerklärlich, weil von gleicher Struktur andere Fremdschlüssel (Bsp. 'VER_FS' für die Auswahl der Verlage) problemlos kopiert werden.
In beiden Beispielen stehen die grundgelegten Tabellen (tblAuflage und tblVerlage) in gleicher Beziehung zur tblBuecher, die die Datensätze aufnimmt; im Formular sind die beiden Quellen (Datensatzherkunft) der Listenfelder sortierende Abfragen.


...
For i = 0 To intVorgabe - 1
    X = X + 1
Set db = Application.CurrentDb
Set rst = db.OpenRecordset("tblBuecher", dbOpenDynaset)
   
    With rst
    .AddNew
    .Fields("VER_FS") = Me!VER_FS
    .Fields("AUF_FS") = Me!AUF_FS
    .Fields("KAT_FS") = Me!KAT_FS
    .Fields("BUC_Kategorie") = Me!BUC_Kategorie
    .Fields("BUC_MedienNummer") = BUC_Kategorie & BUC_KatAnz & "." & X
    .Fields("BUC_Titel") = Me!BUC_Titel
    .Fields("BUC_Untertitel") = Me!BUC_Untertitel
    .Fields("BUC_Auflage") = Me!BUC_Auflage
    .Fields("BUC_AnzahlExemplare") = Me!BUC_AnzahlExemplare
    .Fields("BUC_Jahr") = Me!BUC_Jahr
    .Fields("BUC_Beschreibung") = Me!BUC_Beschreibung
    .Fields("BUC_Inkludiert") = Me!BUC_Inkludiert
    .Fields("BUC_ISBN") = Me!BUC_ISBN
    .Fields("BUC_Herausgaben") = Me!BUC_Herausgaben
    .Fields("BUC_KatAnz") = Me!BUC_KatAnz
    .Fields("BUC_geloescht") = Me!BUC_geloescht
    rst.Update
    rst.Close
    End With
Set rst = Nothing
Set db = Nothing
i = i + 1
Next i

...


Ich habe schon das '!' durch den '.' ersetzt, habe '.value' dazugesetzt und wieder weggenommen - ich weiß nicht mehr weiter! Bei 'VER_FS' und 'KAT_FS' klappt es, was bei 'AUF_FS' nicht funktioniert?!

Für Hilfe und Unterstützung bin ich sehr dankbar!

Viele Grüße
gromax

Lachtaube

Wenn man ein Buch als Abstraktum und die tatsächlich vorhandenen Exemplare in der Bücherei mit Kennzeichnung (Aufkleber) in einer separaten Tabelle nebst Fremdschlüssel auf das Abstraktum führt, stellt sich das Problem des Kopierens vermutlich erst gar nicht. Das würde jedoch ein Ummodellieren der Tabellen erfordern.

Im konkreten Fall scheint es sinnvoll zu sein, mit dem Clone des Formular-Recordsets zu arbeiten, wobei vorher sichergestellt sein sollte, dass der zu vervielfältigende angezeigte Datensatz im Formular auch gespeichert ist. Das Prinzip ist unter Duplicate the record in form and subform aufgeführt, wobei der Code für das Unterformular für Deine Anwendung wegzulassen ist.
Grüße von der (⌒▽⌒)

MzKlMu

#2
Hallo,
oder anders gesagt:
Warum wegen eines Feld einen ganzen Datensatz mit jeder Menge Redundanzen anlegen/kopieren ?

Ich würde umstrukturieren und eine extra Tabelle für die AufklebeNr (verzichte unbedingt auf den -) anlegen.

Ich meine, das wurde Dir schon mal so vorgeschlagen.
Habe es gefunden:
http://www.access-o-mania.de/forum/index.php?topic=21640.msg123909#msg123909
Da wurde der Hinweis auf eine extra Tabelle (Exemplare) auch schon gegeben. Leider hast Du dort auf meine Rückfragen nicht mehr geantwortet. Und jetzt fängst Du grad wieder von vorn an.
Gruß Klaus

gromax

Hallo Lachtaube, hallo Klaus,

Ihr stoßt ja beide in die gleiche Richtung!
Klaus hat mir diese Richtung ja vor langer Zeit schon mal gewiesen und - ich möchte mich entschuldigen - ich habe nicht geantwortet. Gleichwohl bin ich diesen Weg gegangen und die Hinweise versucht umzusetzen (vgl. DB in der Anlage), doch jetzt funktioniert selbst mein Formular 'frm_BuchEingabe' nicht mehr (Laufzeitfehler 2105) und ich weiß nicht, warum!
Die Funktionsweise des Formulars habe ich mittels der pdf.-Datei bei einem bzw. bei drei Exemplaren dargestellt.

Kann mir jemand folgend weiterhelfen:
- Warum der Laufzeitfehler 2105?
- Wie werden denn die sogenannten AufklebeNummern in der Tabelle 'tblExemplare' generiert?
  Diese müssen dort doch auch kopiert werden?
- Kann ich denn nachfolgend auch einzelne Exemplare bei Verlust entfernen, ohne dass die übrigen   
  Bücher neue Aufklebenummern erhalten?

Noch eine generelle Frage:
Vorbehaltlich der unprofessionellen Denk- und Vorgehensweise mit meiner Version der DS-Kopien in der tblBuecher, schaffe ich mir denn große Probleme, wenn ich diese Version weiterdenke? Wir haben höchsten Platz für ca. 500 Bücher und hielten bei einem normalen Durchlauf in der DB vielleicht 2000 Datensätze vor.

Trotzdem vielen Dank für eure Hilfe und Auseinandersetzung mit meiner DB!

Viele Grüße
gromax


MzKlMu

#4
Hallo,
in einer umstrukturierten Tabelle gibt es die 3 Felder

- Anzahl Exemplare
- Medien-Nr
- bis

nicht mehr, die sind ersatzlos überflüssig.
Die Exemplare sind ja einfach Datensätze und können einfach gezählt werden.
Die Medien-Nr wird als Zähler (LfdNr) einfach hochgezählt und in einer Abfrage zusammengesetzt.
Aber nicht gespeichert, nur die LfdNr.
Im Datensatz (aus Abfrage!) der Exemplare steht dann
22LK24.1
22LK24.2
22LK24.3

Die Exemplare werden in einem Unterformular erfasst das in das jetzige Formular eingebunden wird.
Im Hafo (und der Tabelle) sind nur noch die reinen Buchdaten ohne die Exemplare.
Zitat- Warum der Laufzeitfehler 2105?
Bitte zitieren, ich kenne die Fehlernummern nicht auswendig
Zitat- Wie werden denn die sogenannten AufklebeNummern in der Tabelle 'tblExemplare' generiert? Diese müssen dort doch auch kopiert werden?
Nein, es wird einfach automatisch mit DMax("LfdNr","Exemplartabelle") + 1 hochgezählt.
Zitat- Kann ich denn nachfolgend auch einzelne Exemplare bei Verlust entfernen, ohne dass die übrigen Bücher neue Aufklebenummern erhalten?
Ja, aber man würde nichts entfernen. Das Exemplar kriegt einfach nur einen Vermerk. Die LfdNr muss ja erhalten bleiben, denn das Buch könnte ja wieder auftauchen.

Die DB kann ich mir nicht ansehen, ich habe nur Access2003 und benötige eine MDB.
Gruß Klaus

DF6GL

Hallo,

--Tabellenmakros (Trigger) entfernt.
--Tabellen-Nachschlagefelder entfernt.
--Abfragen gelöscht. Formular-Datenherkünfte auf Tabellen(namen) gesetzt.
--"Zuweisungs"-Code auskommentiert (entfernt) und "berechnete" Tabellenfelder gelöscht.


Konvertierung in A2003 nicht möglich (wegen A201x-Features)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access