Daten aus einem anderem Formular auslesen

Okay, folgendes Problem stellt sich mir in den Weg:

Ich habe eine Tabelle in der meine Daten stehen, die Tabelle „Rollen“. Die Problemrelevanten Felder sind: Status und Position.

Status = hat entweder den Wert: „Eingebaut“ oder „Lager“

Position = wenn der Status „Eingebaut“ ist hat der Datensatz eine spezifische Positionsnummer. ist der Status „Lager“ so muss der Wert auf Null gesetzt werden.

Da das ganze Anwenderfreundlich sein soll mach ich das ganze mit Formularen. Ich hab das Formular „Rollen_Im_Lager“ und „Rollen_Im_Ofen_Auswählen“. Ich habe pro Datensatz in meinem Formular „Rollen_Im_Lager“ eine Schaltfläche zum tauschen der aktuellen Rolle mit einer im „Ofen“ befindlichen. Die Schaltfläche öffnet daher das Formular „Rollen_Im_Ofen_Auswählen“. Jetzt sollen der Status der Lagerrolle auf „Ofen“ und der Status der Ofenrolle auf „Lager“ gesetzt werden - da hab ich hingekriegt.

ABER(und das is das was ich nicht schaffe) es soll auch der Wert des Feldes „Position“, der Rolle die aus dem „Ofen“ soll, ausgelesen und zwischengespeichert werden. Dann muss der Wert dieser Rolle auf Null gesetzt werden und die Rolle die in den „Ofen“ rein soll bekommt dann den Wert der zwischengespeichert wurde in ihr Feld „Position“.
Kurz gesagt: Die sollen ihre Position und Status wie beschrieben tauschen.

Hier mal der Code:

Formular „Rollen_Im_Lager“:

Private Sub btn_InDenOfen_Click()

Dim Speicher As Long
Dim Inpuput As String
Dim Tausch As Integer
Dim ADOCnn As ADODB.Connection
Set ADOCnn = CurrentProject.Connection
Dim TabRollen As ADODB.Recordset
Set TabRollen = New ADODB.Recordset
TabRollen.Open „Rollen“, Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic

With TabRollen
Me!Status.Requery
Me!Status.SetFocus
If Me!Waren_Nr = „0“ Then
GoTo Ende
Else
Speicher = Me!Waren_Nr
Inpuput = „Ofen“
DoCmd.OpenForm „Rollen_Im_Ofen_Auswählen“, acNormal, , , , acWindowNormal
Form! „060_FBA7_RollenImLager.Position“ = „Form_Rollen_Im_Ofen_Auswählen.Position“
ADOCnn.Execute „UPDATE Rollen SET Status = '“ & Inpuput & „’ WHERE Waren_Nr=“ & Speicher
‚ADOCnn.Execute „UPDATE Rollen SET Position = '“ & Tausch & "‘ WHERE Waren_Nr=" & Speicher
End If
End With

Ende:
TabRollen.close
Me!Status.Requery
Me!Status.SetFocus

End Sub

Formular „Rollen_Im_Ofen_Auswählen“:

Private Sub btn_InDenOfen_Click()
Dim Speicher As Long
Dim Inpuput As String
Dim ADOCnn As ADODB.Connection
Set ADOCnn = CurrentProject.Connection
Dim TabRollen As ADODB.Recordset
Set TabRollen = New ADODB.Recordset
TabRollen.Open „Rollen“, Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic

With TabRollen
Me!Status.Requery
Me!Status.SetFocus
If Me!Waren_Nr = „0“ Then
GoTo Ende
Else
Speicher = Me!Waren_Nr
Inpuput = „Lager“
ADOCnn.Execute „UPDATE Rollen SET Status = '“ & Inpuput & „’ WHERE Waren_Nr=“ & Speicher

End If
End With

Ende:
TabRollen.close
Me!Status.Requery
Me!Status.SetFocus
DoCmd.close
DoCmd.OpenForm „Rollen_Im_Lager“
DoCmd.close
DoCmd.OpenForm „Rollen_Im_Lager“
End Sub

Hat Jemand eine Idee wie ich aus dem Formular „Rollen_Im_Lager“ auf das Feld „Position“ im Formular „Rollen_Im_Ofen_Auswählen“ zugreifen kann? (die variable „Tausch“ hatte ich dafür vorgesehen)

Danke schon mal im Vorraus
gruß Maurice

Wichtig wäre noch das die Rolle die aus dem „Ofen“ raus soll, ebenfalls durch Klick auf eine Schaltfläche getauscht wird.

Hallo Maurice,

jetzt mal langsam zum Mitschreiben:

du hast EINE Tabelle mit den Rollendaten!?
du hast EIN Formular mit den Rollendaten!?

die Rollendaten haben drei Stati:
Eingebaut / Lager / Ofen

Warum machst du für das Statusfeld nicht einfach ein Pulldownfeld mit den drei Statusinformationen? Dann kannst du einfach den Status wechseln.

Dabei ist es doch unerheblich, wo sich die Rolle gerade befindet, das kannst du doch am Status sehen!

Du brauchst doch nichts zu tauschen, nur den entsprechenden Status ändern.

Grüße aus Essen
Wolfgang

Hallo Wolfgang,

Zu den Formularen - nicht ganz. Ich habe 2:
„Rollen_Im_Lager“ und
„Rollen_Im_Ofen_Auswählen“

Zu den Stati:
Ups, mein Fehler. „Eingebaut“ = „Ofen“.

Und der Grund warum ich das nich mit ´nem Pulldownfeld löse ist, dass ich eine „einfache“ Benutzeroberfläche gestalten MUSS. Die klicken auf den Knopf und gut.

