Neuigkeiten:

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

Mobiles Hauptmenü

Nummer aus aktivem DS automatisch in nächstes Formular als neuen DS mitnehmen

Begonnen von NickNac, Dezember 04, 2016, 18:33:05

⏪ vorheriges - nächstes ⏩

NickNac

Hi an alle die mehr Ahnung haben als ich ;)

Habe ein Formular (Endlos) basierend auf einer Abfrage zwecks Kunde suchen.
Jeder Zeile sind Fkt.Buttons zugewiesen.
Per Button soll nun das Frm. Kaufvertrtag (und andere) geöffnet werden und dort ein neuer DS erstellt werden, wobei die Kundennummer aus vorherigem Endlosformular automatisch in das Zahlfeld Kundennummer in der Tab. Kaufvertrag übernommen wird.

(Arbeite in Access 2013, kenne mich nicht mit VBA aus, kann aber codes anpassen sobald ich sie verstanden hab ;) )


Ich muss nicht alles wissen, nur wo ich die Lösung finde :)
Access 13 x64 - VBA .. kann man das essen?

crystal

Hallo,
die einfachste Möglichkeit wäre es wohl, die Kunden-Nr. per openargs an das zu öffnende Formular zu übergeben.
Im Klick-Ereignis eines Buttons müsste dazu etwas VBA-Code stehen, z.B.


private sub btnKaufVertrag_click()
docmd.openform "frmKaufVertrag",,,acFormAdd,,str(me.KundenNr)
end sub

und im Formular frmKaufVertrag:

Private Sub Form_Open(Cancel As Integer)
if openargs <> "" then
   me.KundenNr = openargs
  cancel = false
else
  'Fehler
  cancel = true
end if
end sub


Mit acFormAdd legt Access einen neuen Datensatz an, das Open-Argument muss als String übergeben werden.
Im aufgerufenen Formular wird das Open-Argument dann dem dortigen Feld "KundenNr" zugewiesen.

Bitte probieren, denn dies ist nur ein erster Hinweis zur Lösung, da ich deine Anwendung und besonders deinen Formular-Aufbau nicht kenne.

lg
crystal

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

NickNac

Hi Crystal, danke für die schnelle Antwort.
leider klappt es noch nicht.
Habe beide Codes eingefügt (und angepasst) Erhalte jetzt beim Aufruf aus dem Endlosformular
Laufzeitfehler 2498: Sie habenfür eines der Argumente einen Ausdruck eingegeben, der nicht den für das Argument erforderlichen Datentyp hat.

Private Sub KVNeu_Click()
    DoCmd.OpenForm "frmKaufvertrag", , , acFormAdd, , Str(Me.KDNR)  <-acFormAdd=0 , Str(..) richtige Nr
End Sub

Seit einfügen vom Code ins Kaufvertrag Formular kann ich es nicht mehr manuell öffnen?! hier keine Meldungen.

LG, Nick
Ich muss nicht alles wissen, nur wo ich die Lösung finde :)
Access 13 x64 - VBA .. kann man das essen?

DF6GL

Hallo,


Private Sub btnKaufVertrag_Click()
Docmd.Openform "frmKaufVertrag",,,acFormAdd,,,Me!KdNr
End Sub


und im Formular frmKaufVertrag:

Private Sub Form_Open(Cancel As Integer)
If Not IsNull(Me.Openargs ) Then
   Me!KdNr.DefaultValue = Me.Openargs  'Falls Kundennummer von Datentyp LONG ist
   'Me!KdNr.DefaultValue = """" & Me.Openargs & """" 'Falls Kundennummer von Datentyp TEXT ist
End If

End Sub
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

crystal

Hallo Nick,
sorry, wenn es Probleme macht.
Bitte übergebe als OpenArgs einfach nur me.KDNR statt "str(..."

Wenn du das Vertrags-Formular nicht mhr aufrufen kannst, liegt es wohl daran, dass die Prüfung des openargs fehl schlägt und daher Cancel true wird (wodurch das Formular wieder geschlossen wird).

Im VBA-Editor kannst du in jeder Code-Zeile einen Breakpoint setzen (ganz links in der Zeile klicken - im Rollbalken). Wenn ein brauner Punkt erscheint, hast du einenen Breakpoint gesetzt und die Ausführung stoppt genau an dieser Stelle. Dann kannst du im VBA-Fenster z.B. den aktuellen Inhalt von Variablen anschauen (Mauszeiger auf den Feldnamen bewegen)und im Direktfenster anzeigen lassen, z.B. "?me.kdnr" (ohne Anführungszeichen; "?" steht hier als Kürzel für "print").

lg
crystal

Überschnitten mit der Antwort von DF6GL. Danke für deine Korrekturen!
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Lachtaube

Mit OpenArgs handelt man sich schnell hübsche Abhängigkeiten ein - oder man muss noch einen Textparser dazwischen hängen. Ich würde deshalb die Steuerung vom öffnenden Formular aus übernehmen.Private Sub DeinKnopf_Click()
   Const FNAME$ = "frmKaufVertrag"

   DoCmd.OpenForm FNAME
   With Forms(FNAME)
      .Recordset.AddNew
      .Zielfeldname = Me.KDNR
      'ggf. weitere Felder setzen
   End With
End Sub
Grüße von der (⌒▽⌒)

NickNac

Juhu :) Dank euch ganz herzlich! Die Korrektur von DF6GL hat es schon gelöst! funktioniert prima!
Die Idee von Lachtaube werd ich noch probieren! Danke !

LG, Nick
Ich muss nicht alles wissen, nur wo ich die Lösung finde :)
Access 13 x64 - VBA .. kann man das essen?

DF6GL

Hallo,

@Lachtaube:   
Wie sähe diese Lösung aus, wenn das Form modal geöffnet werden soll/muss?
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

Lachtaube

Modale Dialoge bilden wohl eine Ausnahme.

Aber auch dort könnte man auf OpenArgs verzichten und z. Bsp. extern in einem Modul eine entsprechende Klassen-Instanz verwenden, die als Schnittstelle fungiert, ohne einen Textparser einbauen zu müssen.
Grüße von der (⌒▽⌒)

DF6GL

Hi,

naja, "Ausnahme" würde ich da nicht sagen wollen... Genau in diesem Fall ist ein modal geöffnetes Form angebracht.

Eine extra Klasseninstanz für die Schnittstelle aufzubauen, ist ja nun auch mit Aufwand verbunden ( und ein wenig komplizierter als das OpenArgs-Argument.)

Ohne jetzt viel weiter diskutieren zu wollen (das machen Andere "besser"   ;)  )   , ist ein "Parser"  bei Übergabe mehrfacher Werte auch kein Ding, unter dem Gesichtspunkt, sich hier mit einer kleinen Access-DB
zu beschäftigen, in der die Verwendung von Formularen recht übersichtlich ist.  Diese Methodik sollte natürlich und sowieso  ein Bestandteil der (frühzeitigen) Formular-Konzeption sein.

Das alles ist natürlich nur eine Frage des Standpunktes....  8)

Docmd.Openform "frmTest",,,acFormAdd,,acDialog,"Das ist Text für Textfeld1" & "|" & Me!Zahlwert & "|" & "Das ist Text für Textfeld2"

Sub Form_Open(Cancel As Integer)
If Not Isnull(Me.Openargs) Then
Me!Textfeld1!Defaultvalue = """" & Split(Me.Openargs,"|")(0) & """"
Me!ZahlFeld= Split(Me.Openargs,"|")(1)
Me!Textfeld2!Defaultvalue = """" & Split(Me.Openargs,"|")(2) & """"
End If
End Sub


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