Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Bestimmten Datensatz aus Formular identifizieren und öffnen





Frage

Hallo Zusammen, In einem Listenfeld auf einem Formular gebe ich Datensätze aus, welche u.A. aus den Feldern Nr (AutoWert), Titel, Umfang etc. bestehen. Nach Doppelklick auf einen Datensatz (aus dem Listenfeld) öffnet sich ein neues Formular, mit näheren Beschreibungen. Dies habe ich folgendermaßen programmiert (bzw. aus der Access Hilfe entnommen): Dim ctlListe As Control 'Control-Objektvariable, welche auf das Listenfeld zeigt Dim varElement As Variant 'Element in der Control-Liste Dim oeffnen As String 'Objektvariable, um ein Fenster zu öffnen 'die Zahl der ersten Spalte des ausgewählten Listenfeldeintrages zurückgeben: Set ctlListe = Forms!Startfenster!lAnzeigeP 'Control-Objektvariable zurückgeben, die auf das Listenfeld zeigt For Each varElement In ctlListe.ItemsSelected 'Ausgewählte Elemente durchlaufen Next varElement oeffnen = "Weitere_Infos" DoCmd.OpenForm oeffnen DoCmd.GoToRecord acDataForm, oeffnen, acGoTo, ctlListe 'zu ausgewähltem Datensatz springen Problem an der Sache ist, dass wenn ich einen Datensatz LÖSCHE, die Nr (welche durch einen AutoWert vergeben wird und die ich zum identifizieren des Datensatzes verwende) nicht mehr mit der internen Nr des Datensatzes übereinstimmt und mir dann den entsprechend falschen Datensatz liefert! Sprich, anstatt Datensatz Nr 12 öffnet sich in dem neuen Formular der Datensatz Nr 13. Hat da jemand ein Bugfix oder eine andere Programmiermöglichkeit parat? Ich wäre super dankbar!

Antwort 1 von .struppi

Hallo,
Der Programmcode ist nicht unbedingt optimal. Eigentlich spricht man ein Listenfeld nur so an, wenn eine Mehrfachauswahl getroffen werden soll.
Ich verstehe aber auch das Problem noch nicht.....
Sag doch nochmal mit einfachen Worten was passieren soll wenn Du einen Listeneintrag doppelkickst...
gruß struppi

Antwort 2 von Phantom_Fies

Das wird so auch nicht funktionieren.
Bei GoToRecord gibst du die Anzahl der DS an, um die nach vorne geblättert wird, als Kriterium verwendest du aber den AutoWert. Sobald du einen DS löschst, stimmt das natürlich nicht mehr. Du musst daher eine Abfrage verwenden.
Den aktuellen Wert des Listenfeldes (in dem Fall die DS-Nummer) liest du einfach
mit


Me.Listenfeld.Value

im Doppelklick-Ereignis aus und schreibst ihn in eine Variable. Diese übergibst du an das zu öffnende Formular mit den weiteren Infos. Im Öffnen-Ereignis des Formulars baust du dir dann die Datenquelle des Formulars als SQL-Anweisung zusammen. In dieser SQL-Anweisung musst du dann als Kriterium die Variable mit der DS-Nummer angeben.
Beispielsweise so:


Dim SQL As String

SQL = "SELECT Tabelle.* FROM Tabelle  
       WHERE (Nr = " & Variable & ")" 

Me.Recordsource = SQL

Da ich nicht weiß, wie du das in deinem Formular geregelt hast, hab ich einfach diese Lösung genommen. Probier es einfach aus.




Antwort 3 von Phantom_Fies

Mir ist gerade noch eine Alternativ-Lösung eingefallen. Bei Access 2002 (wie es bei den anderen Versionen ist, weiß ich nicht) gibt es beim Öffnen eines Formulars die Möglichkeit, ein Kriterium anzugeben. Das sieht dann so aus:


DoCmd.OpenForm "Formularname", , , "[Nr] = " & Variable

Die DS-Nummer musst du genau so auslesen wie oben beschrieben.
Das setzt aber voraus, dass das zu öffnende Formular bereits seine Datenquelle hat. Bei genauerer Betrachtung ist das für dich sogar die bessere Lösung, wenn ich deine Beschreibung richtig verstanden habe.



Antwort 4 von frokzee

Hi Phantom_Fies,

erstmal Vielen Dank für die Hilfe.

Ich habe das gerade genau so probiert. Jedoch weiß ich nicht, wie ich die Varibale von der einen Klasse in die andere übergebe (in Java könnte ich es ;-)), deshalb hab ich es so problert:

Dim SQL As String
SQL = "SELECT * FROM Tabelle WHERE ((Tabelle.Nr) = 'Form_Startfenster.lAnzeige_DblClick.Variable')"

Me.RecordSource = SQL

Das funktioniert jedoch nicht!

Gruß frokzee

P.S. Ich verwende Access 97!

Antwort 5 von frokzee

Sorry, ich hab ich SQL-Anweisung falsch geschrieben... Es sollte heißen:

SQL = "SELECT * FROM Tabelle WHERE ((Tabelle.Nr) = " & Form_Startfenster.lAnzeige_DblClick.Variable & ")"

So gehts!

Vielen Dank für den Tip.

Gruß frokzee

Antwort 6 von Phantom_Fies

Und so funktioniert es? Ich verstehe den Ausdruck im SQL-String nicht so recht. Den Umweg über die Variable kann man sich auch sparen, das stimmt.
Aber normalerweise müsste es doch dann heißen:
Forms!Formularname.Listenfeldname.Value
Oder hast du's doch so gemacht?
Egal, wenn's funktioniert...



Antwort 7 von frokzee

Stimmt, das mit der Variable ist ein Umweg. Einfach Listenfeldname.Value dann gehts!

Besten Dank nochmal :-)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: