Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Aktualisierungsproblem

Begonnen von Lemmi, Mai 13, 2015, 11:48:23

⏪ vorheriges - nächstes ⏩

Lemmi

Moin

ich benutze Access das erste Mal und bin somit noch ziemlich unerfahren im Umgang damit. Für ein Projekt habe ich eine Datenbank aufgebaut und bin jetzt in ein Aktualisierungsproblem gelaufen.

Aufgabenstellung:
In einem Unterformular sind Datensätze aufgeführt, die jeweils über eine check-Box (Datenbankfeld) ausgewählt werden können. Wenn die Check-Box zu einem Datensatz gewählt wird sollen Feldwerte (Abstimmbeträge) sofort aktualisiert werden. .... Soweit so gut

Ich habe jetzt verschiedene Techniken ausprobiert. Entweder bekomme ich es hin, dass die ungebundenen Feldwerte on the fly aktualisiert werden ........ allerdings mit dem Nebeneffekt, dass im Unterformular der Datensatzzeiger jeweils auf den 1. Datensatz springt und somit leider das Verfahren nicht praktikabel ist

oder der Datensatzzeiger bleibt stabil aber die

Feldaktualisierung erfolgt jeweils erst nach Verlassen des Datensatzes. (Leider so auch nicht verwendbar).

Wie kann man so eine Aufgabe in Access am Besten abbilden bzw. mit welcher Technik kann man es lösen?

Ich hätte noch eine Notlösung in der Tasche (Berechnung auf Anforderung), die ich allerdings nur als letzte Möglichkeit in Betracht ziehen möchte. 

Könnt Ihr mir weiterhelfen?

Danke vorab

Gruß


el_gomero

Hallo Lemmi,

die Ausführungen sind für mich ziemlich verworren. Massenänderungen werden i.d.R. über Aktualisierungsabfragen vorgenommen, das läuft normal im Hintergrund ab und ist im Form so nicht sichtbar, bestenfalls die Änderung.

Zuerst schreibst du, du möchtest über eine Checkbox ausgewählte DS ändern, dann dass die Checkbox ungebunden sei. Das kann dann nicht hinhauen.

Um Hilfe zu erhalten musst du präziser beschreiben wo es klemmt, welche Tabellen, Felder usw beteiligt sind, was an Code da ist usw.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

MaggieMay

Hallo,
Zitatallerdings mit dem Nebeneffekt, dass im Unterformular der Datensatzzeiger jeweils auf den 1. Datensatz springt und somit leider das Verfahren nicht praktikabel ist
das muss ja nicht unbedingt so hingenommen werden.
Zeige den Code dazu, dann kann man dir die Lösung zeigen.
Freundliche Grüße
MaggieMay

Lemmi

#3
Hi MaggieMay,

anliegend mal der Code, der on the fly die gewünschten Informationen anzeigt aber den Effekt des Rücksprungs auf den 1. Datensatz hat (me.requery). Eine andere Möglichkeit hat sich mir nicht erschlossen.

