Bestimmtes Element der Datenbank anzeigen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Deeet88
User
Beiträge: 9
Registriert: Donnerstag 23. Dezember 2010, 10:46

Hey Leute,
ich muss als Semesterprojekt einen Terminkalender basteln, in dem ich Termine eintragen kann etc...
Er ist so gut wie fertig alles fukntioniert. Er zeigt mir das heutige Datum + Uhrzeit an, ich kann neue Termine eintragen
und dementsprechend verwalten.
Nur die "Erinnerungsfunktion" funktioniert noch nicht. Ich möchte theoretisch, dass mein nächster Termin so angezeigt wird, ein Beispiel:

Nächster Termin: "2010-12-24 - Weihnachten"

Das in Klammern soll der nächste Termin aus meiner Datenbank sein, der ansteht. Und wenn das Datum vorbei ist, muss er natürlich den
nächsten Termin anzeigen...
Nur hab ich da jetzt keine Ahnung...

Wäre um Hilfe sehr hilfreich!

Grüße,
Deeet88
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

was ist jetzt genau deine Frage?
Dein Problem lässt sich doch relativ einfach lösen indem du die richtige SQL-Abfrage nimmst. In etwa so:

Code: Alles auswählen

SELECT datum, event FROM kalender WHERE datum >= NOW() ORDER BY datum ASC LIMIT 1
BlackJack

Oder in SQLAlchemy mit ORM und entsprechend definiertem `Event`:

Code: Alles auswählen

upcoming_event = session.query(Event).filter(Event.date >= now()).first()
Deeet88
User
Beiträge: 9
Registriert: Donnerstag 23. Dezember 2010, 10:46

Ich muss hinzufügen, dass ich in Sachen Python und Web2Py absoluter Neuling bin.... :)

Ich hab hier meine Master.html, in der eben der kommende Termin angezeigt werden soll. Und zwar nach "<p><u><b>Nächster Termin:</b></u>" soll eben der Termin erscheinen.

Code: Alles auswählen

<!DOCTYPE html>
<html lang="{{=T.accepted_language or 'en'}}" class="no-js">
  
  <head>
  
  <!--Externe Dateien-->
  <link rel="stylesheet" type="text/css" href="{{=URL('static','main.css')}}">
  <title>{{=response.title or request.application}}</title>
  <script src="{{=URL('static','js/modernizr-1.6.min.js')}}"></script>
  {{response.files.append(URL('static','css/test.css'))}}
  {{include 'web2py_ajax.html'}}
  <!--Favicon für Ipad, Iphone etc-->
  <link rel="shortcut icon" href="{{=URL('static','images/favicon.ico')}}" type="image/x-icon">
  <link rel="apple-touch-icon" href="{{=URL('static','images/favicon.png')}}">
  
  </head>
  
  <body>
  
  <div class="flash">{{=response.flash or ''}}</div> <!-- Notification -->
  
  <div id="container">
  
      <div id = "header"><!--Header mit Logo, Navi und Logindaten-->
      
      <div id = "logo"><img src="/Kalender/static/images/logo.gif" />
      <!--<img src="{{URL(r=request,c='static',f='images',args='logo.gif')}}" />--></div>
      
      {{block header}} <!-- Default Header -->
      {{try:}}{{=auth.navbar(prefix=T('Hallo'),action=URL('default','user'))}}{{except:pass}}
      <br />
        <ul id="navigation">
            <li class = "active"> <a href="http://127.0.0.1:8000/Kalender/default/index" class="button" >Neuer Termin</a></li>
            <li> <a href="http://127.0.0.1:8000/Kalender/default/list" class="button" >Alle Termine</a></li>
            <li> <a href="http://127.0.0.1:8000/Kalender/default/search" class="button" >Termin suchen</a></li>        
        </ul>
      
      <div style="clear: both;"></div>
      {{end}}   
      
      </div><!--Header Ende-->
  
      <!--Datum mit Termin-->
      <div id = "date">
          
          <div id = "datum"><!--Gibt aktuellen Tag und Datum aus-->
              <script type="text/javascript">
                    var datum = new Date();
                    var a = datum.getHours();
                    var b = datum.getMinutes();
                    var wTag = datum.getDay();
                    var Tag = datum.getDate();
                    var yMonat = datum.getMonth();
                    var Jahr = datum.getFullYear();
                    var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
                    var Monat = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
                    document.write("<b><u><i>Heute ist:</i></u></b> " + Wochentag[wTag] + ", der " + Tag + "." + Monat[yMonat] + " " + Jahr + ", " + a + ":" + b + "h");
                </script>
            </div><!--Datum Ende-->
            
             <div id="aktuellerTermin"><!--Zeigt aktuellsten Termin an-->
                <p><u><b>Nächster Termin:</b></u></p>
            </div><!--Termin Ende-->
                                       
        </div><!--Datum mit Termin Ende-->
        
    <div id="content">
    
    {{include}}
    
    </div>
  
  </div>
  
  </body>
  
