online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Booyeoo vom 10.05.2019, 17:48 Options

DoCmd.GoToRecord Macro zur Änderung in Tabelle

Hallo Zusammen,

Ich verzweifel mal wieder an der Kunst des VBA-Programmierens,
ich möchte ein Makro schreiben.

Füge Text in das Feld Licence_from bei Datensatz A ein.
Danach Springe in der Tabelle User zu dem Datensatz B, den ich gerade in dieses Feld Licence_from bei Datensatz A eingefügt habe.
Wenn angekommen, setze bei diesem Datensatz B, den Login namen von Datensatz A bei Licence_to ein.

Befinde mich beim Aufruf im Formular User nicht in der Tabelle !
Muss die Tabelle offen sein?
Das größte Problem ist der Aufruf des GoToRecord befehls.
Verstehe die Syntax einfach nicht. So wie sie da steht ist es falsch!

Bisher:

Private Sub Licence_from_Dirty(Cancel As Integer)
Dim username As String
username = Me.Login
DoCmd.GoToRecord(acDataTable, "User", acGoTo,Me.Licence_from)
Licence_to = username
End Sub


Vielen Dank für jede Hilfe


Antwort schreiben

Antwort 1 von Marie vom 11.05.2019, 02:39 Options

DoCmd.GoToRecord benutzt man zum Wechseln des Datensatzes, also zum Beispiel zum nächsten, vorherigen, ersten, letzten oder zu einem neuen Datensatz gehen, wenn man sich in der entsprechenden Tabelle oder Abfrage befindet.

Zum Suchen eines bestimmten Datensatzes A oder B benutzt man "FindFirst" .

Was heisst "muss die Tabelle offen sein?" Was ist die Datensatzherkunft Deines Formulars??

Ich vestehe nicht wirklich, was Du da tust und was Du tun willst.

gruß Marie

Antwort 2 von RalfH vom 11.05.2019, 09:47 Options

Hallo Booyeoo,

Zitat:
Füge Text in das Feld Licence_from bei Datensatz A ein.
Wo kommt der Text her ?

Zitat:
Danach Springe in der Tabelle User zu dem Datensatz B, den ich gerade in dieses Feld Licence_from bei Datensatz A eingefügt habe.
Wenn angekommen, setze bei diesem Datensatz B, den Login namen von Datensatz A bei Licence_to ein.

Soll das ganze in die Tabelle und B soll durch A ersetzt werden, oder möchtest Du eine relation zu beiden haben ?
Gruß Ralf

Antwort 3 von Booyeoo vom 12.05.2019, 13:46 Options

Genau Ralf ich möchte eine Relation zwischen den Beiden User A und B herstellen.

Ich habe eine Tabelle und eine Formular User.
In der Tabelle gibt es Usernamen, Liznenz_vergeben_an und Liznez_bekommen_von Spalten.
Nun soll , nachdem man im Formularfeld bei dem User (A) einen Namen (B) ins Lizenz_bekommen_von-Feld eingegeben hat, der Datensatz mit dem angegbenen Namen (B) um den Namen (A) im Lizenz_vergeben_an-Feld automatisch vervollständigt werden.

Vorher:
Name Vergeben_an Bekommen_von
A
B

Nachher:
Name Vergeben_an Bekommen_von
A B
B A

Habe jetzte versucht den FindFirst befehl zu finden, aber es gibt nur DoCmd.FindRecord, der ist wahrscheinlich gemeint.


Bisher:

Private Sub Licence_Inherited_From_LostFocus()
Dim username As String
If Me.Licence_Inherited_From <> "" Then
    username = Me.Loginname
    DoCmd.FindRecord (Me.Licence_Inherited_From) 'da muss noch irgendwie goto rein
    Licence_Inherited_To = username
    MsgBox ("Der User " & Loginname & "wurde geändert!")
End If
End Sub



Vielen Dank für eure Hilfe

Antwort 4 von Booyeoo vom 12.05.2019, 13:48 Options

Mist der löscht die Leerzeichen zwischen den A und B's... also das B hinter dem A gehört in die Spalte Vergeben_an und das A hinter dem B in die Spalte Bekommen_von

Grüße
Boo

Antwort 5 von RalfH vom 14.05.2019, 13:57 Options

Hi,
Ich versteh das ganze immer noch nicht so ganz.

Beantworte bitte mal die 1. Frage:

Zitat:
Zitat:
Füge Text in das Feld Licence_from bei Datensatz A ein.
Wo kommt der Text her ?


Gruß Ralf

