MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 31.01.2019, 13:44   #1
LuUe
MOF User
MOF User
Standard Acc2013 - Unterschied DoCmd.GotToRecord, ,acNewRec und RecordSet.AddNew

Hallo zusammen,

gibt es einen zu beachtenden Unterschied zwischen DoCmd.GotToRecord, ,acNewRec und Me.RecordSet.AddNew


Oberflächlich betrachtet passiert ja erstmal das selbe.

Meines Wisssens ruft DoCmd ja irgendwelche Macros auf. Wird aber in den meisten Beispielen die man so findet verwendet. RecordSet.AddNew sieht man selten bis nie.
Ist das historisch bedingt? Welches ist der geeignetere Weg?
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:02   #2
elmar
MOF Guru
MOF Guru
Standard

DoCmd ist ein Überbleibsel aus der Steinzeit von ACCESS. Sollte nicht mehr genutzt werden, RecordSet.AddNew ist auf jeden Fall vorzuziehen.

__________________

WIN 10 Enterprise 64, ACCESS 2019 Wissenswertes: ACCESS-FAQ
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:25   #3
ebs17
MOF Guru
MOF Guru
Standard

Der ganze Block von DoCmd-Anweisungen spiegelt das wieder, was man über Menü/Ribbon ausführen kann. Das wird dann auch verwendet, wenn man Makros in VBA konvertiert (=> Vorschlag von Microsoft) oder sich Prozeduren von Assistenten erstellen lässt. Das alleine erklärt schon die häufige Sichtbarkeit.
Die Nähe der Beschränktheit von Makros bekommt man mitgeliefert.
Teilweise machen solche Befehle aber auch mehr als die eigentliche VBA-Entsprechung in wörtlicher Übertragung:
Code:

CurrentDb.Execute "ParameterabfrageMitFormularbezuegen"
- vs -
DoCmd.OpenQuery "ParameterabfrageMitFormularbezuegen"
Im ersten Fall wird die Aktionsabfrage direkt an die Jet-Engine übergeben, die dann regelmäßig mit Formobjekten direkt nichts anfangen kann. Hier müsste man also die Parameter etwas intelligenter übergeben, das geht aber auch.
Im zweiten Fall macht das Accessobjekt intern die Formularbezüge brauchbar und übergibt eine unmittelbar auswertbare Abfrage.

Sprich, bis hierhin ist vieles gleich und praktisch egal.

Aber:
DoCmd wirkt auf das aktive Objekt, und zwar auf die oberste Ebene.
Probiere mal Deine DoCmd-Anweisung in einem Unterformular.

Mit der zweiten Methode wird das zu verwendende Objekt referenziert. Damit darf dann das Formular auch ein Unterformular innerhalb eines anderen Formulars sein oder auch eine von mehreren Instanzen der gleichen Formularklasse. Die Richtung objektorientierte Programmierung muss man generell selber einschlagen und umsetzen, was bei Neulingen typischerweise seltener auftritt.

Wenn Du also etwas mehr als simpel zu programmieren hättest, wirst Du Dich zwangsläufig mehr in der zweiten Variante bewegen. Zur Gewohnheitsbildung und Übung kann man auch gleich damit anfangen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:27   #4
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Gilt dann vermutlich analog auch für:
acCmdSaveRecord -> RecordSet.Update
acCmdDeleteRecord ->RecordSet.Delete
usw.

Gibt es denn auch entsprechende Alternativen zum Öffnen von Formularen und Berichten. Da mache ich momentan auch immer noch per DoCmd
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:35   #5
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von ebs17 Beitrag anzeigen


[...]

Probiere mal Deine DoCmd-Anweisung in einem Unterformular.

[...]

Wenn Du also etwas mehr als simpel zu programmieren hättest, wirst Du Dich zwangsläufig mehr in der zweiten Variante bewegen. Zur Gewohnheitsbildung und Übung kann man auch gleich damit anfangen.

Ja durch den Umgange mit Unterformularen bin ich ja quasi drauf gestoßen. Immer erst den Focus verschieben um was zu ändern gefiel mir so gar nicht.

Langfristig wird mein aktuelles Projekt wohl eher komplexer.
Und wenn es deprecated ist sollte man es sich erst gar nicht angewöhnen.

Erstaunt dann aber doch, dass die meisten Tutorials und Forums Lösungen fast ausschließlich mit DoCmd arbeiten. Vielleicht hab ich aber auch nur veraltete gefunden.
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:36   #6
ebs17
MOF Guru
MOF Guru
Standard

Mehrere Instanzen eines Formulars öffnen
Wer nicht darauf kommt: Wenn man mehrere Instanzen öffnen kann, schafft man das auch schon für eine einzelne Instanz. Ist aber zu Beginn ein klein wenig aufwändiger.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:43   #7
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Erstaunt dann aber doch, dass die meisten Tutorials und Forums Lösungen fast ausschließlich mit DoCmd arbeiten.

