Ich kann den Fehler grundlegend nachvollziehen, nachdem ich allerdings nichts mit den RX-Komponenten am Hut habe werde ich dort nicht tiefer gehen.
Bei mir tritt der Fehler innerhalb von Rx hier auf
Code: Alles auswählen
procedure TRxDBGrid.CalcStatTotals;
.....
SavePos:=DHS.RecNo;
.....
Allerdings nicht gleich beim Start, sondern erst dann wenn in Members der Datensatz gewechselt wird.
Der CallStack zeigt folgendes bei mir - Auszugsweise
#0 BUFDATASET$_$TDOUBLELINKEDBUFINDEX_$__$$_GETRECNO$$LONGINT at :0
#1 BUFDATASET$_$TCUSTOMBUFDATASET_$__$$_GETRECNO$$LONGINT at :0
#2 TRXDBGRID__CALCSTATTOTALS(<error reading variable>) at .\rxdb\rxdbgrid.pas:5988
#3 TRXDBGRID__LAYOUTCHANGED(<error reading variable>) at .\rxdb\rxdbgrid.pas:7137
#4 TCUSTOMDBGRID__ONLAYOUTCHANGED(0x48c4a78, <error reading variable>) at dbgrids.pas:1065
#5 TCOMPONENTDATALINK__LAYOUTCHANGED(<error reading variable>) at dbgrids.pas:4071
#6 DB$_$TDATALINK_$__$$_DATAEVENT$TDATAEVENT$LONGINT at :0
#7 DB$_$TDATASOURCE_$__$$_DISTRIBUTEEVENT$TDATAEVENT$LONGINT at :0
.....
Der hat Probleme die Position zu finden, kann sein, das es ein Problem ist mit dem fehlenden PK und der Verwendung von Varchar.
------
Eine DB braucht man nicht direkt lesen können, das ist nur Bequemlichkeit für den Programmierer und führt zu schlechten Designs. Wenn du in der DB was lesen willst, dann lege dir eine View an, dann kannst du dir die Daten anzeigen wie du willst. Das Design sollte für den Server optimal passen.
Was mir allgemein auffällt im Design (Das meiste merkt man erst wenn es zu spät ist):
*) Jede Tabelle benötigt einen Primärschlüssel (PK), wenn irgendwie möglich integer oder einen nativ für diesen Zweck vorgesehenen Wert. (automatische PK sind nicht böse)String bzw. Varchar sind für mich denkbar ungeeignet -> Betriebssicherheit und Effizienz
*) Daraus folgt Primär und Fremdschlüssel (FK) sollten wie oben sein und damit auch die Tabellen verknüpft werden (als Master/Detail oder auch als Join im SQL)
*) Werte wenn möglich als Integer oder Numerisch, sowenig Konvertierungen wie möglich
*) Sortierungen hinterlege ich im DB-System mit entsprechend Sortierindex (abhängig DB System) - Achtung sollte man auch gut überlegen. Können beim Schreiben/Ändern/Löschen Performance kosten. Gilt auch hier, das was nötig ist und Sinn macht.
Von meiner Seite her teste ich nicht weiter, da ich wie gesagt nichts mit den Rx Komponenten am Hut habe und auch nicht erwarte das die mit dem DB-Design IMHO sauber funktionieren.