Access Hilfe - Abfrage abhängig vom Formularinhalt

Folgender Sachverhalt:

Folgende Tabellen sind vorhanden:frowning:Beispielnamen zur verdeutlichung)

tblKunden
tblKundenkommentare

In der Tabelle Kunden sind alle Kunden einer Firma aufgezählt und in der Tabelle Kundenkommentare können Kommentare zu den Kunden hinterlegt werden bzw. sind hinterlegt (1:n).

Ein Formular ist erstellt, welches alle Information des Kunden zusammen fasst.

Jetzt das Problem:

Ich würde gerne über eine Listenfeld alle Kommentare anzeigen lassen z.B. über das Datum des Eintrages und bei Auswahl im Listenfeld den entsprechenden Kommentar in einem Textfeld ausgeben. Bei mir hapert es bei der Anzeige der Kommentare im Listenfeld. Ich weiß nicht wie ich die Bedingung setzen soll oder die SQL Abfrage, dass er mir nur jeweils die Einträge zeigen soll, abhängig vom bestimmten Kunden (KundenID) den ich gerade im Formular abgerufen habe.

Ist die Richtung richtig:

SELECT [Abfrage].[Erfass_Datum] FROM Abfrage WHERE KundenID= …; ?

Ich bekomm es nur hin, dass alle Datensätze angezeigt werden und nicht die entsprechend des aktuell aufgerufenen Kundens.

Der nächste Schritt, wäre dann die Funktion, dass man ein neuen Datensatz über das Formular anlegen kann und auch den aktuell geöffneten automatisch bei Änderung überschreibt. Aber das würde ich dann erstmal selber probieren, wenn der erste Schritt funktioniert.

Vielen Dank schon mal für eure Hilfe!

Warum setzt du in das Formular nicht ein Unterformular,
das du mit dem Hauptformular über die KundenID verknüpfst. Ist besser und saubere als ein Listenfeld.
Wenn du ein Listenfeld nimmst mußt du es via VBA über eine Schleife und add.list füllen.

Kannst aber auch beim Öffnen des Kundenformulars,
die Abfrage der Kommentare wie folgt anpassen:

Dim sql
sql = „select * from kommentare where KundenID=“ & FeldKundenID

CurrentDb.QueryDefs(„AbfrageKommentare“).sql = sql

Warum setzt du in das Formular nicht ein Unterformular,
das du mit dem Hauptformular über die KundenID verknüpfst. Ist besser und saubere als ein Listenfeld.
Wenn du ein Listenfeld nimmst mußt du es via VBA über eine Schleife und add.list füllen.

Aber selbst in einem Unterformular, müsste ich ja eine gewisse Auswahl anbieten meiner verschiedenen Datensätze, weil ich den Kommentar über ein Textfeld ausgeben möchte, dieser ist oft, mehrere Zeilen Lang und deshalb, ist eine Vorauswahl sinnvoller, als eine Endlosformular anzulegen. Oder welchen Baustein sollte man dann nehmen?

Ich mach mich mal derweil schlau und teste das mit add.list.

Bei einem verknüpften Unterformular brauchst du nicht mehr selektieren, da es ja als Unterformular über die
KundenID verknüpft ist. Und somit werden nur noch die Kommentare des einen ausgewählten Kunden im Unterformular angezeigt.

Einen hab ich noch:
Beim Öffnen des Kundenformulars:

Me.Liste1.RowSourceType = „Table/Query“
Me.Liste1.RowSource = „SELECT FeldKommentar from tblKommentare where KundenID=“ & FeldKundenID
Me.Liste1.Requery

Bei einem verknüpften Unterformular brauchst du nicht mehr selektieren, da es ja als Unterformular über die
KundenID verknüpft ist. Und somit werden nur noch die Kommentare des einen ausgewählten Kunden im Unterformular angezeigt.

Hey,

vielen Dank, der Vorschlag gefällt mir am besten und funktioniert auch tadellos.

Ich hatte vorher das befüllen des Textfeldes über das Listenfeld gesteuert, also im Listenfeld alles ausgegeben, nur das Datum angezeigt und dann über

AfterUpdate

Text = Liste.Column(3)

das Textfeld befüllt, geht das über diesen Weg auch, indem ich bei der Select Abfrage ein * einfüge statt der spezifischen Spalte? Weil irgendwie möchte er nicht so wie ich.

Was funktioniert denn nicht, sie können die RowSource auch auf „select * from…“ setzen, und die Übergabe in das Textfeld können Sie dann via Ereignis Klick
vornehmen. Zu beachten dabei ist nur das erste Feld ist
Liste.Column(0). Was genau funktioniert denn nicht?

Okay, ich habe es jetzt hinbekommen, die Reihenfolge der Column hat mich etwas verwirrt und musste deshalb alle ausprobieren.

Wie realisiere ich jetzt am besten die Möglichkeit einen neuen Kommentar hinzuzufügen und den aktuell den ich betrachte zu ändern?

Über Buttons?

Tja, wie schon gesagt, im Unterformular wäre das einfacher gewesen, jetzt mußt du jedes hinzufügen und
ändern via SQL durchführen, da die Kommentare ja nicht
direkt geöffnet sind.
z.B.
DoCmd.RunSQL „Update tblKommentare set FeldKommentarTXT = '“ & ÄnderungsText & „’ where KundenID =“ & KundenID & " and KommentarID= & KommentarID

Das mit dem Unterformular habe ich mal ausprobiert. Ich habe dafür einfach den Assisten genutzt und wie sie schon sagten über die OrgID die Verknüpfung hergestellt, allerdings gefällt mir die Darstellung nicht. Er zeigt mir die entsprechenden Einträge in einer normalen Tabellenansicht an, obwohl ich selbst in der Entwurfsanzeige einfach mal Unterformular „geleert“ habe.

http://img525.imageshack.us/img525/239/access.jpg

Ich weiß man merkt, ich bin ein blutiger Anfänger, komme aus der Excel Richtung. Ist auch völlig in Ordnung, falls das mittlerweile zuviel ist.

Ja, bei den Eigenschaften des Unterformulars, muß bei Ansicht, Endlosformular eingestellt sein, dann können sie es grafisch darstellen, wie sie wollen. Jetzt steht da „Datenblattansicht“.
Ich programmiere jetzt seit 18 Jahren in Access und seit
8 Jahren in Visual Studio.
Ich helfe gerne weiter.