FRAGE: FindData



  • Hallo Leute,

    ich bin noch ein neuling, habe mit dem BCB C++ v6 neu angefangen.
    Also in meinen ersten Projekt soll ich so etwas ähnliches wie eine
    User verwaltung erstellen.
    Ich kann mit meinem Programm folgendes machen:

    User anlegen
    User bearbeiten
    User löschen
    User aus SmartOpen auslesen (SmartOpen ist ein Schließsystem der mit Transpondern funktioniert)

    Meine frage ist, wenn ich die Daten von SmartOpen über RS232 lese und in meinem ListView ausgebe, werden die Datensätze immer neu angelegt. Ist ja nicht falsch, aber die Datensätze die schon existieren sollen nicht angelegt werden nur die neuen , die noch nicht in der Liste sind.

    Wie könnte ich das erfolgreich in die Tat umsetzen?
    Könnte mir jemand nen Beispiel geben, wie das mit FindData o.ä. funktionieren könnte?

    mfg
    guenter67



  • Hallo

    Um TLiStView::FindData benutzen zu können must du den einzelnen Items beim Eintragen erstmal eine solche Dateninformation zuweisen. Und zwar in der Eigenschaft TListItem::Data. Dieser Eigenschaft kannst du zuweisen was du willst, in deinem Fall sollte es eine eindeutige ID des Datensatzes sein.
    Wenn diese ID vom Wertebreich her in ein (unsigned) int passt must du nur bei jedem neuen ListItem so die ID hinzufügen:

    TListItem* NewItem = // ... Neues Item
    int ID = // eindeutige ID des Datensatzes
    NewItem->Data = reinterpret_cast<void*>(ID);
    

    Dann kannst du FindData so einsetzen :

    int ID = // ID die zu finden ist
    TListItem* Item = ListView->FindData(0, reinterpret_cast<void*>(ID), true, false);
    if (Item)
    {
      // gefunden
      }
    else
    {
      // nicht gefunden
      }
    

    Wenn die ID nicht in einen int passt bleibt dir nichts weiter übrig als die IDs in dynamischen Arrays abzulegen und als ID für die ListItems entweder die Indexe aus dem Array oder die Speicheradressen der Arrayelemente zu verwenden.

    bis bald
    akari


Anmelden zum Antworten