Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi FMX Android Grid bearbeiten schlägt im 2. Durchgang fehl (https://www.delphipraxis.net/189450-fmx-android-grid-bearbeiten-schlaegt-im-2-durchgang-fehl.html)

Devil1925 14. Jun 2016 08:34

FMX Android Grid bearbeiten schlägt im 2. Durchgang fehl
 
Hallo, Ich habe hier ein sehr interessantes Phänomen, aus dem ich nicht schlau werde.
Ich habe ein TGrid, welches ich über Livebindings mit Daten fülle.
Da das Grid dynamisch von Breite, Spaltenanzahl und Beschriftung aufgebaut wird, gebe ich einer Query ein Dynamisch zusammengebautes SQL, und öffne diese dann.
Danach bearbeite ich das Grid mit folgender Prozedur:

Delphi-Quellcode:
procedure TfrmErhebung.SpaltenAuswertenAnpassen(GRD:TGrid);
var i:Integer;
    Name:String;
Begin

  i := 0;

  while i < GRD.ColumnCount - 1 do
  Begin
    Name := GRD.Columns[i].Header;
    Name := StringReplace(Name, '~', #13#10, []);

    if Copy(Name,1,4) = 'RO_^' then
    begin
      Name := TRIM(Copy(Name, 5, length(name)));
      GRD.Columns[i].ReadOnly := True;
      GRD.Columns[i].CanFocus := False;
    end;

    if Copy(Name,1,4) = 'HID_' then
    begin
      GRD.Columns[i].Visible := False;
    end;

    if pos('#', Name) <> 0 then
    Begin
      GRD.Columns[i].Width := StrToInt(Copy(Name, Pos('#', Name)+1, 3))*10;
      Name := Copy(Name, 1, Pos('#', Name)-1)
    End;

    GRD.Columns[i].Header := Name;
    i := i+1;
  End;

End;
Meine Header der Spalten sehen Folgendermaßen aus:

Code:
HID_Artikel_Nr | HID_Changed_Last | HID_Changed_By | HID_IDX_Erhebung | RO_^Artikel#6 | RO_^Bezeichnung1#25 | RO_^Einheit#10 | Bst.#5 | R.o#3
Jetzt das Phänomen: Wenn ich das ganze zum ersten mal ausführe, Funktioniert alles. Führe ich es dann noch ein Zweites mal aus, bekomme beim Editieren der Zweiten Spalte (HID_Changed_Last) eine Zugriffsverletzung der Adresse 00000000 an folgender Stelle:

Delphi-Quellcode:
      GRD.Columns[i].Visible := False;

Die erste Spalte wird ohne Probleme editiert. Nachdem ich die Spalten-Reihenfolge geändert habe auf

Code:
RO_^Artikel#6 | RO_^Bezeichnung1#25 | RO_^Einheit#10 | Bst.#5 | R.o#3 | HID_Artikel_Nr | HID_Changed_Last | HID_Changed_By | HID_IDX_Erhebung
Bekomme ich immer noch eine Zugriffsverletzung der Adresse 00000000 beim Editieren der Zweiten Spalte (RO_^Bezeichnung1#25). Diesmal an Folgender Stelle:

Delphi-Quellcode:
    GRD.Columns[i].Header := Name;

Es ist also egal, welche spalte an zweiter Stelle steht! Ich kann an den Stellen auch noch Informationen über die Spalte auslesen etc.

Hat da jemand eine Idee? Ich bin inzwischen absolut am ende mit meinem Latein.

Crossposting: http://www.entwickler-ecke.de/viewtopic.php?p=701002#701002

Devil1925 16. Jun 2016 08:16

AW: FMX Android Grid bearbeiten schlägt im 2. Durchgang fehl
 
Ich habe mal weiter getestet und bin zu dem Ergebnis gekommen, das Phänomen auch auftritt, wenn ich z.B. nur die Spaltennamen verändere.

Ich habe Folgenden Code eingefügt und auch hier tritt der Fehler beim zweiten Durchlauf in der zweiten Spalte auf:

Delphi-Quellcode:
  for I := 0 to GRD.ColumnCount -1 do
  Begin
    Name := GRD.Columns[i].Header;
    GRD.Columns[i].Header := Name + '1';
  End;
Hier bekomme ich die Zugriffsverletzung beim Ausführen des Folgenden Elements:

Delphi-Quellcode:
    GRD.Columns[i].Header := Name + '1';


Wenn hier irgendjemand eine Idee hat wäre das Super! Wie wage diese auch sein mag... ich komme hier einfach nicht weiter!

Devil1925 21. Jun 2016 13:57

AW: FMX Android Grid bearbeiten schlägt im 2. Durchgang fehl
 
Ich habe nun eine "Lösung" des Problems Gefunden: Ich habe das Grid auf ein Anderes Formular ausgelagert, welches ich beim Schliessen auf NIL setze
Delphi-Quellcode:
GRD := nil;
.
Damit ist jeder Aufruf des Formulars quasi der erste und es Funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz