deutschsprachige FoxPro User Group
Forum View
Home
  
  aufsummieren des Feldinhaltes einer Row mit SQL Befehl- #18253 in section [744051]
Sec: (51) MS-Visual FoxPro 9.0
Von: Cyprian Kuschka
An: Bernd Köhl
Am/Um: 18.07.2024 19:33:15


 

ich muss Horzontal über die Feleder summieren.
Zeile1 ->Feld1-Feld.n
Zeile.n Feld1-Feld.n
Ich kann nur die Summe per code bilden.
Gibts dazu kein SQL.





alternativ gäbe es eine solche Möglichkeit mit einem SQL Befehl:

SELECT RECNO() AS DSatz, SUM(column2 + column3 + ... + column(n)) AS nRowSum
FROM yourTable
GROUP BY RECNO()

der durch dich veröffentlichte Quellcode kann nicht funktionieren.

Probleme im Code:

Unendliche Schleife: Die DO WHILE !EOF()-Schleife könnte potenziell unendlich laufen, wenn keine Bedingung dafür sorgt, dass EOF() jemals true wird. Dies passiert, wenn der Befehl SKIP nicht korrekt arbeitet oder keine Datensätze vorhanden sind.

Variableninitialisierung: nRowSum wird nicht initialisiert. Es sollte vor der Schleife initialisiert werden, um die korrekten Summierungen durchzuführen.

Indirekte Adressierung: Der Code versucht, durch Zeichenkettenmanipulation auf die Werte in der grdGrid zuzugreifen. Dies führt zu Fehlern, da &cWertRow keine gültige Referenz ist.

Korrekte Verwendung von FCOUNT(): FCOUNT() liefert die Anzahl der Felder in der aktuellen Workarea und hat möglicherweise nichts mit der Anzahl der Spalten im Grid zu tun.

Rechenfehler: nRowSum wird nicht korrekt berechnet, da nWertRow möglicherweise den falschen Wert erhält.


Wie Du siehst besteht hier sehr viel Potenzial:

mein Vorschlag als VFP Code


nRowSum = 0 && Initialisiere nRowSum vor der Schleife

DO WHILE !EOF()
DSatz = RECNO()

FOR gnCount = 2 TO FCOUNT() - 1
IF gnCount < 10
cWertRow = EVAL("thisForm.cntPanel.grdGrid.Column" + STR(gnCount, 1, 0) + ".Text1.Value")
ELSE
cWertRow = EVAL("thisForm.cntPanel.grdGrid.Column" + STR(gnCount, 2, 0) + ".Text1.Value")
ENDIF

nWertRow = cWertRow
nRowSum = nRowSum + nWertRow
NEXT

thisForm.cntPanel.grdGrid.Column20.Text1.Value = nRowSum
SKIP
ENDDO

thisform.Refresh()


Viel Erfolg





Viele Grüße

Cyprian



Bernd Köhl   17.06.2024 11:01
Thomas Geissler  17.06.2024 13:30
Bernd Köhl  21.06.2024 15:48
Thomas Geissler  21.06.2024 16:44
Thomas Geissler  21.06.2024 16:46
Bernd Köhl  21.06.2024 17:57
Bernd Köhl  21.06.2024 19:22
Cyprian Kuschka  22.06.2024 20:49
Bernd Köhl  18.07.2024 15:40
Harro Schippan  18.07.2024 19:11
Cyprian Kuschka  18.07.2024 19:33
Thomas Geissler  24.06.2024 12:06
Cyprian Kuschka  17.06.2024 15:41
  
zurück zum Forum