Man könnte ja wohlwollend sagen, dass der Neuling das auch verstehen soll, und viele davon haben erst mal keine höheren Ansprüche.
Aber ja.

Frage: Gibt es das Access-Einsteigerbuch oder -tutorial, wo das Nachschlagefeld in Tabellen erklärt wird, weil es das ja nun mal gibt, gleichlautend aber die dringliche Empfehlung gegeben wird, es besser nie zu verwenden aus Gründen heraus, die oft genug beschrieben wurden?
Es gibt viele gleichwertige Dinge.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:46   #8
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von ebs17 Beitrag anzeigen

Mehrere Instanzen eines Formulars öffnen
Wer nicht darauf kommt: Wenn man mehrere Instanzen öffnen kann, schafft man das auch schon für eine einzelne Instanz. Ist aber zu Beginn ein klein wenig aufwändiger.

Die Transferleistung bekomm ich hin, Danke für den Link
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.01.2019, 14:55   #9
ebs17
MOF Guru
MOF Guru
Standard

Für ein einzelnes Formular wird man aber mit DoCmd.OpenForm meist ausreichend bedient sein, so lange man einfache Übergabeparameter hat, die man mit OpenArgs im übersichtlichen Griff hat. Hat man dort höhere Ansprüche, kann man über die Formularklasse mehr Eigenschaften anbieten und dann auch bedienen.

In der Datensatznavigation braucht man das DoCmd-Zeugs weniger.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 18:05   #10
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ich hätte da nochmal eine ergänzende Frage:

Kann es sein, dass .AddNew den Autowert hochzählt, auch wenn keine neuen Daten eingegeben werden und man nach AddNew wieder zu einem anderen Datensatz navigiert ohne was einzugeben.
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.02.2019, 18:28   #11
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Jupp.

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.02.2019, 09:22   #12
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ok, verhält sich dann also doch anders als DoCmd.GotoRecord, ,acNew

Gibt es einen Weg das zu verhindern? Wird das evtl. durch RecordSet.Cancel wieder aufgehoben?
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.02.2019, 09:37   #13
ebs17
MOF Guru
MOF Guru
Standard

Ein neuer und leerer Datensatz hat noch keine ID aus dem Autowert. Aber in dem Moment, wo einzelne Einträge erfolgen, wird diese ID zugeordnet. Je nach dem, wie man aus der Aktion wieder herausgeht, ist dann dieser Autowert "verbraucht" oder für einen nächsten Datensatz wieder verfügbar.
Bei Anfügeabfragen kann das übrigens auch eintreten, wenn man z.B. Duplikate auf einen eindeutigen Schlüssel loslässt.

Wenn Du Wert auf eine möglichst fortlaufende und unterbrechungsfreie "sprechende" Nummerierung legst, solltest Du dann im Zweifelsfall nicht auf einen Autowert setzen, sondern die Nummer selber ermitteln und erst dann vergeben, wenn Du wirklich speicherst.
Für eine ID als Schlüssel wäre es egal, ob es da Lücken in einer fortlaufenden Folge gibt. Mögliche Datensatzlöschungen würden das ja in Folge auch bewirken.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.02.2019, 10:22   #14
LuUe
Threadstarter Threadstarter
MOF User
MOF User
Standard

Mut zur Lücke hab ich, geht halt darum, ob bei zuvielem nutzlosem Hochzählen irgendwann das Ende von Integer erreicht wird.

Geht bei mir Hauptsächlich um die Daten eines Unterformulars, die je nach Datensatz im HFO Details eines Kombifeldes (Ansprechpartner) anzeigen zum bearbeiten. Ist das Kombifeld leer wird zu einem neuen Datensatz navigiert.

Da läppert sich schnell was zusammen, wenn man nur im HFO navigiert ohne die Absicht Daten einzutragen.
LuUe ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.02.2019, 11:02   #15
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

irgendwann das Ende von Integer erreicht

Ohne besondere eigene Maßnahmen verwendet ein Autowert Long als Datentyp. Da hat man einen Wertebereich von etwa 2,14 Mrd. und danach noch einmal einen Wertebereich von 2,14 Mrd. mit negativem Vorzeichen. Selbst in der Forenpraxis wurde in meiner Wahrnehmung noch nicht von negativen ID's berichtet.

Das ist derart ausreichend, dass wohl eher die Größe der Datenbank an sich ihr Limit erreicht als der Autowert. Besondere Konstellationen, wo ein solcher Zustand realistisch vorhersehbar wäre, würde man dahingehend analysieren und behandeln.

Zitat:

bei zuvielem nutzlosem Hochzählen

Dieser Zustand ist generell nicht anzustreben und würde sicher besser zu lösen sein => nur Datensätze anfügen, die wirklich gebraucht werden, nur neue Datensätze anfügen usw.
Müll verbraucht nicht nur beim Autowert Ressourcen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (12.02.2019 um 11:05 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.