Außerdem is das mit dem Status doch keine Problem, ich zitier mich mal:

_Jetzt sollen der Status der Lagerrolle auf „Ofen“ und der Status der Ofenrolle auf „Lager“ gesetzt werden - da hab ich hingekriegt.

ABER(und das is das was ich nicht schaffe) es soll auch der Wert des Feldes „Position“, der Rolle die aus dem „Ofen“ soll, ausgelesen und zwischengespeichert werden. Dann muss der Wert dieser Rolle auf Null gesetzt werden und die Rolle die in den „Ofen“ rein soll bekommt dann den Wert der zwischengespeichert wurde in ihr Feld „Position“._

Ich beschreibe mal den Programmablauf:
-Benutzer im Formular „Rollen_Im_Lager“ klickt auf Knopf (Der sich neben der Rolle befindet die getauscht wird, und ich dadurch mit Me! auch die Rolle fokusieren kann)

-Es öffnet sich das Formular „Rollen_Im_Ofen_Auswählen“

  • Der Benutzer klickt auf einen Knopf(der befindet sich ebenfalls hinter der jeweiligen Rolle und sorgt dafür das sie bearbeitet wird)

  • nun wird die globale Variable „Tausch“ mit dem Wert des Feldes „Position“ gefüllt (Das brauch ich weil die andere Rolle diesen wert auch erhalten soll

  • Jetzt wird per sql Das Feld Status auf „Lager“ gesetzt und das Feld „Position“ bekommt ´ne Null. (ACHTUNG: da is dat Problem!)

  • Es wird gespeichert und das Formular „Rollen_Im_Lager“ erneut aufgerufen

  • Jetzt soll hier der Status der zu Beginn angeklickten Rolle auf „Ofen“ gesetzt und das Feld Position mit dem Inhalt der globalen Variable „Tausch“ gefüllt werden.

Ich poste mal den aktuellen Quellcode (ne Editfunktion gibbet hier nich, oder?:

Formular"Rollen_Im_Lager":

Private Sub btn_InDenOfen_Click()

Dim Speicher As Long
Dim Inpuput As String
Dim ADOCnn As ADODB.Connection
Set ADOCnn = CurrentProject.Connection
Dim TabRollen As ADODB.Recordset
Set TabRollen = New ADODB.Recordset
TabRollen.Open „Rollen“, Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic

With TabRollen
Me!Status.Requery
Me!Status.SetFocus
If Me!Waren_Nr = „0“ Then
GoTo Ende
Else
Speicher = Me!Waren_Nr
Inpuput = „Ofen“
DoCmd.OpenForm „062_FBA7_RollenImOfenAuswählen“, acNormal, , , , acWindowNormal

’ Form! „060_FBA7_RollenImLager.Position“ = „Form_062_FBA7_RollenImOfenAuswählen.Position“
’ ADOCnn.Execute „UPDATE Rollen SET Status = '“ & Inpuput & „’ WHERE Waren_Nr=“ & Speicher
’ ADOCnn.Execute „UPDATE Rollen SET Position = '“ & Tausch & „’ WHERE Waren_Nr=“ & Speicher
End If
End With

Ende:
TabRollen.close
Me!Status.Requery
Me!Status.SetFocus

End Sub

Formular „Rollen_Im_Ofen_Auswählen“:

Private Sub btn_InDenOfen_Click()

Dim Speicher As Long
Dim Inpuput As String
Dim Poasition As Long
Dim ADOCnn As ADODB.Connection
Set ADOCnn = CurrentProject.Connection
Dim TabRollen As ADODB.Recordset
Set TabRollen = New ADODB.Recordset
TabRollen.Open „Rollen“, Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic

With TabRollen
Me!Status.Requery
Me!Status.SetFocus
If Me!Waren_Nr = „0“ Then
GoTo Ende
Else
Speicher = Me!Waren_Nr
Inpuput = „Lager“
Tausch = Me!Position
Poasition = 0
ADOCnn.Execute „UPDATE Rollen SET Position = " & Poasition & " WHERE Waren_Nr=“ & Speicher
ADOCnn.Execute „UPDATE Rollen SET Status = '“ & Inpuput & „’ WHERE Waren_Nr=“ & Speicher

End If
End With

Ende:
TabRollen.close
Me!Status.Requery
Me!Status.SetFocus
DoCmd.close
DoCmd.OpenForm „060_FBA7_RollenImLager“
DoCmd.close
DoCmd.OpenForm „060_FBA7_RollenImLager“
End Sub

Bei weiteren Unklarheiten, einfach fragen.

gruß
Maurice

Ich konnte das Problem inzwischen lösen:

annstatt:
ADOCnn.Execute „UPDATE Rollen SET Position = " & Poasition & " WHERE Waren_Nr=“ & Speicher

hab ich das hier gemacht:
SQLUpdate = „UPDATE Rollen SET Position = 0 WHERE Waren_Nr=“ & Speicher
CurrentDb.Execute SQLUpdate

Alledings müsste ich nun zwischen den Formularen springen. Gibt es sowas wie ein GoTo das auf ein anderes Formular springt?

Alledings müsste ich nun zwischen den Formularen springen.
Gibt es sowas wie ein GoTo das auf ein anderes Formular
springt?

nein ein goto nicht, aber du kannst jedes Formular einfach aufrufen indem du es anzeigen läßt:

docmd.openform „Formularname“

Grüße aus Essen
Wolfgang

Vielen Dank für eure Hilfe. Ich hab´s geschaft.