BooksXL - Ihr Online Buchshop

 

Home

Projekte

VB Tipps

über mich

vb tipps

 

 

AMAZON: ADO

home english version

DB Update auf dem WWW-Server

Schon mal versucht, eine mdb Datenbank, die online ist, zu aktualisieren? Und das auch noch während eines Live-Events, bei dem ständig die aktuellen Ergebnisse aus dem Zeiterfassungssystem abgegriffen und via Internet zur Verfügung gestellt werden?

Warum nicht einfach alle 20 Minuten eine mdb kopieren?

Tja, erstens sollte ja schon live drin sein, wenn live drauf steht - das Problem liegt aber an einer anderen Stelle. Für den Wettkampftag waren auf den Server bis zu 80.000 Zugriffe erwartet. Die Datenbank mit den Startlisten und den Ergebnissen konnte bereits Wochen vor dem Event nicht mehr via FTP überschrieben werden - sie war praktisch rund um die Uhr im Gebrauch.

Gibt's denn da nix, was man machen kann?

Logisch, eine simple TCP/IP Verbindung zur Datenbank oder ein Progrämmchen aus der Developer Version von Office oder eine RDO Verbindung.
Aber was tun, wenn der Provider dies nicht unterstützt?

Dann halt selbst ans Werk:

Hier nur kurz die Grundidee des Programms. Da eine solche Lösung stark vom Umfeld und den speziellen Anforderungen an die Datenbankaktualisierung abhängt, dürfte die Realisierung eigener Programme vor allem Anforderungen an die Problemspezifikation und weniger an das Ausprogrammieren stellen.

 

Schema DB-Update

 

Die lokale Steuerungs Datenbank "merkt" sich, welche Datensätze bereits auf dem WWW-Server aktualisiert sind und frägt die Datenbank mit den aktuellen Daten (hier die Endzeiten aller Starter) nach Neuerungen ab und sendet diese anschliessend an die Internet Maschine.

1. Kurz und knapp: unser Problem

Die Startnummern und damit (vereinfacht) der Primärschlüssel standen bei Beginn des Rennens natürlich fest. Das Problem konnte also auf die WWW-Aktualisierung derjenigen Starter reduziert werden, die bereits im Ziel waren, d.h. deren Endzeit auf der "Ergebnis DB" des Zeitnahmesystems verfügbar (NOT NULL) waren.

2. Auf der lokalen Steuermaschine

Eine Verbindung zu den Tabellen in der Zeitnahme Datenbank (war Oracle), eine lokale Tabelle mit den Startnummern, die bereits ins Internet überstellt worden sind ("IsUpdated") und eine Abfrage, die alle Starter mit ihren Zeiten liefert, deren Startnummer noch nicht in IsUpdated enthalten sind und deren Endzeit auf der Zeitnahme DB NOT NULL ist.

3. Auf dem WWW Server

Via .idc musste lediglich ein Statement zur Verfügung gestellt werden:

UPDATE StarterIronman
   SET SchwimmZeit = %Schwimm%
       WechselZeit1 = %Wechsel1%
       ...
   WHERE StartNr = %Nr%

Für Diagnosezwecke liefert dann die .htx das Wort "ok" sowie die Startnummer zurück.

4. Alles zusammen: Update der Internet-DB

Kurz skizziert:

Hole alle Starter in ErgDB mit Erg.EndZeit <> NULL und NOT IN IsUpdated
For Each Starter do
 GeheZuHTTPAdresse "...idc?Schwimm=" & Format$(Erg.Schwimmzeit) & ...
 Wenn Antwort enthält "ok" (im Explorer Ereignis ausprogrammiert) dann
	Insert Startnummer in LokDB als IsUpdated
... und das ganze alle 1-2 Minuten.

Und wie macht man das ganze heute?

Tja, dieser etwas ältere Tipp stammt noch aus der Zeit vor ASP. Insbesondere, wenn sämtliche Zeiten (insgesamt sind dies beim Triathlon immerhin 6 + in unserem Fall 5 Zwischenzeiten und das für 2300 Starter!) hochgeladen werden sollen, müssen die http-Anfragen optimiert werden: einfach alle paar Minuten eine Datei mit den Updates hochladen und dann per ASP komplett einlesen.

 

top