Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: RonMan am Februar 20, 2020, 09:00:56

Titel: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: RonMan am Februar 20, 2020, 09:00:56
Guten Morgen Access Gemeinde,
irgendwie habe ich einen Hänger und bräuchte eure Hilfe.
Da unser Inventurumfang immer größer wird. wollte ich mir das alles etwas vereinfachen. Ich habe also eine DB gebaut, in der ich bequem nach Artikeln suchen kann und wenn der Artikel gefunden ist, möchte ich ihn per Doppelklick in die Inventurliste einfügen (siehe Bildanhang).
Und genau da liegt der Hase im Pfeffer - ich bekomme einfach die VBA Definition nicht zusammen  :o

Ich habe zum Schluß folgendes versucht:

Private Sub ctlListe_DblClick()
   On Error GoTo e

   If Me.Dirty Then Me.Dirty = False
   Me.sfrm_Inventurliste.Form.Artikelbezeichnung = Me.sfrmSuche.Form.Artikelbezeichnung

e:
   If Err Then MsgBox Err.Description
End Sub


Aber das ist vermutlich lt. Fehlermeldung vollkommener Murks!

Wenn ich einfach mit der Mouse (Rechtsklick) auf kopieren drücke, kann ich den DS bequem einfügen. Das muss doch auch per VBA (+Doppelklick) gehen?

Hat jemand eine Idee und könnte mir bitte weiterhelfen?
Vielen Dank im Voraus!

Grüße Ronny
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: DF6GL am Februar 20, 2020, 12:32:51
Hallo,

mehrere Anmerkungen:

-- die DblClick-Prozedur hat ein Argument, das bei Dir fehlt (Wieso eigentlich)?
-- es reicht Me.Dirty =False. Eine If-Bedingung ist überflüssig.
-- Eine Übertragung von einem Formular in ein anderes ist latent fehlerträchtig. Z. B. es wird nicht angegeben, an welchen Datensatz der Wert übertragen werden soll.


Insgesamt ist das Konzept zu hinterfragen.  Es sollte in diesem Kontext reichen, ein Ja/Nein-Feld "Inventurisieren" in der Teile-Tabelle zu führen und über ein Formular zu bearbeiten.  Die ganze Kopiererei entfällt somit.  Die Inventurliste ergibt sich aus einer Abfrage der Teile-Tabelle.

Alles in allem hängt dies von einem stimmigen Konzept ab.


Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: Beaker s.a. am Februar 20, 2020, 17:35:32
Hallo Ronny,
1. DblClick würde ich auch nicht verwenden; - Gründe werden im Folgenden klar.
Ich würde das Listfeld (DS-Herkunft "Artikel" nehme ich an) mit Mehrfachauswahl
ausstatten, und dann die ausgewählten Artikel per Button mit einer Anfügeabfrage
in die Tabelle "Inventurliste" eintragen. Wobei i.Ü. auch nicht der Text, sondern die
ID des Artikels im dortigen FK gespeichert wird. Ein anschliessendes Requery auf das
UFo zeigt die DS dort an.
gruss ekkehard

edit:
Ganz vergessen, dein Code. Das UFo Artikelsuche sollte es nicht nötig haben
gespeichert zu werden. Du kannst da ja am Artikel nichts ändern, - ich sehe
jedenfalls keine Eingabefelder. "Me.Dirty" kannst also weglassen.
Die Bezeichnung von UFo zu UFo zu übertragen macht keinen Sinn (s.o.).
Ergo kannst du die ganze Prozedur löschen.
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: RonMan am Februar 21, 2020, 07:20:27
Guten Morgen Franz und Ekkehard,
vielen Dank für eure Gedanken dazu! Ich stelle fest, es kann niemals verkehrt sein, wenn mind. 2 andere Augen das Projekt einschätzen. Leider hatte ich gestern meinen Laptop auf Arbeit liegen lassen und kann euch erst heute morgen antworten.
Ich habe jetzt mal intensiv über die Ja/Nein Option und Anfügeabfrage nachgedacht. Die Idee ist nicht schlecht, finde ich aber im Hinblick auf die Übersichtlichkeit nicht ganz so optimal. In eurem Vorschlag (wenn ich das richtig verstehe) klicke ich nach der Auswahl ein Optionsdings an und zum Schluss, (wenn ich alles zusammen habe) wird es an die Inventurliste angefügt. Ist ja eigentlich auch nichts anderes, als es einzeln durch doppelklick anzufügen, nur das ich bei der Doppelklick - Variante immer meinen aktuellen Stand auf der Liste schon vor Augen habe und mir sofort auffallen würde, wenn etwas fehlt. Beim Häckchenauswahldings verschwinden die angekreuzten Artikel bei der Suche "erstmal".

