Announcement

Collapse
No announcement yet.

Parameterübergabe im Access

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Parameterübergabe im Access

    Hallo zusammen,

    ich versuche aus einer Form eine andere öffnen und die Parameter übergeben. Wie macht man das bei Access?
    Wie empfängt dann die Form die Parameterliste?
    Ein paar Beispiele wären sehr hilfreich!
    Danke euch!

    Gruß

    Leonid Pavlov

  • #2
    Hallo Leonid,<BR><BR>so etwas kann man mit einem String-Argument am Ende der Open-Methode erreichen. Erstelle dir zum test bitte zwei Formulare mit einem Button(Befehl0) und in Formular1 zusätzlich noch ein Editfeld(Text1):<PRE>
    'Formular1:
    Private Sub Befehl0_Click()
    DoCmd.OpenForm "Formular3", , , , , , Text1.Value
    End Sub

    'Formular2:
    Private Sub Form_Open(Cancel As Integer)
    'Hier kann man die Variable OpenArgs abfragen
    Befehl0.Caption = OpenArgs
    End Sub
    </PRE>Damit kann man, z.B. mit Komma getrennt, allerhand Parameter an ein Formular übergeben. Dann muss man sich natürlich auch um die saubere trennung kümmern.<BR>Sollen es sehr viele Informationen werden, dann ist wohl eine entsprechende Tabelle, die vor dem Öffnen des Formulars gefüllt wird, die bessere Lösung.<BR><BR>Viele Grüße O. Steffa

    Comment


    • #3
      Hallo Olaf,

      vielen Dank.
      Funktioniert wunderbar.
      In erster Form habe ich ein Paar TextFelder, einer davon ist Server-Nr und ein Paar Buttons.
      Ich möchte gerne so was tun:
      Wenn ich einen neuen Record erstelle, und dann auf den Button klicke, soll in der zweiten Form in entsprechender Werteliste die Nummer des neugesepicherten Serevers angezeigt werden.
      Durch Referenzieren des Textfeldes gerade in Sub Form_Open geht es nicht. z.B.:
      <b>
      Private Sub Form_Open(Cancel As Integer)
      [Server-Nr].Value = OpenArgs
      End Sub
      </b>
      Ich bekomme die Fehlermeldung.
      Dann habe ich versucht die Filter-Eigenschaft des Forms zu ändern:
      <b>
      Private Sub Form_Open(Cancel As Integer)
      [Form2].Filter="[Server-Nr]=" & OpenArgs
      End Sub
      </b>
      Dann im entsprechendem Feld wird nur 0 angezeigt.

      Wie löse ich dieses Problem?
      Danke dir.

      Gruß
      Leonid Pavlo

      Comment


      • #4
        Hallo Leonid,<BR><BR>die Übergabe der Parameter gelingt nur dann, wenn das Formular vorher geschlossen ist. Wie sieht denn dein OpenForm-Kommando aus? Übrigens, wenn es einfach darum geht einen gerade eingetragenen Wert eines Feldes in einem anderen Formular sichtbar zu machen, dann funktioniert das auch direkt:<BR>Forms!Formular2.Text1.Value = Forms!Formular1.Text1.Value oder...<BR>Forms("Formular2").Text1.Value = Forms("Formular1").Text1.Value<BR>In der zweiten Form hast du natürlich auch die Möglichkeit die Namen der Formulare in einer Variablen abzulegen und dann einzusetzen. Vielleicht hilft dir das ja mehr.<BR>Falls ich dein Problem nicht richtig verstanden habe, dann setze doch mal ein paar Zeilen Code mit dazu!<BR><BR>Viele Grüße Ola

        Comment


        • #5
          Hallo Olaf,

          in der zweiten Form:
          <b>
          Private Sub Form_Open(Cancel As Integer)
          Forms!Form2.[Server-Nr].Value = Forms!Form1. [Server-Nr].Value
          End Sub
          </b>
          Ich bekomme aber Fehlermeldung:
          "Laufzeitfehler '2448'.
          Sie können diesem Objekt keinen Wert zuweisen."
          Was soll ich jetzt tun

          Comment


          • #6
            Hallo Leonid,<BR><BR>OK, dann folgende Fragen:<BR><BR>1. Ist Form2 geschlossen wenn du den Button in Form1 für die Übergabe drückst?<BR>2. Wird mit dem Drücken des Buttons dein Form1 geschlossen?<BR>3. Was für ein Element ist [Server-Nr]?<BR><BR>Tja, ich habe das Ganze bei mir mit Textfeldern getestet, und es funktioniert!? Vielleicht bringt die Beantwortung der Fragen ja etwas Klarheit.<BR><BR>Bis dann Ola

            Comment


            • #7
              Hallo Olaf,

              -1. Form2 ist geschlossen, wenn ich auf den Button klicke.
              -2. Mit dem klicken auf den Button wird Form1 nich geschlossen.
              -3. [Server-Nr] ist ein TextFeld.

              Ich möchte es so machen, dass dem [Server-Nr] nur dann der Wert aus der Form1 übergeben wird, wenn in Form1 ein neuer Eintrag gemacht wird.
              Und noch vielen Dank dir, dass du auf meine Fragen antwortest.

              Gruß
              Leonid Pavlo

              Comment


              • #8
                Hallo Olaf,

                ich habe erstellt einfach 2 leere, ungebundene an die Datenbank Forms, und da geht es! Aber bei mir nicht.
                In Form2 verwende ich die Werteliste, und versuche in die den Wert aus Form1 übergeben.
                Standardmäßig soll diese Werteliste die [Server-Nr]-Werte aus der Tabelle anzeigen.
                Combobox [Server-Nr] basiert sich auf der Fremdschlüssel-Spalte aus der Tabelle für die Form2. Kann es irgendwie stören für das, was ich machen will?
                Und noch eine Frage, kann ich generieren Globale-Variablen, die in allen Forms sichtbar werden?

                Gruß

                Leonid Pavlo

                Comment


                • #9
                  Hi Olaf,

                  und noch was...
                  Gibt es die Möglichkeit irgendwie zu prüfen, aus welcher Form die Form2 aufgerufen wurde?

                  Gruß

                  Leonid Pavlo

                  Comment


                  • #10
                    Hallo Leonid,<BR><BR>sorry, ich war bis jetzt nur in Meetings....<BR><BR>OK, wenn ich richtig verstanden habe, dann soll die Liste in Form2 eine Wertetabelle basierend auf einer Tabelle anzeigen. Soll nun ein neuer Eintrag dort sichtbar werden, der gerade in Form1 angelegt wurde, dann wäre doch der einfachste Weg der, aus der Form1 ein INSERT in diese Tabelle auszuführen und nach dem Öffnen von Form2 und einem eventuellen Refresh der Werteliste, den Zeiger auf diesen Datensatz zu legen. Das würde z.B. über die Ermittlung und der Übergabe des Primärschlüssels mit Hilfe von OpenArgs gehen. Dort kannst du natürlich auch den Namen der Form übergeben, die gerade Form2 geöffnet hat.<BR>Auch das Definieren von globalen Variablen, die in allen Forms sichtbar sind, ist natürlich möglich. Allerdings ist das immer eine nicht ganz so gute Lösung, da beim Auftreten von Problemen die Fehlersuche bei globalen Variablen sehr mühsam sein kann.<BR><BR>Viele Grüße Ola

                    Comment


                    • #11
                      Hallo Olaf,

                      danke dir.
                      Kann ich irgendwie die Eigenschaft des Steuerelements ändern? Ich versuche es so...

                      In Form1:<br>
                      <b>
                      Private Sub Form2_open_Click()<br>
                      Dim stDocName As String<br>
                      Dim stLinkCriteria As String<br><br>

                      stDocName = "Form2"<br><br>

                      stLinkCriteria = "[Server-Nr]=" & Me![Server-Nr]<br>
                      DoCmd.OpenForm stDocName, , , stLinkCriteria, , , [Server-Nr].Value<br>
                      FormName = "Form1" 'Das ist die globale Variable<br>
                      End Sub<br>
                      </b>
                      In Form2:<br>
                      <b>
                      Private Sub Form_Open(Cancel As Integer)<br>
                      If FormName = "Form1" Then<br>
                      [Server-Nr].Enabled = False<br>
                      [Server_Nr_Textfeld].Visible = True<br>
                      [Server_Nr_Textfeld].Enabled = False<br>
                      Forms![Form2].[Server_Nr_Textfeld].Value = Forms![Form1].[Server-Nr].Value<br>

                      End If<br>
                      End Sub<br>
                      </b>
                      Aber ich kriege die Fehlermeldung:
                      "Die Eigenschaft ist schreibgeschützt und kann daher nicht eingestellt werden.

                      Gruß

                      Leonid Pavlo

                      Comment


                      • #12
                        Hallo Leonid,<BR><BR>ich glaube FormName ist schon reserviert. Aber ich habe hier ein Beispiel für dich ohne globale Variable<PRE>
                        'Form1
                        Private Sub Form2_open_Click()
                        Dim stDocName As String
                        Dim stLinkCriteria As String
                        '
                        stDocName = "Form2"
                        '
                        stLinkCriteria = "[Server-Nr]=" & Me![Server-Nr]
                        DoCmd.OpenForm stDocName, , , stLinkCriteria, , , [Server-Nr].Value & ";" & Me.Name
                        End Sub
                        '
                        'Form2
                        Private Sub Form_Open(Cancel As Integer)
                        Dim sServerNr As String
                        Dim sFormName As String
                        '
                        sServerNr = Left(OpenArgs, InStr(OpenArgs, ";") - 1)
                        sFormName = Mid(OpenArgs, InStr(OpenArgs, ";") + 1, Len(OpenArgs))
                        '
                        If sFormName = "Form1" Then
                        '[Server-Nr].Enabled = False
                        [Server_Nr_Textfeld].Visible = True
                        [Server_Nr_Textfeld].Enabled = False
                        [Server_Nr_Textfeld].Value = sServerNr
                        End If
                        End Sub
                        </PRE>Viele Grüße Ola

                        Comment

                        Working...
                        X