Private Sub gspAusgewaehlt_Click()
   Dim strSql As String
   Dim rcsSummeAusgewaehlt As Recordset
   Dim Feldwert(3) As Currency
   Dim intZaehler As Integer
   Dim I As Integer
   
   '0 = OP beim Kunden am Tag (Tagessumme)
   '1 = OP beim Kunden am Tag (ausgewählt)
   '2 = OP beim Kunden ausgewählt
   strSql = "SELECT SUM(gspwert) AS WertAusgewaehlt " & _
            "FROM tblGsPos " & _
            "WHERE gspKunIdRef = " & Forms.frmGutschrifterfassen.cmbKundenId & " " & _
               "AND gspDatum = " & SQLDatum(Forms.frmGutschrifterfassen.cmbTagmitOP) & " " & _
            "GROUP BY gspKunIdRef, gspDatum " & _
            "UNION ALL " & _
            "SELECT SUM(gspwert) AS WertAusgewaehlt " & _
            "FROM tblGsPos " & _
            "WHERE gspKunIdRef = " & Forms.frmGutschrifterfassen.cmbKundenId & " " & _
               "AND gspDatum = " & SQLDatum(Forms.frmGutschrifterfassen.cmbTagmitOP) & " " & _
               "AND gspAusgewaehlt = True " & _
            "GROUP BY gspKunIdRef, gspDatum, gspausgewaehlt " & _
            "UNION ALL " & _
            "SELECT SUM(gspwert) AS WertAusgewaehlt " & _
            "FROM tblGsPos " & _
            "WHERE gspKunIdRef = " & Forms.frmGutschrifterfassen.cmbKundenId & " " & _
               "AND gspAusgewaehlt = True " & _
            "GROUP BY gspKunIdRef, gspausgewaehlt"
   Set rcsSummeAusgewaehlt = CurrentDb.OpenRecordset(strSql, , dbOpenDynaset)
   With rcsSummeAusgewaehlt
      If .RecordCount > 0 Then
         intZaehler = 0
         Do Until .EOF
            Feldwert(intZaehler) = .Fields("WertAusgewaehlt").Value
         intZaehler = intZaehler + 1
         .MoveNext
         Loop
       End If
    End With
       Forms.frmGutschrifterfassen.txtOPTagessumme = Feldwert(0)
       Forms.frmGutschrifterfassen.txtSummeAusgewaehlt = Feldwert(1)
       Forms.frmGutschrifterfassen.txtAbstimmsumme = Feldwert(2)
       Forms.frmGutschrifterfassen.txtOpTagRest = Feldwert(0) - Feldwert(1)
    For I = 0 To 2
       Debug.Print "Unterform i: " & I & " " & Feldwert(I)
    Next I
    Me.Requery
End Sub


Übrigens ....... Wohnort des Weihnachtsmann´s nervt ....... solange man nicht weiss wo das ist. :-) 

Danke vorab für Deine Hilfe.

Gruß


MaggieMay

Hi,

was bezweckst du mit dem Requery eigentlich, und wo befindet sich der Code, etwa im "frmGutschrifterfassen"?
Und warum willst du berechnete Werte speichern, das tut man eigentlich nicht.

Kann es sein, dass der folgende Code denselben Zweck erfüllen würde:
Private Sub gspAusgewaehlt_Click()
    Me!txtOPTagessumme = DSum("gspwert", "tblGsPos", "gspKunIdRef=" & Me!cmbKundenId & _
                                                    " AND gspDatum=" & SQLDatum(Me!cmbTagmitOP))
    Me!txtSummeAusgewaehlt = DSum("gspwert", "tblGsPos", "gspKunIdRef=" & Me!cmbKundenId & _
                                                    " AND gspDatum=" & SQLDatum(Me!cmbTagmitOP) & _
                                                    " AND gspAusgewaehlt = True")
    Me!txtAbstimmsumme = DSum("gspwert", "tblGsPos", "gspKunIdRef=" & Me!cmbKundenId & _
                                                    " AND gspAusgewaehlt = True")
    Me!txtOpTagRest = Me!txtOPTagessumme - Me!txtSummeAusgewaehlt
    Me.Dirty = False                     ' speichern
End Sub


PS:
Wo hast du denn den Weihnachtsmann gesehen - es war doch gerade erst Ostern! ;-)
Freundliche Grüße
MaggieMay

Lemmi

#5
Moin MaggieMay,

die DSum(....) - Statements bringen natürlich das gleiche Ergebnis. ... ich hab halt ausprobiert und rumgespielt ....

Zwischenzeitlich ist die Funktionalität gegeben...... zwar nicht ganz so wie gewollt ..... aber es funktioniert. (Bisher ohne Fehler und schnell)

Deine Fragestellung läßt aber den Rückschluss zu, dass Du meine Vorgehensweise als "suboptimal" betrachtest. Wie kann man es besser machen? .... bzw wie macht man so etwas normalerweise?

Wenn Du Lust hast, Dich darüber mit mir auszutauschen würde ich Dir die Aufgabenstellung und meine Vorgehensweise dazu darstellen.

Gruß
Lemmi

PS
Gerade war er wieder da .... der Weihnachtsmann mit seinem Wohnort .......vielleicht will er zu Pfingsten einen Ochsen durch den Ort treiben? .........








 

MaggieMay

Hallo Lemmi,

du kannst gern die Aufgabenstellung genauer beschreiben sowie die Datenquellen von Haupt- und Unterformular nennen und was sonst noch eine Rolle spielt, wenn du weitere Tipps dazu bekommen möchtest.
Freundliche Grüße
MaggieMay