Benutzer mit den meisten Antworten
MS SQL Abfrage zeitlich regeln?

Frage
-
Ich habe eine WHOIS - Anwendung mit C++ in Visual Studio 2010 geschrieben, die automatisch bei den Servern zu einem Domainname den Status abfragt. Die Daten werden dann in einer MS SQL Datenbank gespeichert.
Nun das Problem: Man kann nicht beliebig viele Anfragen an die Server senden. Darum würde ich der Anwendung gern sagen, sie soll nur drei abfragen pro Minute senden und wenn alle Domainnamen aus der Datenbank dann aktualisiert wurden soll man 12 Stunden keine Abfrage mehr starten können.
Leider bin ich ein ziemlicher Anfänger was C++ angeht, darum wollte ich fragen ob jemand eine Idee hat wie das funktioniert und mir einen Denkanstoß geben könnte, ich komm nämlich nicht weiter.
LG spirit.
Antworten
-
ERLEDIGT!!!
Also ich hab es jetzt irgendwie geschafft...wahrscheinlich ziemlich umständlich, aber es funktioniert.
Ich hab einen Timer eingebaut, der durchläuft alle 20 Sekunden eine Schleife einmal und macht dabei die Abfrage, und jeder Datensatz der aktualisiert wurde bekommt eine DateTime anhand derer ich dann prüfen kann, wann jeder einzelne Datensatz zum letzten mal aktualisiert wurde und dann entscheide ich ob er erneut aktualisiert werden kann.
Alles ein wenig umständlich weil ich DateTime in TimeStamp umwandel um zu rechnen und der Timer wie gesagt alle 20 Sekunden die selbe Schleife einmal durchläuft, was ja nicht der Sinn einer Schleife ist, aber es funktioniert.
Nochmal danke Holger, für den Ansatz mit dem Timer und so...wäre ich nie drauf gekommen!!
Eh du dir jetzt unnötig Mühe machst mir noch irgendwelchen Code zu senden...Es funktioniert und das ist die Hauptsache für mich!!!
Trotzdem nochmal großes Dankeschön an dich Holger für deine Mühe!! :D
LG spirit
- Als Antwort markiert spirit_ger Donnerstag, 23. August 2012 13:29
Alle Antworten
-
Hallo sprit_ger,
programmierst du wirklich in C++ oder in C++/CLI?
Sollte es C++/CLI (+ WinForms) sein, so möchte ich dich auf den Blog von VC++ MVP Jochen Kalmbach aufmerksam machen: C++/CLI und WinForms macht keinen Sinn.
Sollte es unmanaged C++ sein, so bist du im falschen Forum ;-)
Aber egal um welche Technologie es sich handelt, du musst es so in der Art handeln:Ich würde das mittels eines Timers lösen. Du musst in deiner Anwendung z.B. in einer Konfigurationsdatei angeben, wie viele Anfragen pro Minute gesendet werden dürfen.
In deinem Programm teilst du jetzt die Anzahl der möglichen Anfragen / 60 Sekunden, was für 3 Anfragen bedeutet, dass du alle 20 Sekunden eine Anfrage rausschicken kannst.
Wenn alle Anfragen raus sind, speicherst du die Uhrzeit ab, an dem die letzte Anfrage raus ist. Nun kannst du errechnen, wann du die nächsten Anfragen rausschicken darfst.
Code liefere ich gerne auf Anfrage nach, sobald du mir mitteilst, um welche "Art" von C++ es sich handelt.
Ich hoffe ich konnte dir etwas weiterhelfen...
Viele Grüße Holger M. Rößler
-
Hallo Holger,
danke für deine schnelle Antwort.
Ja, da hab ich mich wohl falsch ausgedrückt, ich programmiere in C++/CLI, da es der Chef so will, also kann ich leider auch nicht zu C# oder ähnlichem wechseln.
Der Ansatz klingt logisch und ich wäre dir dankbar für ein wenig Code, der mich auf die richtige Spur bringt.
LG spirit
-
Hallo Holger,
danke für deine schnelle Antwort.
Ja, da hab ich mich wohl falsch ausgedrückt, ich programmiere in C++/CLI, da es der Chef so will, also kann ich leider auch nicht zu C# oder ähnlichem wechseln.
Ja, diese Aussage habe ich zwischenzeitlich so oft gehört.
Und ehrlich gesagt verstehe ich nicht, warum es den Vorgesetzten nicht wichtig zu sein scheint, seinen Entwicklern möglichst einfache, sinnige und produktive Tools an die Hand zu geben.
Ich kenne dass auch, dass es den Jungs es einfach nicht in ihren sturen Schädel zu bringen ist, dass C++/CLI (bei reiner .net Programmierung) unnötig Geld und Zeit kostet. Das böse erwachen kam dann immer hinterher. Und dann waren immer war die Programmierer schuld.Das sie es auch anders hätten haben können, wenn sie etwas mehr weitsicht walten lassen würden, kommt den Herrschaften nicht in den Sinn. *Kopfschüttel*
Der Ansatz klingt logisch und ich wäre dir dankbar für ein wenig Code, der mich auf die richtige Spur bringt.
Ich werde dir Beispiele nachreichen. Versprochen ;-)LG spirit
Viele Grüße Holger M. Rößler
-
ERLEDIGT!!!
Also ich hab es jetzt irgendwie geschafft...wahrscheinlich ziemlich umständlich, aber es funktioniert.
Ich hab einen Timer eingebaut, der durchläuft alle 20 Sekunden eine Schleife einmal und macht dabei die Abfrage, und jeder Datensatz der aktualisiert wurde bekommt eine DateTime anhand derer ich dann prüfen kann, wann jeder einzelne Datensatz zum letzten mal aktualisiert wurde und dann entscheide ich ob er erneut aktualisiert werden kann.
Alles ein wenig umständlich weil ich DateTime in TimeStamp umwandel um zu rechnen und der Timer wie gesagt alle 20 Sekunden die selbe Schleife einmal durchläuft, was ja nicht der Sinn einer Schleife ist, aber es funktioniert.
Nochmal danke Holger, für den Ansatz mit dem Timer und so...wäre ich nie drauf gekommen!!
Eh du dir jetzt unnötig Mühe machst mir noch irgendwelchen Code zu senden...Es funktioniert und das ist die Hauptsache für mich!!!
Trotzdem nochmal großes Dankeschön an dich Holger für deine Mühe!! :D
LG spirit
- Als Antwort markiert spirit_ger Donnerstag, 23. August 2012 13:29