Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Alle Web-Links in Tabelle auf Gültigkeit überprüfen!

Begonnen von Dorian, August 27, 2015, 15:19:13

⏪ vorheriges - nächstes ⏩

Dorian

Hallo!

Ich habe in einer Tabelle in verschiedenen Feldern (Link_1 ; Link_2 ; ... ) Links zu verschiedenen Webseiten gespeichert.
Kann ich (aus einem Formular mit einer Befehlsschaltfläche) mit einer Abfrage alle Links auf Gültigkeit (nur ob die Links noch funktionieren) testen.
Wenn ich einzelne Links mit einer Befehlsschaltfläche (Application.FollowHyperlink Me!Link_1) teste, öffnet die Seite oder es kommt eine Fehlermeldung. Aber dies hunderte mal zu tun ist etwas Zeitaufwendig...

Dorian

DF6GL

Hallo,


Du könntest eine solche Funktion in einer (bzw. entsprechend den Link-Feldern) berechneten Abfragespalte (oder anderswo, z. B. in einer Prozedur mit einem Recordset und einer Schleife über die Link-Felder) aufrufen:

Function ExistsURL(Url As String) As Boolean
Dim oXMLHTTP As Object
On Error GoTo Myerr
  ExistsURL = False
  Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
  oXMLHTTP.Open "GET", Url, False
  oXMLHTTP.Send
  If oXMLHTTP.Status = 200 Then ExistsURL = True

MyExit:
  Set oXMLHTTP = Nothing
  Exit Function
Myerr:
  ExistsURL = False
  Resume MyExit
End Function


Dorian

Hallo!

Wie und wo kann ich diese Funktion den genau einfügen? Im Formular oder in der Tabelle?
Werden dann alle Links der Tabelle (z.B. Link_1) geprüft oder nur der aktuelle?

Dorian

MzKlMu

#3
Hallo,
ZitatIm Formular oder in der Tabelle?
weder noch. Es würde auch nicht machbar sein. Die Funktion kommt in ein allgemeines Modul und wird in der Abfrage für jeden Datensatz aufgerufen. Es werden also alle Links der Tabelle geprüft.
Als berechnetes Feld in der Abfrage z.B. so:

UrlExistiert: ExistsURL(FeldMitUrl)
Es steht dann entweder Wahr (True) oder Falsch (False) in dem berechneten Feld. Das kannst Du dann sicher selbst deuten.

ZitatIch habe in einer Tabelle in verschiedenen Feldern (Link_1 ; Link_2 ; ... ) Links zu verschiedenen Webseiten gespeichert.
Das Datenmodell ist auch falsch. Die Links gehören in eine extra Tabelle mit einem Fremdschlüssel zur jetzigen Tabelle. Je Link ein Datensatz. Hast Du 5 Links so sind in dieser Tabelle 5 Datensätze. Das heißt, die Links stehen immer in einem Feld. Daher wird auch obige Funktion nur 1x aufgerufen. Bei Deinem jetzigen Aufbau wird die Funktion je Feld aufgerufen. Link_1 ; Link_2, .... sind sogenannte Aufzählungsfelder (mit einer Zahl hinten). Diese verstoßen bereits gegen die 1. Normalform.
Gruß Klaus

Dorian

Ich habe nun ein modul erstellt mit der Bezeichnung "ExistsURL" und habe den von DF6GL erstellten Code dort eingefügt.
Wie mache ich den das?:

wird in der Abfrage für jeden Datensatz aufgerufen

Danke für die Hilfe

Dorian

MzKlMu

Hallo,
ZitatIch habe nun ein modul erstellt mit der Bezeichnung "ExistsURL"
das Modul darf nicht den gleichen Namen haben wie die Funktion. Modul bitte umbenennen (mdlExistURL z.B.).
Wie das in der Abfrage gemacht wird, habe ich bereits beschrieben.

ZitatAls berechnetes Feld in der Abfrage z.B. so:
UrlExistiert: ExistsURL(FeldMitUrl)
Gruß Klaus

Dorian

Hallo!

Also, habe die Funktion umbenannt und in einer Abfrage ein berechnendes Feld eingefügt.
Wenn ich die Abfrage jetzt starte kann ich bis zu 1 Stunde warten und Access friert quasi ein.
Es wird zwischendurch eine Tabelle (Ergebnis der Abfrage) gezeigt mit den Werten 0 oder -1

Es sind im Moment ca. 450 Links zu prüfen...

MzKlMu

Hallo,
hast Du meinen Hinweis in #3 zum Datenmodell gelesen ?
Wie viele Linkfelder hast Du im Moment je Datensatz ?
Gruß Klaus

Dorian

Ja, habe ich gelesen. Ist aber viel Arbeit es zu ändern...
Ich habe in jedem Datensatz 4 Linkfelder und insgesamt ca. 450 Datensätze.
Ich habe die Abfrage nur auf einen Link je Datensatz angewendet (Link_1)

DF6GL

Hallo,


egal (in diesem Fall!), ob normalisiert  oder nicht , die Überprüfung eines Links dauert nun mal einige Augenblicke (ca. 1 s) ...

Die Frage stellt sich, wann und wie oft denn nun die Link-Prüfung stattfinden soll und für was das eigentlich gebraucht wird... Dauernd alle Links zu prüfen, ist wohl eher Arbeitsbeschaffung (für den PC und das IN)

Dorian

nein, sie sollen nur einmal - wenn die Abfrage betätigt wird - geprüft werden nicht andauernd...

DF6GL

Hallo,

naja,....   wann wird denn die Abfrage "betätigt"  und was passiert dann mit dem Abfrageergebnis? Soll heißen, für welchen Zweck  werden die Urls überhaupt in einer Abfrage geprüft?


Dorian

Die Abfrage soll ca. 1 mal die Woche betätigt werden um zu prüfen ob die Links noch gültig sind.
Ungültige Links kann ich dann entfernen bzw. erneuern. Es ersparnt mit hunderte Lesezeichen zu setzten und immer wieder zu prüfen...

DF6GL

Hallo,

in diesem Fall musst Du halt die Laufdauer der Abfrage in Kauf nehmen.

Alternativer Vorschlag:

Prüfung eines Links dann, wenn er verwendet wird. Ist er ungültig, kann durch ein aufpoppendes Form der Datensatz, in dem dieser Link steht, entspr. bearbeitet werden.

Dorian