Autor Beitrag
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 28.05.03 17:55 
Hallo,
ich habe eine schleife bei dem gleichzeitig ein Integer-Array mit dem index gefüllt.

ausblenden 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:
   cIns := 0;
   for i := 0 to listbox1.Items.Count - 1 do
   begin
      if listbox1.Selected[i] then
      begin
         InsertFelderFuellen(listbox1.Items.Strings[i]);
         If InsInterpret = 'FEHLER' then
         begin
            Messagedlg( 'Fehler bei Datei "' +
            listbox1.Items.Strings[i] + '"', mterror, [mbok], 0 );
            continue;
         end;
         inc(MaxId); // Neue Lied_ID
         query1.Active := False;
         query1.SQL.Clear;
         query1.SQL.Text := 'Insert into Lieder.db Values (' +
         IntToStr(MaxId) + ', ' + InsInterpret + ', ' + InsTitel + ', ' + InsRubrik +
         ', ' + InsPfad + ', ' + InsDatname + ')' ;
         query1.ExecSQL;
         Inserted[cIns] := i;   <---- diese stelle fliegt er raus
         inc(cIns);
      end;
   end;


Den Array Inserted habe ich folgendermaßen deklariert:

ausblenden Delphi-Quelltext
1:
    Inserted: Array of Integer;					


aber immer wenn ich an diese stelle (<---- ...) komme bricht das programm ab und sagt "Zugriffsverletzung an Adresse....". Beim debuggen habe ich aber gesehen dass in der Variablen cIns = 0 steht und i = 2 also alles gültige werte.

Woran kann das liegen???

Gruß Andi


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 28.05.03 17:57 
Hast Du die Größe des Arrays mit SetLength angegeben?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Mi 28.05.03 17:58 
Du musst bei dynamischen Arrays vorher mit SetLength die Größe festlegen.
Solltest du die nicht im vornerein wissen, dann mach das einfach so:
SetLength(MeinArray,High(MeinArray)+1);
Das vor jedem Einfügen eines neuen Elementes in das Array aufrufen.
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 28.05.03 17:59 
Oh, setlength hatte ich nicht drin, habs aber jetzt mal rein:

ausblenden 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:
   cIns := 0;
   SetLength(Inserted,0);
   for i := 0 to listbox1.Items.Count - 1 do
   begin
      if listbox1.Selected[i] then
      begin
         InsertFelderFuellen(listbox1.Items.Strings[i]);
         If InsInterpret = 'FEHLER' then
         begin
            Messagedlg( 'Fehler bei Datei "' +
            listbox1.Items.Strings[i] + '"', mterror, [mbok], 0 );
            continue;
         end;
         inc(MaxId); // Neue Lied_ID
         query1.Active := False;
         query1.SQL.Clear;
         query1.SQL.Text := 'Insert into Lieder.db Values (' +
         IntToStr(MaxId) + ', ' + InsInterpret + ', ' + InsTitel + ', ' + InsRubrik +
         ', ' + InsPfad + ', ' + InsDatname + ')' ;
         query1.ExecSQL;
         SetLength(Inserted,High(Inserted)+1);
         Inserted[cIns] := i;
         inc(cIns);
      end;
   end;


Aber der fehler kommt trotzdem noch!!!!


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 28.05.03 18:12 
Hab auch schon überlegt obs an dem Namen "Inserted" liegt, aber umbenennen bringt auch nichts, ich glaub ich bin zu blöd für arrays!

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 28.05.03 18:13 
Alibi hat folgendes geschrieben:
SetLength(MeinArray,High(MeinArray)+1);
Das vor jedem Einfügen eines neuen Elementes in das Array aufrufen.
Das sollte man vermeiden. Es ist vom Speicher her besser, den Befehl SetLength so wenig wie möglich zu benutzen. Also: wenn möglich, vorher ausrechnen, wie groß das Array sein soll und dann die Länge setzen.

@Andi1982: Du solltest Dir mal das Tutorial zu Arrays hier im Forum anschauen. SetLength legt, wie der Name schon sagt, die Länge des Arrays fest. Du setzt die Länge des Arrays auf Null. Da kannst Du dann natürlich nichts reinschreiben!

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Andi1982 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Mi 28.05.03 18:21 
Ahhh, jetzt funktionierts!!

werde aber ne möglichkeit suchen das setlength nicht so oft zu benutzen!!

Danke!!

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...