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:
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:
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