Hm, vielleicht hab ich ja auch einen Denkfehler?!

Zum Speichern der Daten im Ufo Inventurliste: du hast natürlich vollkommen recht. Hier werden im Endeffekt auch nur der ID Schlüssel der Artikel und die Anzahl gespeichert! Alles andere halte ich auch für unnötig. Aber genau hier habe ich mein Problem. Dank einer Gedankenstütze von DonKarl "experientiere" ich gerade mit folgenden Code:

Private Sub ctlListe_DblClick(Cancel As Integer)
   On Error GoTo e

       ' Fokus auf das andere UFo setzen
    Me.Parent!Inventurliste.SetFocus
       ' zu einem neuen DS gehen
    DoCmd.GoToRecord , , acNewRec
       ' Wert übergeben
    Me.Parent!Inventurliste.Form!ID_einkauf = Me!ctlListe.ID_einkauf(1)
e:
   If Err Then MsgBox Err.Description
End Sub


Jetzt habe ich die Fehlermeldung: "Das Objekt unterstützt die Eigenschaft oder Methode nicht"
Ich weiß, daraus kann man sich aus der Ferne auch nicht zu viel ableiten. Meine Vermutung: ich versuche irgendeinen Wert zu übertragen, der nicht ins Zielfeld passt. (obwohl ich nur mit dem ID-Schlüssel arbeite)
Wie war das gleich, wenn ich mir den "gespeicherten" (oder zu übertragenden Wert) in einer Messagebox anzeigen lassen möchte?

Ich nochmal die Datenbankbeziehung angehangen, vielleicht wird mein Fauxpas damit deutlicher?

Nochmal DANKE! für eure Unterstützung!
Grüße Ronny
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: DF6GL am Februar 21, 2020, 16:47:26
Hallo,

obwohl die Anfügeabfrage-Lösung zu bevorzugen ist, sollte der Code so lauten:

Zitat
Private Sub ctlListe_DblClick(Cancel As Integer)
   On Error GoTo e

       ' Fokus auf das andere UFo setzen
    Me.Parent!Inventurliste.SetFocus
       ' zu einem neuen DS gehen
    DoCmd.GoToRecord , , acNewRec
       ' Wert übergeben
'    Me.Parent!Inventurliste.Form!ID_einkauf = Me!ctlListe.ID_einkauf.Column(1) 
' wenn die ID des Artikels in der ersten Kombilistenfeld-Spalte steht, dann so:
   Me.Parent!Inventurliste.Form!ID_einkauf = Me!ctlListe.ID_einkauf.Column(0)  


e:
   If Err Then MsgBox Err.Description
End Sub

PS:

Stelle bei den Beziehungen referenzielle Integrität ein. Wenn das nicht geht,
--haben die Schlüsselfelder unterschiedliche Datentypen
--gibt es bereits Daten, die nicht zugeordnet werden können und somit wertlos sind
--sind die beteiligten Felder keine Primärschlüssel-, bzw. Fremdschlüsselfelder


Weiter Verbesserungsmaßnahmen:

aussagekräftige Benennung der Felder einsetzen.
Was hat z. B. "Einkauf" mit einem Artikel zu tun?
Oder warum heißt das Fremdschlüsselfeld zu "ID_Lief" "Händler" ?



Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: RonMan am Februar 22, 2020, 00:46:26
Hallo,
zu später Stunde von mir eine kleine Rückmeldung...
Ich sitze noch davor und habe weiterhin einen Denkfehler: Es wird nach dem Doppelklick immer noch die Fehlermeldung "Objekt unterstützt die Eigenschaft oder Methode nicht" ausgegeben.
Es ist auch durchaus möglich, dass ich beim Anlegen irgendwo noch einen Fehler habe. Ich bin nur langsam zu müde danach zu suchen, ich werde das an diesem WE auf jeden Fall nochmal von Grund auf neu + sauberer aufbauen und berichten!

Zum Punkt mit der Ref.Integr.: Natürlich hast du vollkommen Recht und das Schlüsselfeldthema muss auch nochmal überdacht werden. Da ich aber vorerst nur Testwerte nutze, habe ich die Ref.Int. erst mal großzügig weggelassen. Das werde ich später in der finalen Version auf jeden Fall nachbessern. Erstmal muss dieser garstige Doppelklick gehen!  :o
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: DF6GL am Februar 22, 2020, 08:31:02
Hallo,

