Maximalen Wert eines Feldes per SELECT Abfrage ermitteln



  • Danke für die schnelle Antwort.

    Leider bekomme ich auch bei Umsetzung deines Tips einen Fehler.



  • Einigie Datenbanken liefern auch Dinge wie Expression1 oder ähnliches zurück. Es bietet sich an, immer einen Namen zu vergeben.

    SELECT
    MAX(nr) AS max_nr
    FROM...
    

    Dann kannst Du das Feld über den Namen 'max_nr' auslesen.



  • micha2 schrieb:

    Danke für die schnelle Antwort.

    Leider bekomme ich auch bei Umsetzung deines Tips einen Fehler.

    Bei welcher Variante bekommst du welchen Fehler ?! Du must schon präzise sein, sonst können wir nur raten.
    Ich kann mir vorstellen, das die SQL-Anweisung nicht mit dem Alias-Namen zurechtkommt, also muß der noch erweitert werden

    DB->SQL->Add("SELECT MAX(nr) AS max_NR FROM table");
    

    bis bald
    akari



  • Alternativ kannst Du natürlich auch über den Index auf das Feld zugreifen.

    int v_index = DB->Fields->Fields[0]->AsInteger;
    

    Gruß,

    Alexander



  • Danke für eure Antworten. Hat funktioniert!

    Nur leider scheine ich im Moment eine kleine denkblokade zu haben.
    Bekomme bei folgender Syntax:

    DB->SQL->Clear();
    DB->SQL->Add("SELECT MAX(NR) AS max_nr FROM table");
    DB->Open();
    
    int v_index = DB->FieldByName("max_nr")->AsInteger;
    v_index++;
    
    DB->SQL->Clear();
    DB->SQL->Add("INSERT INTO table (nr) VALUES (v_index)");
    DB->ExecSQL();
    

    den folgenden Fehler:

    1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben

    Was hab ich denn falsch gemacht?



  • DB->SQL->Add("INSERT INTO table (nr) VALUES ("+IntToStr(v_index)+")");
    

    😉



  • Leider kommt der Fehler immernoch.



  • Heißt Deine Tabelle tatsächlich "table"?
    Abgesehen davon, dass die Aussagekraft eines solchen Namens praktisch null ist, sollte es zu Konflikten
    kommen, da die meisten Datenbanken diese Bezeichnung für sich reserviert haben (z.B. create table).

    Gruß,

    Alexander



  • Moin.

    Nein die Tabelle heißt nicht "table" ist nur ein Beispiel.



  • micha2 schrieb:

    ist nur ein Beispiel.

    Dann zeig doch mal, was Du tatsächlich machst.

    Gruß,

    Alexander



  • Wenn ich das richtig sehe, dann möchtest du die "nr" immer einen hoch zählen.
    Wenn das einfach eine fortlaufende Nummer sein soll würde ich dir einfach einen Trigger vorschlagen der nach jedem Insert "nr" einen hochzählt.

    CREATE GENERATOR GEN_table_nr;
    
    CREATE TRIGGER table_BI FOR table
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
          NEW.nr = GEN_ID(GEN_table_nr,1);
    END
    

Anmelden zum Antworten