Neuigkeiten:

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

Mobiles Hauptmenü

Festgelegte Datensätze an Tabelle anhängen

Begonnen von Kannkaumvba, März 01, 2016, 17:35:00

⏪ vorheriges - nächstes ⏩

Kannkaumvba

Hallo Forum,
ich habe ein kniffliges Problem, bei dem ich Unterstützung brauche (siehe angehängte Tabellenbeziehungen):

1. Für einen Datensatz aus tblPositionen werden in tblPruefplan n Datensätze festgelegt
2. Für einen Datensatz aus tblPositionen soll aus einem Form ein Datensatz in tblKalibrierauftraege angelegt werden
3. Für diesen Datensatz in tblKalibrieraufträge sollen in tblKalibrierungen die n Datensätze aus tblPruefplan angehängt werden, in denen [PosNumPruef] mit [PosNum] in tblPositionen übereinstimmt. Hierbei soll [KalNr] als Fremdschlüssel für tblKalibrieraufträge und [PruefPktKal] als Fremdschlüssel für tblPruefplan mitgeschrieben werden.
Datensätze, die einen Inhalt (Zahl m) in [PruefAnz] besitzen, sollen m mal angehängt werden.

Das ganze soll separat auch so möglich sein, dass bestimmte Datensätze zum Anhängen ausgewählt werden können.

Ich würde es mit einer Anfügeabfrage machen. Mit VBA lässt sich das bestimmt eleganter lösen.

Bin dankbar für jeden Vorschlag.

MzKlMu

#1
Hallo,
ZitatIch würde es mit einer Anfügeabfrage machen.
mache es damit, VBA ist 2. Wahl. SQL (=Anfügeabfrage) ist wenn es geht zu bevorzugen.
Du kannst die Anfügeabfragen per VBA starten (um die Reihenfolge der Abfragen sicherzustellen) und/oder die Abfragen mit Parametern per VBA zusammenbauen. Aber das eigentliche Anfügen der Daten erfolgt per Abfrage (SQL).
Beispiel für das Ausführen von Abfragen per VBA:
CurrentDb.Execute "Abfragename1), DbFailOnError
CurrentDb.Execute "Abfragename2), DbFailOnError
.
.
Gruß Klaus

Kannkaumvba

Hallo Klaus,

erstmal vielen Dank für Deine Antwort. Irgendwie bekomme ich selbst die Anfügeabfragen gerade nicht so hin, wie es sein sollte.

Vielleicht gehe ich erstmal einen Schritt zurück.

Den Datensatz in tblKalibrieraufträge würde ich, wie ich es sonst auch mache, über ein Makro aus einem Formular SetzenWert [PosNumKal]=[PosNum] generieren. Allerdings geht das ja nur über Formulare und nicht direkt auf die Tabelle. Hast Du einen Tipp für mich, wie neue Datensätze und Übertragung von Feldwerten einfach mit VBA gemacht werden kann?

Bei der Anfügeabfrage komme ich nicht weiter, da nicht nur die Datensätze aus tblPruefplan übernommen werden sollen ([PruefPkt] nach [PruefPktKal]) sondern auch zu jedem Eintrag in tblKalibrierungen [KalAuftrNr] in [KalNr] übernommen werden muss.

Beim Ausführen passiert leider überhaupt nichts.

Gruss

MzKlMu

Hallo,
ZitatHast Du einen Tipp für mich, wie neue Datensätze und Übertragung von Feldwerten einfach mit VBA gemacht werden kann?
hierzu ist weder ein Makro noch VBA erforderlich. Wenn Du ein an die Tabelle/Abfrage gebundenes Formular verwendest geht das alles automatisch. Das kann Access sozusagen serienmäßig.

Kannst Du mal ein Bild des Beziehungsfensters hier zeigen (bitte vollständig) und an Hand dieses Bilde noch mal beschreiben, was wo angefügt werden soll ?
Gruß Klaus

Kannkaumvba

Hallo Klaus,

habe das Bild für Webseiten komprimiert. Hoffe es ist jetzt vollständig zu sehen.

Nochmal eine Beschreibung wie es funktionieren soll:

1. Aus einem Endlosformular heraus wird mit VBA Code für einen Datensatz aus tblPositionen ein Datensatz in tbl Kalibrieraufträge mit [PosNum] = [PosNumKal] angelegt. Steht!
2. Gleichzeitig sollen in tblKalibrierungen Datensätze angehängt werden.  Und zwar alle Tupel mit [PosNumPruef] = [PosNum]. [PruefPkt] soll in [PruefPktKal] geschrieben werden. Ausnahme: Die Tupel mit [PruefAnz] =n (<> 0,1), sollen n-fach angehängt werden.
3. In jedem angehängten Datensatz in tblKalibrierungen soll [KalAuftrgNr] in [KalNr] geschrieben werden.

Ich hoffe es verständlich beschrieben zu haben.

Danke für deine Hilfe!

Gruss

Kannkaumvba

Beziehungen nochmal angehängt, da die Datei nun geöffnet wird und jetzt die Auflösung zu klein ist ;-(

Kannkaumvba

So, die Anfügeabfrage funktioniert eigentlich. Beim Ausführen bekomme ich die erwartete Anzahl an Datensätzen, wenn ich den PK als Kriterium vorgebe.

Wenn ich allerdings ein Feld in dem der PK steht, aus dem Formular, aus dem die Abfrage ausgeführt werden soll vorgebe bekomme ich folgende Fehlermeldung:

"1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben."

Die Abfrage wird mit folgendem Code gestartet:

Currentdb.Execute "qryKalibrierauftragPruefpunkteAnlegen"

Der müsste eigentlich gehen. Wüsste jemand wo hier der Fehler liegen könnte?

trebuh

Hi.

Und wie übergibst Du den PK-Wert an die Abfrage?

Kannkaumvba


MaggieMay

Hallo,

mit Einsatz der Eval-Funktion können Formularfeldbezüge in Abfragen auch via Execute ausgewertet werden.

Beispiel:
Select ...
From ...
Where ... = Eval("forms!MeinForm!MeinFeld")
Freundliche Grüße
MaggieMay

Kannkaumvba

Hallo Maggie,

Eval hab ich auch schon ausprobiert. Fiunktioniert leider auch nicht.

Trotzdem Danke!

DF6GL

Crossposting ist unerwünscht und nicht sehr prickelnd:

http://www.ms-office-forum.de/forum/showthread.php?t=330869

  >:(
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

Kannkaumvba

Sorry, war mir nicht bewusst. Hab's gerade in der Netiquette nachgelesen. Muss ich dann wohl beim ersten Mal übersehen haben.

MaggieMay

Zitat von: Kannkaumvba am März 07, 2016, 05:51:02
Eval hab ich auch schon ausprobiert. Fiunktioniert leider auch nicht.
Dann hast du dabei wohl etwas falsch gemacht - zeige den SQL-Code dazu.
Freundliche Grüße
MaggieMay