Błąd w programie

0

Witam mam taki kawałek kodu jak niżej i chyba jest za ciepło ponieważ nie mogę znaleźć błędu.
Jeśli był w procedurze drukuj to za każdym razem przy debugowaniu kursor wychodził mi z pętli for do begina i zerował trzy zminenne ijk a jest to niemożliwe
Teraz mam ten kawałek jako osobną procedurę i wywala błąd raised exception class EaccesViolation
Spróbuję jeszcze raz w domu wieczorem może się sypie Delphi 7 a może ja mam kłopoty ze wzrokiem.

Jeśli ktoś coś wymyśli to zapraszam do podzielenia się uwagami.

Pozdr AS

procedure TForm1.PrzygotujSpis;
var
s: string ;
ii,jj,kk,ll,m : integer;
begin
 jj:=0;
 kk:=0;
 ll:=0;
    for ii:= 1 to dl_tabeli do
      begin
          s:= StringGrid3.Cells[3,ii];

          if s='Kęty 1' then
          begin
              Kety1[jj]:= StringGrid3.Cells[1,ii];
              jj:=jj+1;
          end
          else if  s='Kęty 2' then
          begin
              Kety2[kk]:= StringGrid3.Cells[1,ii];
              kk:=kk+1;
          end
         else if s='Brzeszcze' then
         begin
            Brzeszcze[ll]:= StringGrid3.Cells[1,ii];
             ll:=ll+1;
         end ;
end ;


// wybieram która tablica jest najdłuższa
If jj > kk then   ii:=jj
 else    ii:=kk;

If ii > ll then   MTab:=ii
 else  MTab:=ll;

end;
0

Access Violation - to m.in. próba dostępu do zabronionego obszaru pamięci. Ja bym stawiał, że odwołujesz się do jakiejś zmiennej niezainicjowanej, lub do jakiejś tablicy (może ten StringGrid) poza jej granicami. Nie wiem, za mało jest kodu żeby cokolwiek wywnioskować. Skąd bierzesz dł. tablicy. Mam nadzieje że wiesz że Cells w StringGrid'zie są numerowane od 0.

0

to moze byc for ii:= 1 to dl_tabeli do

długość tabeli to nie to samo co ostatni idneks w tablicy sproboj dac
for ii:= 1 to dl_tabeli-1 do

0

Dzięki za podpowiedzi, dalej coś nie działa, dizisiaj może jutro posiedzę nad tym.
Spróbuję przekonstruować cały raport wraz z tą procedurą.

pozdr AS

0

Tablice Kety1 jak masz zadeklarowane? Jak ustalasz ich długość?

0

Witam , tablica ma tak Kety1: array[1..250] of string;
W ogóle cała zabawa polega na tym że muszę posortować dane przed wysłaniem je do rv report.
Ze stringgrida wczytuje zależnie od stałego filtru dotrzech tabel a następnie układam odpowienio dane.

Jest to bajecznie proste , tabela, ify , druk ???

Zmieniłem deklaracje zmiennych ii:=1 i ruszyło ale dalej jak podglądam program w debugerze to widzę ze program wyskakuje z pętli for do pierwszego begina a tak być nie powinno, gdzieś się wywala ale teraz błędów nie pokazuje, danych mam 170 więc tablica jest odpowiednio długa.
Prawdopodobnie mam namieszane gdzieś w kodzie ale już nie wywala się program i co najgorsze nie pokazuje się błąd.

podr AS

0

StringGrid na bank ma cells liczone od 0

0

Tak ale w pierwszej linii mam nazwy kolumn
pozdr AS.

Wykasowałem pół programu i błąd zniknął.
Teraz wiem że gdzieś w programie jest błąd lub ostrzeżenie które może być zignorowane a w czasie pracy może spowodować błąd.
AS

0

Błąd masz w indeksach tablic Kety1 (itd). Masz 1..250 a indeksujesz:

ii := 0;
Kety1[ii czyli 0] := cos tam;
ii:= ii+1;

Masz dwie opcje:

ii := 1;
for begin
  Kety[ii] := ....
  Inc(ii);
end;

i

ii := 0;
for begin
  Inc(ii);
  Kety[ii] := ....
end;
0

Dzięki czasem człowieka coś zaćmi.
POZDR AS

1 użytkowników online, w tym zalogowanych: 0, gości: 1