Problem mit locate



  • Hi,

    ich habe ein Problem mit der Methode TDataSet::Locate...
    Zugriff Datenbank mySQL über ADO..

    Wenn mein Datenfeld vom Typ char ist funktioniert alles bestens...,
    ich kann mit DBDataSet->Locate("Bezeichnung","Suchstring",myOpts)
    problemlos dorthin springen, wo ich will..!!

    Ist aber mein Datenfeld vom Typ int (Zahlfeld) bekomme ich eine Expression
    "falscher Typ oder außerhalb des Gültigkeitsbereiches"
    was mache ich falsch bzw Abhilfe ?? 😕
    Wilfrid



  • void __fastcall TForm1::ButtonSuchenClick(TObject *Sender)
    {
       //  TLocateOptions definieren
       TLocateOptions SearchOptions;
       // Suche nach Teilschlüssel  
       SearchOptions = SearchOptions<<loPartialKey;
       // Test, ob Datensatz in Tabelle gefunden werden kann
       if(DM->Table1->Locate("Nr",DM->QSELNr->FieldByName("Nr")->AsInteger,    
            SearchOptions)
       {
          // Anzeige Message "Datensatz gefundenen "
          ShowMessage ("Datensatz gefundenen ")
       }
       else
       {
           // Anzeige Message " Datensatz nicht gefunden"
           ShowMessage ("Datensatz nicht gefundenen ")
       }
    }
    

    sollte doch gehen !

    Edit:
    Bitte die Code-Tags benutzen. Danke!

    [ Dieser Beitrag wurde am 21.01.2003 um 13:34 Uhr von Jansen editiert. ]



  • Hi,
    hab die Antwort nicht wirklich verstanden..
    ich will über die Locate-funktion zu einem bestimmten Datensatz springen,
    ohne daß ich (eigentlich) den Datentyp in der Datenbank kenne. (Steckt natürlich in Field drin..)

    so ungefähr siehts aus :

    TADOQuery* mytd = ( TADOQuery*) DBGrid->DataSource->DataSet;
    
          // -- Spaltenname der Column nach der sortiert ist: verschiedene Typen !!
          AnsiString sCol = sSortedBy;  
    
          // -- in sDynSearchValue steht das Suchkriterium
          mytd->Locate(sCol,sDynSearchValue,myOpts);
    

    Ist der Feldtyp ein Integer führt das bei korrekter Eingabe einer Ziffer nicht zum gewünschten Suchergebnis , bei Eingabe eines Buchstabens zu einer Exception...

    😕



  • Hast du dir mal den genauen Aufruf von Locate() angeschaut?
    Der erste Parameter muss ein AnsiString sein. Dort wird nach den einzelnen Feldern gesucht.
    Der zweite Paramter enthält ein Variant-Array. Dort wird nach den Werten in denen im ersten Parameter angebenen Feldern gesucht.
    Also deklariere doch dein Suchergebnis als Variant.



  • @JeGr: VarArray bringt leider auch keinen Erfolg .. die Exception "wandert" zwar, aber prinzipiell bleibts sich gleich ...
    😕


Anmelden zum Antworten