Antwort 6 von Booyeoo vom 14.05.2019, 16:24 Options

Den Text gibt man in dieses Feld manuell bzw per Strg+V, also copy and paste, ein. Nachdem das Feld verlassen wird, also Focus lost, starten das Makro sucht den eingegebenen User usw...

Antwort 7 von RalfH vom 15.05.2019, 06:44 Options

Guten Morgen,

Ich würde 2 Tabellen anlegen, sagen wir mal LizenzNehmer und LizenzGeber.
Da ein LizenzNehmer auch ein LizenzGeber sein kann, wenn ich dich richtig verstanden habe,und ein Lizenzgeber auch mehrmals Lizenznehmer sein kann, und das ganze natürlich auch umgekehrt, muss das ganze eine m:n Beziehung sein.

Dafür ist eine 3. Tabelle notwendig.Die nennen wir Lizenztransfer.

In der Tabelle Lizenzgeber legst Du einen Primärschlüssel an,
Lizenzgeber_id als Autowert.

In der Tabelle Lizenznehmer dasselbe allerdings Lizenznehmer_id als Autowert.

In der Tabelle Lizenztransfer kommen die beiden Felder Lizenzgeber_id und Lizenznehmer_id hinein.

Lizenzgeber_id aus Tabelle Lizenzgeber wird nun 1:n mit Lizenzgeber_id aus Tabelle Lizenztransfer verknüpft.


Lizenznehmer_id aus Tabelle Lizenznehmer wird nun 1:n mit Lizenznehmer_id aus Tabelle Lizenztransfer verknüpft.

Jetzt hast Du jetzt einen zusammengesetzten Primärschlüssel in der Tabelle Lizenztransfer, somit ist jeder Lizenztransfer eindeutig zugeordnet.

Wenn Du jetzt im Formular das Feld Licence_from als Kombifeld einrichtest, kannst Du als Datenbasis die entsprechenden Daten aus Tabelle Lizenzgeber nehmen.

Für das andere Feld gehst Du auch so vor, allerdings nimmst Du die Daten aus Tabelle Lizenznehmer.

Ich hoffe das hilft Dir ein wenig weiter.
Gruß Ralf

Antwort 8 von Booyeoo vom 03.06.2019, 14:47 Options

Hallo,

Die Tabellen-Lösung habe ich nach langem hin und her verworfen aber danke für den Vorschlag.
Nun bleibe ich bei meiner Makro-Lösung jedoch fehlt mir eine Sache:

Wie bestimme ich die Zeilennr. (ID) eines bestimmten Records?!?!?!

Ich habe eine Tabelle [User] mit Spalten: Name, PIN,..., Vererbt an:,...

Ich möchte mit
DoCmd.GoToRecord acForm, Screen.ActiveForm.Name, acGoTo, 2
zu einem bestimmten Datensatz springen und zwar zu dem der in der Spalte Vererbt an steht. d.h die 2 soll ja durch die entsprechende ID ersetzt werden.

oder mit

DoCmd.FindRecord Me.Vererbt_an, acAnywhere, , acSearchAll, , acAll
irgendwie, jedoch funktioniert diese Methode weniger als die erste , bei mir.


Er soll aber nicht im Vererbt an Feld suchen sondern nur in der Spalte Name.
Und ich befinde mich in einem Formular.

Grüße

Antwort 9 von Proggi vom 03.06.2019, 15:03 Options

Du must dem feld erst den focus geben, dann nur in dem feld und nicht in allen feldern suchen...



Vererbt_an.SetFocus
DoCmd.FindRecord "Schmidt", , True, , True

Antwort 10 von Proggi vom 03.06.2019, 15:18 Options

aso... eh - Name.focus

Name ist ein ungünstiger Name da Name eventuell nur [Name].setFocus geschrieben werden kann damit Access weiß das du das Feld name und nicht die Eigenschaft Name meinst...

Antwort 11 von Booyeoo vom 03.06.2019, 16:02 Options

Danke Proggie, funktioniert genauso wie ichs haben wollte perfekt.

Grüße

Ähnliche Themen

Tabellenabgleich besonderer Art
Manzur  20.01.2007 - 81 Hits - 3 Antworten

Macro-Aufruf
wolfram  16.04.2007 - 155 Hits - 2 Antworten

Aus Access Excel-Datei füllen und öffnen
stirlitz  30.10.2007 - 199 Hits - 2 Antworten

Datensätze anfügen in Haupt- und Unterformular
Walli  18.11.2007 - 99 Hits - 6 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026