Entwickler-Ecke

Datenbanken - Zugriffsverletzung bei Spaltenausrichtung


MisterBum - So 03.04.05 20:07
Titel: Zugriffsverletzung bei Spaltenausrichtung
Hallo,
habe eine Access-Tabelle die in einem DBGrid ausgegeben wird. Damit die Spalten an der längsten ausgerichtet werden, folgender Code. Hat alles super funktioniert bis ich nun neue Felder hinzugefügt habe. Jetzt stürzt er nach meheren Durchläufen der makierten For-Schleife mit einer Zugriffsverletzung ab. Woran könnte das liegen? Jemand ne Idee???


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure SetGridColumnWidths(Grid: Tdbgrid);
const
  DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array[0..30of Integer;
begin
    with Grid do
    begin
      DataSource.DataSet.DisableControls;
      Canvas.Font := Font;
      for n := 0 to Columns.Count - 1 do
        lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;       <------------- Zugriffsverletzung
      grid.DataSource.DataSet.First;
      if grid.DataSource.DataSet.RecordCount > 1000 then
      begin
        Grid.DataSource.DataSet.EnableControls;
        exit;
      end;
      while not grid.DataSource.DataSet.EOF do
      begin
        for n := 0 to Columns.Count - 1 do
        begin
        //if columns[n].visible then begin
          temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
          if temp > lmax[n] then lmax[n] := temp;
        //end; { if }
        end{for}
       grid.DataSource.DataSet.Next;
      end{ while }
      grid.DataSource.DataSet.First;
      for n := 0 to Columns.Count - 1 do
        if lmax[n] > 0 then
          Columns[n].Width := lmax[n];
      Grid.DataSource.DataSet.EnableControls;
    end{ With }
end{SetGridColumnWidths  }


Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt.


Martin77 - So 03.04.05 21:16

Lass mich raten:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
lmax: array[0..30of Integer;
begin
....
for n := 0 to Columns.Count - 1 do
lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER; <------------- Zugriffsverletzung
....


Du hast jetzt mehr als 31 Felder? ;)

Erweitere doch das Array


martin


MisterBum - Mo 04.04.05 10:24

Oh man bin ich do....
Vielen Dank!