Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bezug aus Unterformular ims Hauptformular

Begonnen von derilzemer, November 26, 2016, 10:18:30

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo Access Gemeinde,
ich wollte in meiner DB etwas umbauen und bin an die für mich zu erwartende Grenze gestoßen. Es geht darum, ein Copy Funktion aus dem Hauptformular in ein Ufo "umzuziehen", da es dort einfach von der Logik hin gehört. Folgende Felder und Formulare sind enthalten:

frmErfassung
frmErfassungUfoQuart
Felder cboZielSpiel und SpielID. Die Aktion selbst ist an einen CMD Button gebunden, cmdCopyQuKarten.

Das Feld cboZielSpiel macht einen Select aus der DB, welcher nach dem "Umzug" wie erwartet weiterhin funktioniert.
Das Feld SpielID (als Feld hinterlegt im frmErfassung) wurde zuvor mit Me.SpielID ausgelesen. Dies kann ja jetzt nach "Umzug" in frmErfassungUfoQuart nicht mehr gehen. Also dachte ich, ich muss lediglich eine Ebene "dazu" machen wie Me.Parent.SpielID bzw. Me.Form![frmErfassung].SpielID.
Naja, eben das Problem lag im ich dachte. Ist wohl nicht so. Weder Hinweise auf MS Seiten noch
http://www.donkarl.com?FAQ4.2 halfen mir da wirklich weiter. Die zeigen immer Beispiele von Verweisen HFO --> UFO. Mittlerweile mein ich, UFO --> HFO ist wohl etwas spezifischer und man hat da ein wenig mehr Code Eingriff zu bewerkstelligen? Kann mich da jemand unterstützen? Anbei der unveränderte Codeschnipsel, um den es geht bevor ich den "umziehe" wollte.

Gruß Andreas


Private Sub cmdCopyQuKarten_Click()
On Error GoTo err_Click
    Dim db As DAO.Database
    Dim rsQ As DAO.Recordset, rsK As DAO.Recordset
    Dim lngQ As Long, lngK As Long
   
    DoCmd.Hourglass True
       
    ' Plausibilitätsprüfungen
    If IsNull(Me.cboZielSpiel) Then
        MsgBox "Bitte zuerst das Spiel auswählen!", vbExclamation + vbOKOnly, "Fehler"
    ElseIf Val(Me.cboZielSpiel) = Me.SpielID Then           ' num. Vergleich sicherstellen
        ' überflüssig, sichergestellt durch Kombi-Auswahl
        MsgBox "Quelle und Ziel müssen unterschiedlich sein!", vbExclamation + vbOKOnly, "Fehler"
    ElseIf DCount("*", "tblQuartette", "SpielID_F=" & Me.cboZielSpiel) > 0 Then
        MsgBox "Das Ziel-Spiel hat bereits Quartette!", vbExclamation + vbOKOnly, "Fehler"
    Else
    ' Kopierfunktion ausführen
        Set db = CurrentDb
       
    ' 1. Quartette des Quell-Spiels auslesen
        Set rsQ = db.OpenRecordset("Select QuartettID " & _
                                   "From tblQuartette " & _
                                   "Where SpielID_F=" & Me.SpielID)
        Do While Not rsQ.EOF
            ' Quartette einzeln auf Ziel-Spiel kopieren
            db.Execute "Insert Into tblQuartette (SpielID_F, QuartettKz, QuartettBezeichnung) " & _
                       "Select " & Me.cboZielSpiel & ", QuartettKz, QuartettBezeichnung " & _
                       "From tblQuartette " & _
                       "Where QuartettID=" & rsQ!QuartettID, dbFailOnError
            ' generierten Autowert-Key zur Weiterverwendung auslesen
            lngQ = db.OpenRecordset("Select @@Identity")(0)
           
    ' 2. Quartettkarten des Quell-Quartetts auslesen
            Set rsK = db.OpenRecordset("Select QuKartenID " & _
                                       "From tblQuKarten " & _
                                       "Where QuartettID_F=" & rsQ!QuartettID)
            Do While Not rsK.EOF
                ' Karten zum Quartett einzeln kopieren
                db.Execute "Insert Into tblQuKarten (QuartettID_F, KartenNr, KartenBezeichnung, Modelltyp, Druckdatum, BildFlaggen) " & _
                           "Select " & lngQ & ", KartenNr, KartenBezeichnung, Modelltyp, Druckdatum, Bildflaggen " & _
                           "From tblQuKarten " & _
                           "Where QuKartenID=" & rsK!QuKartenID, dbFailOnError
                ' generierten Autowert-Key zur Weiterverwendung auslesen
                lngK = db.OpenRecordset("Select @@Identity")(0)
               
    ' 3. Karten-Merkmale kopieren
                db.Execute "Insert Into tblKartenMerkmale (QuKartenID_F, MerkmalID_F, Eintrag ) " & _
                           "Select " & lngK & ", MerkmalID_F, Eintrag " & _
                           "From tblKartenMerkmale " & _
                           "Where QuKartenID_F=" & rsK!QuKartenID, dbFailOnError
                rsK.MoveNext
            Loop
            rsQ.MoveNext
        Loop
    End If
    MsgBox "Kopieren der Quartette und Merkmale erfolgreich abgeschlossen!", _
                vbInformation, Me.SpielID & " --> " & Me.cboZielSpiel
end_Click:
    On Error Resume Next
    rsQ.Close
    rsK.Close
    Set db = Nothing
    DoCmd.Hourglass False
    Exit Sub
err_Click:
    MsgBox Err.Description, , Err.Number
    Resume end_Click
End Sub




Grüße und Dank im voraus
Andreas

derilzemer

Hallo,

oh Mann. Ich habe es jetzt doch hinbekommen (zumindest kommt kein Fehler). Die Lösung ist dann doch einfacher als ich erwartet habe.

     ElseIf Val(Me.cboZielSpiel) = Forms![frmErfassung]!SpielID Then Bei mir scheiterte es immer, weil ich die Eigenschaft nicht definierte :(

mfG
A. Müller
Grüße und Dank im voraus
Andreas