Listindex überschreitet das Maximum (33) - Was kann ich dagegen tun??



  • Hallo Zusammen,
    ich möchte eine SQL-Anweisung ausführen. Leider kommt dann folgende Meldung:

    Listindex überschreitet das Maximum (33)

    Was kann ich dagegen machen.
    Und schonmal danke im voraus.

    Gruß
    EPMS



  • Was kann ich dagegen machen.

    Nicht auf ungültige Elemente zugreifen, bzw. uns den Code zeigen in welchem
    der Fehler auftritt.



  • Also, ich mache das folgendermaßen:

    for(int i = 1; i <= anzahl_felder; i++)
    {
         DataModule1->sql_anweisungen->SQL->Add("`"+DataModule1->DBF->Fields->Fields[i]->FieldName+"`");
    }
    DataModule1->sql_anweisungen->SQL->Add(") VALUES (");
    for(int i = 1; i <= anzahl_felder; i++)
    {
            DataModule1->sql_anweisungen->SQL->Add("'"+DataModule1->DBF->FieldByName(""+DataModule1->DBF->Fields->Fields[i]->FieldName+"")->AsString+"'");
    }
    DataModule1->sql_anweisungen->SQL->Add(")");
    DataModule1->sql_anweisungen->Execute();
    DataModule1->DBF->Next();
    

    Ich lese aus einer DBase Datenbank mit 33 Felder die Daten aus und will diese in eine MySQL Tabelle schreiben. Es kann sein, dass sich die Anzahl der Felder in der DBase DB ändern. Daher soll das ganze aber variabel gehalten werden.

    Und wenn ich das jetzt ausführen will kommt die oben genannte Fehlermeldung.

    Kann mir da jemand weiterhelfen?? Kann es sein, dass die Anweisung zu lang wird für BCB/C++??

    Gruß
    EPMS



  • for(int i = 1; i <= anzahl_felder; i++)
    

    Sollte diese Zeile nicht eher

    for(int i = 0; i < anzahl_felder; i++)
    

    heisen ?

    Wenn anzahl_felder größer als DataModule1->DBF->Fields->Count ist kommt der
    Fehler "Listindex überschreitet das Maximum (33)"



  • Dann solltest du deiner die Anzahl der Datensätze (Variable anzahl_felder) aktualisieren bzw diese Variable gleich ersetzen.



  • @EPMS: Arrays fangen grundsätzlich bei Index 0 an und nicht bei 1. AnsiString bildet hier die einzige Ausnahme.



  • Hallo,

    also das nützt nichts. Es kommt immernoch der gleiche Fehler.

    Gruß
    EPMS



  • Woher beziehst Du den Wert denn?



  • Den Wert bekomme ich hierher:

    anzahl_felder = DataModule1->DBF->FieldCount;
    

    Das ist die Feldanzahl in der DBase Datenbank.

    Gruß
    EPMS



  • Dann sollte das hier eigentlich funktionieren:

    case schrieb:

    for(int i = 0; i < anzahl_felder; i++)
    

    Wichtig ist, dass da nicht <= sondern nur < steht.


Anmelden zum Antworten