</html>
So sieht meine Termin Datenbank in "Modelle" aus:

Code: Alles auswählen

db.define_table( 'termin',
    Field('titel', requires = IS_NOT_EMPTY(IS_NOT_IN_DB(db, 'termin.titel'))),
    Field('datum', 'date', requires = IS_NULL_OR(IS_DATE())),
    Field('zeit', requires = IS_NULL_OR(IS_LENGTH())),
    Field('erstellt', 'datetime', default=request.now),
    Field('autor', requires = db.auth_user, default=user_id),
    Field('beschreibung', 'text')
    )
Und das is meine Funktion, im "Controller", um alle Termine anzuzeigen:

Code: Alles auswählen

def show():
    ## Zeigt einen eingetragenen Termin und seine Details
    thistermin = db.termin[request.args(0)]
    if not thistermin:
        redirect (URL (r = request, f= 'index'))
    db.kommentieren.termin_id.default = thistermin.id
    if user_id:
        form = crud.create(db.kommentieren)
    else:
        form = None
    terminkommentare = db(db.kommentieren.termin_id == thistermin.id).select()
    return dict (termin = thistermin, kommentare = terminkommentare, form = form)
Hoffe, dass ihr jetzt bisschen mehr durchblickt! :)
Zuletzt geändert von Anonymous am Donnerstag 30. Dezember 2010, 12:56, insgesamt 1-mal geändert.
Grund: Quelltexte in Code-Tags gesetzt.
BlackJack

@Deeet88: Dass Du Web2Py verwendest, hättest Du auf jeden Fall erwähnen müssen. Es gibt ja noch ein paar andere Rahmenwerke.

Wo genau liegt denn das Problem? Du musst eine Datenbankabfrage machen. Dazu musst Du Dir überlegen was genau Du von der Datenbank wissen willst, und dann schauen wie man das in der Abstraktionsschicht von Web2Py ausdrückt. Ich habe die Dokumentation dazu mal kurz überflogen und wenn ich mir die Beispiele dort anschaue, scheint das bis auf eine Sache ziemlich geradlinig umsetzbar zu sein. Ich habe auf die schnelle nicht gesehen, wie ein Datum für Vergleiche in der Abstraktionsschicht dargestellt wird. Die Beispiele sind immer mit ganzen Zahlen gewesen. Aber das sollte sich doch heraus finden lassen.

Was hast Du denn schon an Code für diese Abfrage geschrieben?

Was anderes: Im HTML die aktuelle Zeit vom Client anzuzeigen und dann den nächsten Termin basierend auf der Zeit des Servers, wird verwirrend wenn beide nicht in der gleichen Zeitzone operieren. Du solltest für die Terminverwaltung keine lokalen Zeiten verwenden, sondern UTC und die für die Anzeige dann in die lokale Zeit des Client umrechnen.
Antworten