BDE: Alter aus Feld "Geburtsdatum" berechnen.



  • Hallo zusammen,

    ich habe das Problem das ich für eine Auswertung das "ALTER" von personen in einer Datenbank benötige.
    In der Datenbank habe ich "nur" das feld Geburtsdatum als Date.

    Kann ich irgendwie schnell & einfach das Alter berechnen? ggf. per SQL?
    Hab dazu nix gefunden.

    Ich "behelfe" mir momentan so da ich beim ersten programmstart am tag diese Rutine laufen lasse:

    // DB Reorganisieren
         DBGrid->DataSource->DataSet->First();
         String Mid = "";
         String Ag = "";
    
      // "Bitte warten fenster anzeigen
         FrmWait->ProgressBar->Max = DBGrid->DataSource->DataSet->RecordCount;
         FrmWait->LblW->Caption = "Bitte warten, Datenbank wird reorganisiert";
    
          FrmWait->Show();
         FrmMain->Enabled = false;
    
           // "jeden datensatz aus dem DBGrid einzeln auslesen
         for(int j=0;j< DBGrid->DataSource->DataSet->RecordCount;j++)
          {
            FrmWait->Show();
            FrmWait->ProgressBar->Position++;
            Application->ProcessMessages();
            Mid = DBGrid->Fields[0]->AsString;
            // Funktion alter liefert das Alter zurück auf basis des Geb. Datum
            Ag = Alter(DBGrid->Fields[7]->AsString);
            String UpdS = "UPDATE mitglieder SET Age = " + Ag + " WHERE Mitgliedsnummer = '" + Mid + "'";
            // Funktion ExecSQL führt einfach den SQL Befehl aus
            ExecSQL(UpdS);
            DBGrid->DataSource->DataSet->Next();
         }
    
         // hilfsfenster wieder zu
          FrmWait->Close();
          FrmMain->Enabled = true;
    

    Das ganze geht zwar dauert aber hald ewig (sind schon n paar datensätze ;/ )

    Hat jemand n tipp? danke.

    Thomas



  • Vielleicht hilft dir dieser Thread als Ansatzpunkt weiter (das Alter ist nichts anderes als die Zeitdifferenz zwischen "heute" und dem Geburtsdatum ;)).



  • welche Datenbank verwendest du denn?
    bei Access ist z.B. folgendes möglich:

    UPDATE Tabelle1 
    SET Alter = DateDiff("yyyy",GebDatum,Now())+((Format(Now(),"mmdd")<(Format(GebDatum,"mmdd"))))
    


  • CStoll (off) schrieb:

    Vielleicht hilft dir dieser Thread als Ansatzpunkt weiter (das Alter ist nichts anderes als die Zeitdifferenz zwischen "heute" und dem Geburtsdatum ;)).

    Ähm nein hilft mir nicht. Mein Problem ist nicht das Alter an sich zu berechnen, das macht eine kleine Funktion kein Thema. Mein Problem ist es das Alter von 2000 Datensätzen möglichst schnell zu berechnen.

    Linnea schrieb:

    welche Datenbank verwendest du denn?
    bei Access ist z.B. folgendes möglich:

    UPDATE Tabelle1 
    SET Alter = DateDiff("yyyy",GebDatum,Now())+((Format(Now(),"mmdd")<(Format(GebDatum,"mmdd"))))
    

    Hi, dein beispiel hab ich auch schon gegoogeld aber ich hab ne Paradox Datenbank im Hintergrund ;/ Den DateDiff gibts da scheinbar nicht *schnief*



  • hast du schonmal das versucht?

    UPDATE Tabelle
    SET Alter = Convert(integer, ((Now()-GebDatum)/365) )
    

    wobei die 365 noch nachzuprüfen ist 😉

    [Edit] Welchen SQL-Sysntax verwendet Paradox?



  • Linnea schrieb:

    hast du schonmal das versucht?

    UPDATE Tabelle
    SET Alter = Convert(integer, ((Now()-GebDatum)/365) )
    

    wobei die 365 noch nachzuprüfen ist 😉

    [Edit] Welchen SQL-Sysntax verwendet Paradox?

    Vielen Dank für deine Hilfeversuche.

    Ein

    UPDATE Mitglieder SET Age = Convert(integer, ((Now()-GebDatum)/365) )
    

    liefert zurück "Ungültiges Schlüsselwort 'Integer'"

    (btw: Feldname ALTER darf man net verwenden da ALTER ja ein SQL Schlüsselwort ist *drübergestolpertbin*)

    [EDIT]
    Laut Google wir die "local SQL" Syntax verwendet



  • gibts dafür denn keine schnellere lösung? das problem müssten doch andere auch haben? *grübel*



  • Richtige Formel:

    Alter: Int((Date()-Geburtsdatum)/365,25)


Log in to reply