Index für TTable wird nicht erstellt



  • Hi Leute,

    ich habe vor zur Laufzeit den Index für eine Paradox-Tabelle neu zu erstellen. Leider führt der folgende Code nicht zum Erfolg:

    void __fastcall TForm9::FormActivate(TObject *Sender)
    {
    Table2->IndexDefs->Clear();
    Table2->IndexDefs->Add("","Kundennummer",TIndexOptions() <<ixPrimary << ixUnique);
    Table2->IndexFieldNames = "Kundennummer";
    Table2->MasterSource = DataSource1;
    Table2->MasterFields = "Kundennummer";
    }
    

    Zur Laufzeit kommt dann immer die Fehlermeldung: Table2: Kein Index für die Felder "Kundennummer" vorhanden".

    Normalerweise sollte doch nach den ersten drei Zeilen das Feld "Kundennummer" indziert sein, oder?

    Besten Dank im Voraus.

    Loriat



  • Auf den ersten Blick würde ich sagen, da fehlt:
    Table1->CreateTable();

    Sieh mal in der Hilfe unter CreateTable nach. Da ist ein komplettes Beispiel.

    [Edit]
    Statt Table1->CreateTable(); muß es natürlich : Table2->CreateTable(); sein
    [Edit]

    [ Dieser Beitrag wurde am 23.06.2003 um 11:45 Uhr von aheim editiert. ]



  • Hi aheim

    besten Dank für die Antwort. Leider hat es auch mit dem Zusatz "Table2->Create()" nicht funktioniert. Es kam die gleiche Fehlermeldung.

    Hat noch jemand einen Tip?

    Ciao
    Loriat



  • Verstehe ich nicht.
    Sieh mal was Dir die Hilfe bietet. Komplette Tabelle mit Index erstellen.
    Habe Dir den Teil mal hier rauskopiert. Auch wenn ich mir den Zorn der admins zuziehe (wobei sie allerdings recht haben, denn aus der Hilfe kopieren sollte jeder können).

    if (!Table1->Exists) // Evtl. vorhandene Tabelle nicht überschreiben 
    
    {
    
      Table1->Active = false; // Die Table-Komponente darf nicht aktiv sein
    
      // Zuerst den Tabellentyp beschreiben und die Tabelle benennen
      Table1->DatabaseName = "BCDEMOS";
      Table1->TableType = ttParadox;
    
      Table1->TableName = "CustInfo";
    
      // Dann die Felder in der Tabelle beschreiben
    
      Table1->FieldDefs->Clear();
      TFieldDef *pNewDef = Table1->AddFieldDef();
      pNewDef->Name = "Field1";
      pNewDef->DataType = ftInteger;
    
      pNewDef->Required = true;
    
      pNewDef = Table1->AddFieldDef();
    
      pNewDef->Name = "Field2";
      pNewDef->DataType = ftString;
    
      pNewDef->Size = 30;
    
      // Dann die Indizes beschreiben
    
      Table1->IndexDefs->Clear();
      /* Der erste Index hat keinen Namen, denn er ist ein primärer Paradox-Schlüssel */
      Table1->IndexDefs->Add("","Field1", TIndexOptions() <<ixPrimary << ixUnique); 
    
      Table1->IndexDefs->Add("Fld2Index","Field2", TIndexOptions() << ixCaseInsensitive);
    
      // Nun ist alles definiert. Die Tabelle kann erzeugt werden.
    
      Table1->CreateTable();
    }
    


  • Hi aheim,

    die Tabelle soll ja nicht erstellt werden, sondern besteht schon, hat aber einen anderen Index. Ich habe mir aus der Hilfe die Befehle rausgesucht, von denen ich dachte, dass sie den Index ändern. Dann kommt aber immer zur Laufzeit die o.a. Fehlermeldung.

    Ich werde mal versuchen die Tabelle erst zur Laufzeit zu erstellen. Aber selbst wenn das klappen sollte versteh ich nicht was ich bisher flasch mache.

    Also falls noch Tipps vorhanden, immer raus damit.

    Ciao
    Loriat



  • Hi aheim,

    mit dem Code aus der Hilfe lief es leider auch nicht so wie es sollte. Ich habe das Ganze jetzt mit einem Sekundärindex geregelt -> läuft einwandfrei.

    Wo der Fehler lag weiss ich nicht. Es muss doch möglich sein den, zur Entwurfzeit erstellten Index einer Tabelle zur Laufzeit wieder zu ändern, oder?

    Ciao
    Loriat

    PS.: Beim Kopieren des Codes sind wohl einige Codeschnipsel auf der Strecke geblieben 😉

    [ Dieser Beitrag wurde am 23.06.2003 um 19:55 Uhr von Loriat editiert. ]


  • Mod

    Hallo

    schau dir mal SQL an (damit sollte es gehen)
    CREATE INDEX usw

    MfG
    Klaus


Anmelden zum Antworten