ZitatDa ich aber vorerst nur Testwerte nutze, habe ich die Ref.Int. erst mal großzügig weggelassen.

tu das.. Beschwer Dich aber dann nicht, dass Du Dir großzügig grundlegende Fehler einhandelst, die Du nicht in den Griff zu bekommst.   ::)


ZitatErstmal muss dieser garstige Doppelklick gehen!

Nein, nicht "erstmal"..   Solche  Sachen (Formulare und Formularsteuerung) sind zweitrangig.  An erster Stelle steht der korrekte(!) Tabellenaufbau. Das ist Prämisse und daran gibt es nichts zu rütteln, wenn wir hier von einer relationalen DB reden, die auch funktionieren soll.
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: RonMan am Februar 25, 2020, 10:55:57
So, hier noch meine Rückmeldung des funktionierenden Codes.
Zunächst einmal: der Chef hat natürlich recht, Ordnung muss sein. Alles was man vorher unsauber macht, bekommt man definitiv zurück (wie bei mir). Also hab ich mich nochmal hingesetzt alles von grund auf neu gemacht... jetzt geht´s  ::)


Private Sub Suchliste_DblClick(Cancel As Integer)
   ' Fehlermeldung abfangen
   On Error GoTo e
   
        If Not Me.Parent.tbl_Inventurliste.Form.NewRecord Then
        Me.Parent.sfrm_Inventurliste.SetFocus   ' (unbedingt darauf achten, dass dies auch der Name im Eigenschaftsblatt ist ;) ! )
        DoCmd.GoToRecord , , acNewRec    ' zum neuen Datensatz in der Tabelle erstellen
        End If
        Forms!frm_Inventur!sfrm_Inventurliste!tblEinkauf_Artikelbezeichnung = Me.Suchliste.Column(0)     'frm_Inventur! = Haupformular, sfrm_Inventurliste! = Unterformular, tblEinkauf_Artikelbezeichnung = Feld in das hineinkopiert werden soll, Suchliste.Column(0) = Suchfeld/Listenfeld von wo der Wert per Doppelklick übertragen wird - mit Column wird die Spalte definiert

e:
    If Err Then MsgBox Err.Description
End Sub


Danke für eure Unterstützung!
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: Beaker s.a. am Februar 25, 2020, 16:11:50
Hallo,
Ich halte das immer noch für falsch.
Forms!frm_Inventur!sfrm_Inventurliste!tblEinkauf_Artikelbezeichnung = Me.Suchliste.Column(0)
"Normalerweise" steht in .Column(0) eine ID (hier ArtikelID), ist die gebundene
Spalte und wird an die zweite Tabelle als FK übergeben. Die Artikelbezeichnung
ergibt sich doch daraus.
Andere Frage, warum verwendest du für die Suche überhaupt ein UFo? Das Feld
für den Suchbegriff und die Liste kannst du doch auch direkt auf dem HFo platzieren.
gruss ekkehard
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: RonMan am Februar 27, 2020, 14:12:50
Hallo Ekkehard
ehrlich gesagt grübel ich gerade, was du mit "FK übergeben" meinst. Ich weiß jetzt schon, dass die Antwort wahrscheinlich absolut logisch ist, ich komm nur gerade nich drauf  :o

Mit dem Ufo hast Du absolut recht! Das geht natürlich auch ohne.... das war mir nur bisher so gar nicht bewusst. Ich habs aber gleich mal getestet und: STIMMT! Ich war der Meinung, dass sämtliche Aktionen besser in eigenständigen Unterformularen laufen sollten. Man lernt doch einfach nie aus! Die gute Seite daran: Falls jemand mal mit 2 Ufo´s hantieren muss, steht jetzt hier wie´s geht. So richtig falsch ist es ja auch nicht, nur eben umständlicher.
Titel: Re: Wert aus Suchformular per Doppelklick als neuen Datensatz in anderes UFO
Beitrag von: Beaker s.a. am Februar 27, 2020, 15:19:39
Hallo,
Zitatehrlich gesagt grübel ich gerade, was du mit "FK übergeben" meinst
Na ja, deine Inventurliste (Tabelle) muss doch einen Fremdschlüssel mit der
ArtikelID haben. Und wenn dann die beiden Tabellen in der Abfrage für das
Ufo gejoint werden, hast du die Bezeichnung doch automatisch.
gruss ekkehard