wie kann ich DB Felder direkt ansprechen und mit den Werten arbeiten??



  • hallo,
    ich habe bei mir eine dbase db laufen auf die ich mit bde zugreifen. in einem feld ist meine fortlaufende kdnummer.
    wenn ich jetzt einen neuen datensatz anlegen, möchte ich automatisch eine neue kundennummer raussuchen. sprich wenn bei mir in der db die letzte kdnummer 100 ist soll beim neuen datensatz automatisch 101 erscheinen.

    wie kann ich das realisieren?? sprich wie kann ich am einfachsten den höchsten wert aus der db in dem feld auslesen, den wert dann erhöhen und dann als neue kdnummer ausgeben??

    kann mir da wer helfen??

    gruß
    TheAnimal



  • hallo,

    grundsätzlich, generell bietet sich bei eienr datenbank, egal welcher für solche sachen sql an. auch wenn die datenbank kein wirklicher sql-server ist, kannst du z. b. über eine query und einer funktion einen id-generator basteln:

    int TDM1::GetNewID(String TableName, String ID_Field)
    {
       int NewID;
       try
       {
          MAX_ID_QUERY->Close();
          MAX_ID_QUERY->SQL->Clear();
          MAX_ID_QUERY->SQL->Add("SELECT MAX(" + ID_Field + ")");
          MAX_ID_QUERY->SQL->Add("FROM " + Char(39) + TableName + Char(39));
          MAX_ID_QUERY->Open();
          NewID = MAX_ID_QUERY->Fields->Field[0]->AsInteger++;
       }
       catch (...)
       {
          NewID = 0;
       }
       return NewID;
    }
    

    Das ist ein Beispiel aus einem Delphi-Datenbankprogramm, dass sogar in der Praxis mit einer Access Datenbank noch heute eingesetzt wird. Ich habe es jetzt scnell in cpp übersetzt, es kann aber sein, dass vor allem in der zweiten SQL->Add beim Char(39) was geändert werden muss damit es in cpp läuft, aber dass bekommst du hin. leider kenne ich deine datenbank nicht. bei einem sql server würde man für sowas z. b. einen trigger oder eine stored procedure verwenden, also sqldas direkt auf dem server in der datenbank ausgeführt wird, das ist auch die beste lösung, doch solche datenbanken wie access (desktop datenbanken) können dies nicht, da macht dann sowas auf diese art, es gibt aber natürlich noch weitere möglichkeiten, aber das ding lief bei uns immer sehr zufriedenstellend, es gab nie probleme mit dem index...

    mfg
    murphy



  • Ich hatte wirklich gehofft, einmal würde reichen und es müsste nicht in jdem DB-Thread von TheAnimal auf das DB-Tutorial in der FAQ hingewiesen werden ... oder eben die simpelsten Grundlagen wieder und wieder durchgekaut werden. 😉



  • Jansen schrieb:

    Ich hatte wirklich gehofft, einmal würde reichen und es müsste nicht in jdem DB-Thread von TheAnimal auf das DB-Tutorial in der FAQ hingewiesen werden ... oder eben die simpelsten Grundlagen wieder und wieder durchgekaut werden. 😉

    ja danke für den hinweis. wie du vielleicht gesehen hast, habe ich die thread kurz hinter einander geschrieben. und von daher habe ich deinen tipp mit der FAQ auch nicht recht zeitig gelesen.
    ganz davon abgesehen, das ich mir den link aus der FAQ schon ageschaut habe. bevor ich die Beiträge geschrieben habe.
    aber schon nett, das immer wieder nur der hinweis auf die FAQ kommt.

    deshalb großes danke schön an murphy, das du mir so weiterhelfen willst. werde das heute abend mal ausprobieren. danke.

    gruß
    TheAnimal



  • Der Hinweis auf die FAQ kommt immer dann, wenn die Fragestellung darauf hindeutet, dass der entsprechende Eintrag nicht gelesen wurde.

    Im Übrigen solltest du dir auch mal das eine oder andere allgemeine Datenbank-Tutorial reinziehen. Im konkreten Fall würde man üblicherweise beim Erstellen der Tabelle das Feld kdnummer als Autoincrement deklarieren und sich damit das von dir beabsichtigte Geeier sparen. 😉



  • danke das für den tipp. als wenn ich auf den noch nicht selber gekommen bin. allerdings will ich es nicht als autoincrement haben.

    und ich denke, das nicht alles was du als "überflüssig" findest rumgeeiere ist oder meinst du nicht.

    ich muß dir ganz ehrlich sagen, das du dich hier do groß aufspielst. ich habe schon viel mit datenbanken gemacht. und wie mit datenbanke arbeite weiß ich aus. meine frage bezog sich speziell auf das verarbeiten von datenbanken im bcb. denn darin kenne ich mich noch nicht so gut aus.

    und das einzige was ich von dir bis jetzt immer nur bekommen habe ist "lies die faq". schön und gut, klar dafür ist sie ja auch da. aber ich finde, wenn man dem jenigen der eine frage hat helfen könnte, muß man nicht einfach immer nur "neunmalklug" auf die faq verweisen.

    ok, kann natürlich sein, das du mir meine fragen aufgrund fehlenden wissens nicht beantworten konntest. das möchte ich nicht ausschließen.

    finde es schade. im ernst. dachte immer, so ein forum ist auch dafür da, das einem bei fragen ein bischen geholfen wird. naja, man kann sich auch täuschen.

    gruß
    TheAnimal



  • Es geht mir als Moderator vor allem darum, dir zu helfen, deine Fragen so zu stellen, dass sie mit minimaler Redundanz beantwortet werden können.

    Aktuelles Beispiel: die Aussage, dass du keine Autoincrement-Felder benutzen willst hätte dringend in deinen ursprünglichen Beitrag gehört, um entsprechende Vorschläge sowohl dir als auch mir/uns zu ersparen.

    In einer freien Minute kannst du dir ja mal (nochmal?) diesen Artikel auf der Zunge zergehen lassen. 🙂


Anmelden zum Antworten