Kopierproblem bei gefilterter Access-Tabelle



  • Hallo

    Ich greife über die KADAO-Komponenten auf MS-Access Dateien zu.
    Nun möchte ich aus einer Tabelle einen Datensatz zwischenspeichern und in eine andere hineinschreiben.

    Das sieht in etwa so aus:

    //In OnClick-Fkt eines Buttons
    {
    :
    //Kopieren
    AString1=TestTable->FieldByName("A")->AsString;
    AString2=TestTable->FieldByName("B")->AsString;
    AString3=TestTable->FieldByName("C")->AsString;
    :
    }
    
    //In OnClick-Fkt eines zweiten Buttons
    {
    :
    //Einfuegen
    TestTable->Insert();
    TestTable->FieldByName("A")->AsString=AString1;
    TestTable->FieldByName("B")->AsString=AString2;
    TestTable->FieldByName("C")->AsString=AString3;
    Testtable->Post();
    :
    }
    

    Zwischen Kopieren und Einfügen habe ich natürlich die Datenbank gewechselt.

    Das ganze funktioniert auch perfekt wenn ich ungefilterte Tabellen benutze.
    Ist für die Ausgangstabelle aber ein Filter wie im folgenden Beispiel definiert und aktiviert, so erhalte ich beim Kopieren (1.Funktion) eine MS-Jet-Fehlermeldung.

    TestTable->Filter="A like 'test'";
    TestTable->Filtered=true;
    

    Genau die Spaltenbezeichnung aus dem Filter soll nun ungültig sein.

    Ich habe schon versucht den gewählten Datensatz zu speichern (RecNo), den Filter zu deaktivieren und den Datensatz erst dann zu sichern. Leider ist RecNo für die gefilterte Tabelle anders als für die komplette.

    Hat jemand einen Tipp für mich wie ich das Problem umgehen kann?

    Danke!



  • Ich denke mal, im Filter wird LIKE nicht unterstützt, deshalb wird das hier als Teil des Feldnamens interpretiert und verursacht so den Fehler.
    Je nachdem was du erreichen willst müsstest du wohl mit Wildcards arbeiten. Sieh dir halt mal die Hilfe zu TDataSet::Filter an.



  • Hallo nochmal!

    Ich habe den (Denk-)Fehler selbst gefunden.
    Ich dachte der Fehler tritt auf bei dem Versuch den einzelnen Felder des Datensatzes auszulesen. Das ist aber nicht korrekt.
    Der Fehler tritt erst unmittelbar nach dem Lesen auf wenn ich die Verbindung zu der Tabelle unterbreche um die Verbindung zu einer anderen Tabelle herzustellen.
    Dann beschwert sich das MS-Jet-System weil der aktivierte Filter keine Tabelle mehr hat. Mir war nicht bewusst das der Filter nicht automatisch deaktiviert wird wenn die Verbindung zur Tabelle fehlt.

    So geht es jedenfalls:

    //In OnClick-Fkt eines Buttons
    {
    :
    //Kopieren
    AString1=TestTable->FieldByName("A")->AsString;
    AString2=TestTable->FieldByName("B")->AsString;
    AString3=TestTable->FieldByName("C")->AsString;
    TestTable->Filtered=false;
    :
    }
    

    Vielen Dank!



  • Tip für's nächste Mal: die komplette Fehlermeldung posten (Strg-C im Dialog).


Anmelden zum Antworten