Hallo,
ich habe zwei Tabellen. Diese sollen mit einer Nummer, die in beiden Tabellen drin stehen wird, verknüpft sein. In einem Formular habe ich eine Dropdownliste aus der Tabelle1. Die weiteren Textfelder sollen alle aus der Tabelle2 kommen. In dieser Tabelle2 sind jedoch nur dann Werte enthalten, wenn das Formular erstmalig gespeichert wurde.
Ich stehe momentan vor dem Problem, wie ich dieses Abfrage mittels SQL schreiben muss. Ich kann den "einfachen" INSERT Befehl für das erzeugen eines neuen Eintrags verwenden. Doch sobald einmal der Eintrag vorhanden ist, dann soll es nur noch mit dem UPDATE Befehl aktualisiert werden. Könnte jemand mir helfen, wie dies zu bewerkstelligen ist?
Danke schon im Voraus!
Gruß
dmaccs
Hallo,
mysteriös, was Du da anstellen willst...
Wie auch immer, in EINER SQL können beide Sachen nicht zusammen erledigt werden.
Du kannst z. B. mit der Dcount-Funktion auf die Existenz eines (bestimmten) DS prüfen und im Fall von Vorhandensein eine Update-Abfrage , ansonsten eine Insert-Abfrage absetzen...
Vermutlich ließe sich der (nebulöse) Vorgang besser mit einer Haupt-Unterformular-Konstruktion behandeln.
Hallo,
danke schon mal für den Tipp.
Versuche den Vorgang etwas genauer zu beschreiben:
Ich habe eine Tabelle die mir zur Verfügung gestellt wird mit einer Artikelnr. Diese Tabelle enthält auch noch weitere Spalten, die ich nicht verwende. In dieser Tabelle darf ich nicht schreiben.
Deswegen habe ich ein Formular und eine zweite Tabelle. In dem Formular ist eine DropDownListe mit eben jenen Artikelnr. aus der Tabelle1. Im Formular habe ich dann bsp. Textfelder wie, Kurzbeschreibung, Ersteller und Links für 3 Bilder. Diese Informationen sollen in der Tabelle2 gespeichert werden, aber NUR für die Artikelnr. die auch bearbeitet werden. D.h. in Tabelle2 ist nur eine Teilmenge der Artikelnr. von Tabelle1. Nun ist am Anfang Tabelle2 komplett leer, so dass ich beim ersten Mal ein INSERT Befehl aufrufen kann. Ab dem zweiten Mal kann nun die gewählte Artikelnr. bereits vorhanden sein oder eben noch nicht, und genau dort fehlt mir der Befehl, wie diese zu bewerkstelligen ist.
Ich hoffe, dass es so verständlicher ist.
Gruß
Hallo,
nach meiner Auffassung ist das ein Fall für eine 1:1 Beziehung. Erstelle die Tabelle 2 mit den gewünschten Feldern. Mit einem Feld Artikelnummer (gleicher Datentyp wie in Tabelle1).
Dann stellst Du über die Arzikelnummer eine Beziehung her.
Erstelle dann ein Hauptformular zur Anzeige der Daten der Tabelle1 und darin ein Unterformular für Tabelle2. Über die Schlüsselfelder werden Hafo und Ufo verknüpft.
Wenn Daten in Tabelle2 vorhanden sind werden diese angezeigt, wenn nicht, kannst Du direkt Daten in der Tabelle 2 erfassen. Die Artikelnummer wird dabei automatisch an Tabelle2 übertragen. Dann brauchst Du keine einzigen Buchstaben Code, geht alles automatisch.
Hallo,
das hört sich gut an. Dann werde ich diesen Weg einschlagen und schauen, dass alles funktioniert.
Gruß
Hallo nochmal,
nun habe ich es versucht mit den Formularen, jedoch komme ich noch mit der Einrichtung der Abfragen nicht ganz klar, was wem wie wo übergibt. Ich habe nun ein Hauptformular, welches das Dropdown enthält. Zudem ist nun ein Unterformular eingerichtet, dass die anderen Felder besitzt. Die Verknüpfung zwischen dem Unterformular und dem Hauptformular läuft über die Artikelnummer. Braucht es nun im Unterformular auch ein Textfeld mit der Artikelnummer oder nicht mehr? Und wie verknüpfe ich dann die restlichen Textfelder? Sorry für die vielen Rückfragen, aber mit Formularen hatte ich bis jetzt noch nicht so in Access, die nicht per SQL aufgebaut wurden.
Gruß
Hallo,
wie hast Du die Verknüpfung zwischen Hafo und Ufo gemacht?
Im Ufo brauchst es die Artikelnummer nicht (als feld) aber die Artikelnummer muss in der Datenherkunft vorhanden sein.
Die restlichen Textfelder müssen nicht verknüpft werden, die Artikelnummr reicht.
Zitat, aber mit Formularen hatte ich bis jetzt noch nicht so in Access, die nicht per SQL aufgebaut wurden.
Mit SQL kann man doch keine Formulare aufbauen, nur die Datenherkunft ist SQL.
Hallo,
also bei mir sieht die Verknüpfung wie folgt aus:
Ich habe in Hafo das Formlar Ufo eingebunden. Dazu habe ich unter Ufo Daten folgendes eingestellt:
Herkunft: Ufo
Verkn. von: Artikelnr. (von Hafo)
Verkn. nach: Artikelnr. (von Ufo)
Aktiviert: ja
Gesperrt: nein
Nun befinden sich beim Ufo Textfelder, die allesamt ungebunden sind.
Edit: Ok, wenn ich diese nun an die Tabelle2 binde, dann werden mir die Werte angezeigt. Und ich kann die dann direkt bearbeiten. Das klappt. Nun muss ich nur noch herausfinden wie ich es am besten realisiere, dass beim Überschreiben eine "Warnung" kommt, bzw. die Speicherung erst dann stattfindet, wenn ich auf den Button "Speichern" klicke.
Sorry, ich meinte auch nicht mit SQL die Formular aufbauen, sondern den Inhalt der Formulare habe bis jetzt direkt mit den SQL Befehlen "gefüttert".
Schönen Gruß
Hallo,
Zitatsondern den Inhalt der Formulare habe bis jetzt direkt mit den SQL Befehlen "gefüttert".
bist Du sicher, dass Du SQL meinst und nicht VBA, bzw. VBA mit SQL Bestandteilen? Warum verschenkst Du überhaupt serienmäßige Funktionen von Access?
Zur Datenspeicherung in Formularen bedarf es keines einzigen Buchstaben Code, das kann Access mit seinen Standardfunktionen besser als Du.
Verwende immer gebundene Formulare, der Rest macht Access.
Hallo,
ja du hast wohl recht, VBA mit SQL Bestandteilen ist die beste Formulierung. Ja ich habe VBA Code geschrieben, das mit SQL - Befehlen ausgestattet war.
Ich möchte klar das meiste direkt aus Access nehmen und nicht unbedingt alles neu schreiben, was ev. schon Access mir direkt mitliefert.
Das mit der Datenspeicherung klappt sehr gut. Jedoch würde ich gerne, dass der Nutzer "gezwungen" wird ein "Save button" zu drücken damit die Einträge wirksam werden. Es kommt leider häufig bis jetzt vor, dass mal kurz was geändert wird, von einem Telefonat unterbrochen und dann noch mal den alten Stand haben möchte.
Ich vermute mal es sollte irgendwie mit dem Ereignissen bewerkstelligt werden könnte. Vielleicht hast du da noch einen Tipp für mich. Bis jetzt habe ich ein Button auf dem Formular gehabt, das eben jenen SQL-Update Befehl ausgeführt hat, sobald darauf gedrückt wurde.
Sorry für die vielen Fragen.
Edit: Und noch eine zusätzliche Frage: Nun kriege ich die Daten aus der zweiten Tabelle in das Unterformular. Kann ich irgendwie Werte aus der Tabelle1 auch im Unterformular anzeigen lassen? (Diese sollen nicht geändert werden können oder dergleichen, ausschließlich anzeigen.
Gruß
Hallo,
im Anhang mal ein Beispiel mit Pflichtfeldern und Buttons zum Speichern (oder nicht). Mit einem gebundenen Formular.
Man kann noch nicht mal die DB beenden ohne Button. Schaue Dir den Code an und versuche da durchzusteigen.
Ob Du wirklich Pflichtfelder brauchst, weis ich natürlich nicht. Aber das Speichern kannst Du abkupfern. ;D
[Anhang gelöscht durch Administrator]
Hallo dmaccs,
die Methodik von Klaus zum Prüfen von Pflichtfeldern kann man verallgemeinern, insofern als das man nicht in bei jedem Formular alle Felder einzelnd mit Code überprüft.
Schaue im Modul die beiden Funktionen FormsCheck u. Part. Mit diesen Funktionen wird ein Speichern mit dem Button "Speichern" nur realisiert, wenn alle Felder ausgefüllt sind.
Zum Festlegen eines Feldes als Pflichtfeldes wird dieses nur mit Marke="X" festgelegt.
So kannst du in jedem beliebigen Formular diese Module in Zusammenhang mit dem Belegen von Marke benutzen.
Gruß Oma
[Anhang gelöscht durch Administrator]
Hallo,
danke euch beiden für die Beispiele. Leider bin ich noch nicht dazu gekommen diese anzuschauen, da andere Arbeit anstand. Jedoch hätte ich noch eine Frage, die ich bin schnellen probieren nicht auf anhieb gelöst habe: Ich möchte Werte im Unterformular anzeigen, die jedoch aus dem Hauptformular kommen. Wie lautet dann dazu der Syntax? Ich kann ja nicht zwei Tabellen an das Unterformular binden. In dem Textfeld soll ein Wert aus der Spalte "Comment" aus Tabelle1 angezeigt werden, das in der Zeile steht, welche Artikelnr. ausgewählt wurde.
Ich wollte es in den Abfrageeditor hineinpacken und es mit einer WENN Abfrage machen, jedoch scheitert es noch am Code. Gibt's dazu auch eine elegantere Lösung?
Und eine Frage am Rande: Bis jetzt sind die Tabelle in einer Access DB. Kann ich die Formulare und alle weiteren Abfragen ohne Änderung übernehmen, wenn aus der Access DB eine SQL DB wird, jedoch mit Access Frontend / Formularen?
Gruß
Hallo,
ZitatIch möchte Werte im Unterformular anzeigen, die jedoch aus dem Hauptformular kommen.
das musst Du mal näher erklären, wenn die daten im Hauptformular sind, wozu dann nocht mal im Ufo?
Und natürlich kannst Du 2 Tabellen über eine Abfrage als Datenherkunft verwenden. Die Tabellen benötigen nur eine Beziehung, dann geht das problemlos.
Hallo,
es ist vielleicht auch mehr nur das Problem auf Grund des Layouts. Letztlich habe ich eine vordefiniertes Layout, welches aus PPT stammt und ich in Access nachbilden darf, so dass die Pflege der Daten nicht mehr in PPT geschehen, sondern in Access. Das Hautpformular mit der Tabelle1 hat mehrere Spalten, von denen ich einige zur Information darstellen möchte, jedoch nicht geändert werden dürfen / müssen.
Das Unterformular hat die Verknüpfung zu Tabelle2 welches meine Arbeitstabelle ist.
nun sollte in einer Zeile folgendes Sein.
FeldTab1 FeldTab1 FeldTab2 FeldTab1
Und dieses layoutmäßig sollte sich im Ufo befinden.
Gruß
PS: Trotz der Lösung mittels Formularen und Unterformularen, besteht die Möglichkeit es mit SQL / VBA Befehlen zu erledigen? Ich denke gerade an so etwas wie, dass es nach der Artikelnr. suchen soll, wenn es nichts findet, dann soll nichts darstellen und nach dem beenden soll das INSERT Befehl kommen, wenn er etwas gefunden hat, dann soll das UPDATE Befehl ausgeführt werden.
Hallo,
Du kannst sowohl im Hafo als auch im Ufo beide Tabelle in eine Abfrage aufnehmen (mit der Beziehung) und beliebige Felder aus beiden Tabellen im Hafo bzw. Ufo anzeigen, gemischt völlig problemlos.
Zitatbesteht die Möglichkeit es mit SQL / VBA Befehlen zu erledigen? Ich denke gerade an so etwas wie, dass es nach der Artikelnr. suchen soll, wenn es nichts findet, dann soll nichts darstellen und nach dem beenden soll das INSERT Befehl kommen, wenn er etwas gefunden hat, dann soll das UPDATE Befehl ausgeführt werden.
SQL/VBA ist hier völlig fehl am Platz. Mit gebundenen Formularen wird genau dieser Wunsch von Dir
automatisch erledigt. Findet er was wirds angezeigt, findet er nichts hast Du einen leeren Datensatz in den Du direkt schreiben kannst was dann auch automatisch in der entsprechenden Tabelle landet.
Hallo,
und sorry, dein letzter Beitrag ist mir trotz mehrmaligen Lesens nicht verständlich???
Du musst das schon genauer beschreiben, wenn du Hilfe haben willst.
Gruß Oma
Hallo,
mit einer Abfrage bekomme ich das gewünscht Ergebnis, dass es mir alles anzeigt, für die es eine Artikelnr., auch wenn noch nicht überall eine Beschreibung vorhanden ist.
Jedoch wird genau diese Abfrage nicht korrekt im Formular, besser gesagt im Unterformular angezeigt. Das UFO ist mit der Abfrage verknüpft. Die Textfelder sollen mit den Werten aus der Abfrage gefüllt werden.
Der Aufbau meiner DB / Tabellen sieht wie folgt aus:
ZitatTabelle1 hat die Spalten "ArtikelNR", "Text1", "Text2"
Tabelle2 hat die Spalten "TBNr", "TBtxt1", "TBtxt2"
Tabelle3 hat die Spalten "TRNr", "TRtxt"
Die Abfrage ist wie folgt aufgebaut:
SELECT ArtikelNR, Text1, Text2, TRtxt, TBtxt1, TBtxt2
FROM (Tabelle1 INNER JOIN Tabelle3 ON Tabelle1.ArtikelNR = Tabelle3.TRNr) LEFT JOIN Tabelle2 ON Tabelle1.ArtikelNr = Tabelle2.TBNr
ORDER BY ArtikelNr;Wenn ich nun die Abfrage öffne, dann wird korrekt die gesamte Liste mit den Nummern aufgeführt und wenn in Tabelle2 auch Werte zu der ArtikelNr stehen mit angezeigt.
Sobald ich nun im Formular die ArtikelNr auswähle, bleibt das Unterformular komplett leer, auch wenn die Felder auf die Tabelle1 Verweisen, welches Einträge enthält. Sobald nun im Feld TBtxt1 etwas eingetragen wurde und der Artikel noch mal ausgewählt wird, dann werden alle Felder korrekt ausgefüllt (eben mit jenen Werte aus Tabelle1 und Tabelle3, die davor nicht angezeigt werden).
Was mache ich bei der Verknüpfung falsch?
Gruß
Hallo,
erstelle mal eine kleine Beispieldb und lade diese mit einer (Fehler) Beschreibung hier hoch.
Hallo,
anbei eine Test-DB die das Problem darstellt.
Es ist exemplarisch mit den Feldnamen und Bezeichnungen. Ich möchte wie gesagt die Werte im UFO darstellen mit allen Feldern, die einen Inhalt haben, bei einer getroffen Auswahl im HFO.
Vielen Dank schon mal.
Gruß
[Anhang gelöscht durch Administrator]
Hallo,
die ganze Zeit war ja von 2 Tabellen die Rede.
Zitatich habe zwei Tabellen. Diese sollen mit einer Nummer, die in beiden Tabellen drin stehen wird, verknüpft sein.
Mit 2 von Tabelle1 abhängigen Tabellen brauchst Du auch zwingend 2 Ufos, für jede Tabelle eines.
Ich habe Dir auch im Beziehungsfenster die Beziehungen 1:1 mit RI eingestellt. Der Sinn der Tabelle3 erschließt sich mir aber nicht, falls es ebenfalls 1:1 ist. Oder sollen da zu
einem Artikel
mehrere Datensätze erfasst werden?
Das Kombi zur Artikelsuche funktioniert jetzt auch.
Bitte beschreibe das mal genauer.
[Anhang gelöscht durch Administrator]
Hallo,
vielen Dank für deine Hilfe.
Wie ich sehe, hast du das Unterformular anders eingebunden als ich. Kannst du mir sagen, wie? Ich hatte das UFO einfach in das HFO gezogen.
Aber zum Hautpthema:
Tabelle1 ist die "führende" Tabelle und besitzt den Artikelnr, eine kurze Textbeschreibung und einen Verweis auf einen Typ.
Die nähere Beschreibung, was für ein Typ es ist, befindet sich in Tabelle2. Und in Tabelle3 sollen weitere Kommentar und andere Informationen geschrieben werden.
Ich darf Tabelle1 und 2 nicht verändern. Deswegen brauche ich meine Arbeitstabelle3. Für das Formular, sollen jedoch informativ Werte aus Tabelle1 und 2 angezeigt werden.
[Als bsp könnte auch ein Autoverwaltung sein. Du hast die Artikelnr für die PKW's, diese sind je nach Typ kategorisiert, wie PKW, LKW, NKW, und PKW wird dann noch weiters auf
Mein Problem mit den Ufo's ist die Anordnung. Mir ist leider vorgegeben wie das fertige Layout aussehen soll.
Im Anhang mal ein Bild von der Gestaltung und warum es mir Probleme verursacht.
Gruß
[Anhang gelöscht durch Administrator]
Hallo,
mit den neuen Hinweisen sieht das jetzt anders aus.
Das ist jeweils eine 1:1 Beziehung von Tabelle1 zu Tabelle2 und von Tabelle2 zu Tabelle3.
Das kannst Du in einem Formular ohne Unterformular darstellen.
Mit 2 Left Joins bleibt die Abfrage auch bearbeitbar.
Siehe Anhang.
[Anhang gelöscht durch Administrator]
Vielen Dank!
Ich schaue jetzt, dass ich es auf meine "Live"-Daten überragen kann und es genauso funktioniert.
Merci!
Gruß
Hallo,
also mit den Tabellen klappt das nun bestens. Vielen Dank noch mal.
Eine Erweiterung ist nun aber dazu gekommen, dass die Tabelle2 nicht nur ein Wert besitzen kann, sondern mehrere in Relation zu Tabelle1, also eine 1:n Beziehung. Tabelle3 hat aber weiterhin eine 1:1 Beziehung zu Tabelle1.
Geht das dann wieder über Unterformulare oder gibt es einen anderen Weg dazu?
Gruß
Hallo,
das erfordert wieder völlig andere Beziehungen. Dann brauchst Du auch zwingend ein Unterformular für Tabelle2.
Ich komme aber erst heute Abend dazu, das zu ändern.
Vielen Dank vorab schon für deine Hilfe!
Gruß
Hallo,
anbei mein Vorschlag.
Das sind jetzt 2 Ufos. Die Artikelnr wird automatisch nach Tabelle3 (bei Bedarf auch nach Tabelle2) übertragen.
Es gibt weder VBA noch SQL. Nur gespeicherte Abfragen. Wobei das natürlich auch SQL ist, aber eben nicht programmiert.
Das geht alles völlig problemlos mit den Grundfunktionen von Access.
Daher habe ich auch mal auf ein Kombi zum Suchen verzichtet, das kann man noch einbauen. Ich wollte ja bewusst zeigen, dass hier nichts programmiert werden muss.
[Anhang gelöscht durch Administrator]
Hallo MzKlMu,
vielen vielen Dank für das anschauliche Beispiel.
Das erfüllt genau das, was funktionsseitig zu realisieren ist.
Jedoch gibt es einen kleinen Punkt, der leider sofort ins Auge sticht: Die Formatierung. Das mit den Unterformularen ist perfekt und sehr flexibel, jedoch habe ich eine Layoutvorgabe die übernommen werden sollte. Und dort habe ich das Problem, ich kann jetzt mehrere Einzelne UFO's erstellen und dann es so anordnen wie gewünscht. Die Datensatzleiste kann ich ausblenden, das ist schon gut, jedoch v.a. auf Grund von Platzmangel, würde ich den linken Ballken mit dem Pfeil auch ausblenden. Gibt es dazu eine Option?
Gruß
Hallo,
das ist der Datensatzmarkierer, den kannst Du in den Formateigenschaften des Formulars ebenfalls ausblenden.
Du kannst die Ufos so einstellen, dass die nicht mehr zu erkennen sind.
Anbei noch eine erweiterte Version, mit Kombi zum Suchen des Artikels und den Formateinstellungen der Ufos.
[Anhang gelöscht durch Administrator]
Danke für das Beispiel und dem Stichwort!
Dann kann ich mich nun dransetzten es komplett aufzuarbeiten und einzupflegen. Vielen Dank für die Unterstützung. (Kann aber gut sein, dass ich mich noch mal melde wenn etwas nicht klappt ;) )
Schönen Tag!
Gruß