Wenn ich in meinem Programm folgende Funktion aufrufe bekomme ich ab und zu die Meldung : "Im Projekt Auswert.exe ist eine Exception der Klasse EListError aufgetreten. Meldung : 'Der Index der Liste überschreitet das Maximum(3106)'. Prozess wurde angehalten. ..."
Toll, ich verwende meines Wissens nach keine Liste, also wo soll dieser Fehler her kommen und was kann ich dagegen machen?
<hr>
Hier noch schnell der Quelltext :
<code>
void __fastcall TForm1::ZeitraumBtnClick(TObject *Sender) <br>
{<br>
<i> // Formular erstellen</i> <br>
Application->CreateForm(__classid(TForm5), &Form5);<br>
<br>
<i> // Formular zurücksetzen</i><br>
Form5->Date1->Date = StrToDate(DateToStr(StartZeit));<br>
Form5->Date2->Date = StrToDate(DateToStr(StopZeit));<br>
Form5->Time1->Time = StrToTime(TimeToStr(StartZeit));<br>
Form5->Time2->Time = StrToTime(TimeToStr(StopZeit));<br>
<br>
<i> // Wenn Rückgabewert des Formulars = mrOk (Weiter-Button gedrückt), dann...</i> <br>
if (Form5->ShowModal()==mrOk)<br>
{<br>
<i>// Startzeit neu definieren</i> <br>
StartZeit = StrToDate(DateToStr(Form5->Date1->Date)) + StrToTime(TimeToStr(Form5->Time1->Time));<br>
<br>
<i>// Endzeit neu definieren</i> <br>
StopZeit = StrToDate(DateToStr(Form5->Date2->Date)) + StrToTime(TimeToStr(Form5->Time2->Time));<br>
<br>
<i>// SQL-Abfrage formulieren</i><br>
AnsiString s = "SELECT Anlagedatum, Stationsnummer, ";<br>
int i = 0;<br>
int j = RadioGroup1->ItemIndex*8; <i>// erster Kanal = Index * 8</i><br>
for (i = j; i<(j+7); i++)<br>
{<br>
s = s + "B"+IntToStr(i)+"+"+IntToStr(1+ 2*(i-j))+", ";<br>
}<br>
i = j+7;<br>
s = s + "B"+IntToStr(i)+"+"+IntToStr(1+2*(i-j)) + " FROM MDE_SIGNALE";<br>
s = s + " WHERE Stationsnummer = "+ StationComboBox->Text;<br>
s = s + " AND Anlagedatum < '" + DateTimeToStr(StopZeit);<br>
s = s + "' AND Anlagedatum > '" +DateTimeToStr(StartZeit) + "';";<br>
<br>
<i>// SQL-Abfrage vorbereiten und ausführen</i><br>
DataModule4->IBQuery1->Close();<br>
DataModule4->IBQuery1->SQL->Clear();<br>
DataModule4->IBQuery1->SQL->Add(s);<br>
DataModule4->IBQuery1->Open();<br>
<br>
<i>// Automatische Achsenskalierung für untere Achse ausschalten</i><br>
DBChart1->BottomAxis->Automatic = false;<br>
<br>
<i>// Minimum festlegen</i><br>
MinSave = DBChart1->MinXValue(DBChart1->BottomAxis);<br>
<br>
<i>// Maximum festlegen</i><br>
MaxSave = MinSave + EncodeTime(ScrollStunde, ScrollMinute, ScrollSekunde, ScrollMilliSek);<br>
<br>
<i>// Wenn Minimum > als aktuelles Maximum der unteren Achse, dann ...</i><br>
if (DBChart1->MaxXValue(DBChart1->BottomAxis) < MinSave)<br>
{<br>
<i>// neues Maximum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Maximum = MaxSave;<br>
<br>
<i>// neues Minimum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Minimum = MinSave;<br>
}<br>
<br>
<i>// Wenn Minimum < als aktuelles Maximum der unteren Achse, dann ...</i><br>
if (DBChart1->MaxXValue(DBChart1->BottomAxis) > MinSave)<br>
{<br>
<i>// neues Minimum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Minimum = MinSave;<br>
<br>
<i>// neues Maximum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Maximum = MaxSave;<br>
}<br>
}<br>
<i>// Formular aus dem Speicher löschen</i><br>
Form5->Free();<br>
}<br>
</code>
Toll, ich verwende meines Wissens nach keine Liste, also wo soll dieser Fehler her kommen und was kann ich dagegen machen?
<hr>
Hier noch schnell der Quelltext :
<code>
void __fastcall TForm1::ZeitraumBtnClick(TObject *Sender) <br>
{<br>
<i> // Formular erstellen</i> <br>
Application->CreateForm(__classid(TForm5), &Form5);<br>
<br>
<i> // Formular zurücksetzen</i><br>
Form5->Date1->Date = StrToDate(DateToStr(StartZeit));<br>
Form5->Date2->Date = StrToDate(DateToStr(StopZeit));<br>
Form5->Time1->Time = StrToTime(TimeToStr(StartZeit));<br>
Form5->Time2->Time = StrToTime(TimeToStr(StopZeit));<br>
<br>
<i> // Wenn Rückgabewert des Formulars = mrOk (Weiter-Button gedrückt), dann...</i> <br>
if (Form5->ShowModal()==mrOk)<br>
{<br>
<i>// Startzeit neu definieren</i> <br>
StartZeit = StrToDate(DateToStr(Form5->Date1->Date)) + StrToTime(TimeToStr(Form5->Time1->Time));<br>
<br>
<i>// Endzeit neu definieren</i> <br>
StopZeit = StrToDate(DateToStr(Form5->Date2->Date)) + StrToTime(TimeToStr(Form5->Time2->Time));<br>
<br>
<i>// SQL-Abfrage formulieren</i><br>
AnsiString s = "SELECT Anlagedatum, Stationsnummer, ";<br>
int i = 0;<br>
int j = RadioGroup1->ItemIndex*8; <i>// erster Kanal = Index * 8</i><br>
for (i = j; i<(j+7); i++)<br>
{<br>
s = s + "B"+IntToStr(i)+"+"+IntToStr(1+ 2*(i-j))+", ";<br>
}<br>
i = j+7;<br>
s = s + "B"+IntToStr(i)+"+"+IntToStr(1+2*(i-j)) + " FROM MDE_SIGNALE";<br>
s = s + " WHERE Stationsnummer = "+ StationComboBox->Text;<br>
s = s + " AND Anlagedatum < '" + DateTimeToStr(StopZeit);<br>
s = s + "' AND Anlagedatum > '" +DateTimeToStr(StartZeit) + "';";<br>
<br>
<i>// SQL-Abfrage vorbereiten und ausführen</i><br>
DataModule4->IBQuery1->Close();<br>
DataModule4->IBQuery1->SQL->Clear();<br>
DataModule4->IBQuery1->SQL->Add(s);<br>
DataModule4->IBQuery1->Open();<br>
<br>
<i>// Automatische Achsenskalierung für untere Achse ausschalten</i><br>
DBChart1->BottomAxis->Automatic = false;<br>
<br>
<i>// Minimum festlegen</i><br>
MinSave = DBChart1->MinXValue(DBChart1->BottomAxis);<br>
<br>
<i>// Maximum festlegen</i><br>
MaxSave = MinSave + EncodeTime(ScrollStunde, ScrollMinute, ScrollSekunde, ScrollMilliSek);<br>
<br>
<i>// Wenn Minimum > als aktuelles Maximum der unteren Achse, dann ...</i><br>
if (DBChart1->MaxXValue(DBChart1->BottomAxis) < MinSave)<br>
{<br>
<i>// neues Maximum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Maximum = MaxSave;<br>
<br>
<i>// neues Minimum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Minimum = MinSave;<br>
}<br>
<br>
<i>// Wenn Minimum < als aktuelles Maximum der unteren Achse, dann ...</i><br>
if (DBChart1->MaxXValue(DBChart1->BottomAxis) > MinSave)<br>
{<br>
<i>// neues Minimum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Minimum = MinSave;<br>
<br>
<i>// neues Maximum der unteren Achse festlegen</i><br>
DBChart1->BottomAxis->Maximum = MaxSave;<br>
}<br>
}<br>
<i>// Formular aus dem Speicher löschen</i><br>
Form5->Free();<br>
}<br>
</code>
Comment