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ß
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.
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.
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ß
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! ;-)
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? .........
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.