Access-o-Mania

Access-Forum => Tabelle/Abfrage => Thema gestartet von: Dorian am August 27, 2015, 15:19:13

Titel: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 27, 2015, 15:19:13
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
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am August 27, 2015, 16:11:59
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
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 27, 2015, 16:37:26
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
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: MzKlMu am August 27, 2015, 19:28:52
Hallo,
Zitat
Im 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.

Zitat
Ich 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.
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 28, 2015, 11:41:37
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
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: MzKlMu am August 28, 2015, 11:49:49
Hallo,
Zitat
Ich 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.

Zitat
Als berechnetes Feld in der Abfrage z.B. so:
UrlExistiert: ExistsURL(FeldMitUrl)
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 28, 2015, 18:03:53
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...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: MzKlMu am August 28, 2015, 18:56:56
Hallo,
hast Du meinen Hinweis in #3 zum Datenmodell gelesen ?
Wie viele Linkfelder hast Du im Moment je Datensatz ?
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 28, 2015, 19:02:49
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)
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am August 28, 2015, 19:55:13
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)
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 29, 2015, 16:40:02
nein, sie sollen nur einmal - wenn die Abfrage betätigt wird - geprüft werden nicht andauernd...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am August 30, 2015, 08:31:34
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?

Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 30, 2015, 14:48:50
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...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am August 30, 2015, 16:56:19
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.
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian am August 30, 2015, 17:30:11
OK, danke schön!!!
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 01, 2018, 16:10:31
Nochmal eine Frage dazu:

Ich habe jetzt für jeden Datensatz 4 zu prüfende Felder in einem Endlosformular.
Das entsprechende Feld zeigt mir jetzt ob der Link gültig ist oder nicht mit Hilfe dieser Formel:

=Wenn([UrlExistiert]=Wahr;"geht";"geht nicht")

mit der bedingten Formatierung ändert sich auch die Farbe auf grün oder rot.

1.
Wie kann ich jetzt erreichen, dass in einem neuen Datensatz (Endlosformular)
die Prüfung nicht stattfindet, also wenn das Feld "Link" leer ist?
2. Wie kann man die Prüfung veranlassen, erst nach 10 Sekunden zu beginnen bis ich den richtigen Datensatz angezeigt bekomme? Ich muss beim blättern sonst immer warten.

Dorian
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: trebuh am Mai 01, 2018, 19:19:25
Hallo Dorian,

ich würde wie MzKlMu beschrieben, die Links in eine extra Tabelle setzen.
Wird denn in dem besagten Datensatz noch was anderes außer den Links eingegeben?
Werden denn auch alle Links immer ausgefüllt?

Wenn das jede Woche einmal geprüft wird, würde ich ein extra Formular anlegen, welches mittels Startbutton alle Links prüft, und mir im Anschluß einen Bericht ausgeben lassen, welcher die ungültigen Links (jeder Link ein Datensatz) ausgibt.
Dann kannst Du auch nur diesen Datensatz löschen.

Andere Möglichkeit, in dieser extra Tabelle ein Ja/Nein Feld hinzufügen, welche die Gültigkeit hinterlegt.
Dann mittels Akualisierungsabfrage die ungültigen Datansätze löschen.

Gruß
Hubert
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 02, 2018, 18:03:04
Hallo!

Also die Links befinden sich nun in einer externen, verküpften Tabelle. Mir werden nun pro Datensatz 4 Links (Unterformular - Endlosformular) angezeigt.

Meine Frage war:
1.
Im Endlosformular wird ja automatisch nach dem letzten Datensatz schon ein neuer angezeigt.
Bei diesem neuen Datensatz wird aber im Moment "geht nicht" angezeigt weil natürlich in dem neuen Datensatz noch kein Link hinterlegt ist. Wie kann ich dies verhindern. (wenn Feld leer keine Prüfung oder so ähnlich...)
2.
Wie kann man die Prüfung veranlassen, erst nach 10 Sekunden zu beginnen bis ich den richtigen Datensatz angezeigt bekomme?

PS: Ein extra Formular um alle Links zu prüfen geht nun leider nicht mehr weil es mitlerweile ca. 7500 Links sind. Die alle zu prüfen dauert ca. 3 Stunden ... also nicht möglich...

Dorian

Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: trebuh am Mai 02, 2018, 19:34:31
Hallo Dorian,

von den 4 Links kann man in einer manuellen Abfrage die anderen 3 Links in einen neuen Datensatz mit entsprechendem Fremdschlüssel einfügen.
Von daher würde sich der Aufwand pro Link ein Datensatz in Grenzen halten.
Und sollte mal ein oder mehrere Links später hinzu kommen, hast Du alle Möglichkeiten offen.
So musst Du ja wieder in den Tabellenaufbau eingreifen.

Deine andere Frage verstehe ich nicht ganz.
Du willst einen neuen Datensatz anlegen, aber der Rechner ist damit beschäftigt die anderen Links zu prüfen sowie die bedingte Formatierung abzuarbeiten?

Ich denke, die Prüfung soll nur einmal pro Woche erfolgen!?

Was heißt "bis ich den richtigen Datensatz angezeigt bekomme?"
Du suchst einen Datensatz und der Rechner ist (leider mit der Prüfung) beschäftigt?

Dann hinterlege doch einen Button pro Datensatz im Endlosformular, wo Du jeden Datensatz nach Bedarf einer Prüfung unterziehen kannst.

Ändern sich die Links den ständig, dass diese jede Woche aktualisiert sein müssen?
Sind das Firmenwebadressen, oder Artikel?

Gruß
Hubert
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 03, 2018, 16:20:56
Hallo!
In meinem Unterformular befindet sich ein Endlosformular mit im Moment 4 Datensätzen. (Können auch mehr werden) Mittels einer Abfrage und des Moduls wird die Gültigkeit dieser Links geprüft.
Das Endlosformular zeigt aber natürlich schon die Möglichkeit an, einen neuen Datensatz hinzuzufügen.
(Datensatzmakierer mit Stern) auch hier wird schon geprüft und da das Feld Link leer ist natürlich auch ungültig angezeigt. Dies möchte ich verhindern.

Alle Links einmal die Woche zu prüfen geht nicht mehr weil es zu viele geworden sind. Es handelt sich um Fundstellen zu dem jeweiligen Thema die manchmal aber leider gelöscht worden sind...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 03, 2018, 21:09:19
Hallo,

Möglichkeit:

Das UFO bei "Anfügen zulassen" auf nein stellen. Damit wir kein neuer DS permanent angezeigt.  Wenn ein neuer DS hinzu kommen soll, dann das UFO an dieser Eigenschaft per Button umstellen oder über ein separat aufgerufenes Form einen neuen Link eingeben.

Ansonsten könnte auch die Prüfroutine so erweitert werden, dass beim Erkennen einen neuen DS eben keine Gültigkeitsprüfung erfolgt.
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 04, 2018, 13:14:52
...
Ansonsten könnte auch die Prüfroutine so erweitert werden, dass beim Erkennen einen neuen DS eben keine Gültigkeitsprüfung erfolgt.

Hallo!
Wie stelle ich den die Routine um? In dem Modul?
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

... oder in dem Unterformular / Endlosformular?

Danke und Gruß

Dorian
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 05, 2018, 07:55:42
Hallo,

im einfachsten Fall:


Zitat
Function ExistsURL(Url As Variant) As Boolean
Dim oXMLHTTP As Object
On Error GoTo Myerr

If IsNull(Url) Then Exit Function
.
.
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 05, 2018, 17:11:37
Hallo!

In der Abfrage bleibt das Feld UrlExistiert jetzt leer.
Wie kann ich dem Formular den sagen wenn AbfrageFeld leer soll das Formularfeld auch leer bleiben?
Im Moment habe ich im Formularfeld disen Code:

=Wenn([UrlExistiert]=Wahr;"geht";"geht nicht")
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 05, 2018, 19:04:57
Hallo,

z. B.:

= Choose([UrlExistiert];""; "geht";"geht nicht";"Fehler")  <edit>

und


Function ExistsURL(Url ) As Long
Dim oXMLHTTP As Object
On Error GoTo Myerr


If IsNull (Url) then
   ExistsURL=1
Else

    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
  oXMLHTTP.Open "GET", Url, False
  oXMLHTTP.Send
  If oXMLHTTP.Status = 200 Then
     ExistsURL = 2
  Else
      ExistsURL = 3
  End If
End If


MyExit:
  Set oXMLHTTP = Nothing
  Exit Function
Myerr:
  ExistsURL = 4   'evtl.  gesondert behandeln
  Resume MyExit
End Function

Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 07, 2018, 11:53:38
Hallo!

Die Abfrage (mit dem neuen Code im Modul) zeigt jetzt 2 oder 3. Der leere DS ist leer (gut)
Aber das Formularfeld mit dem Code = Chose([UrlExistiert];""; "geht";"geht nicht";"Fehler")
zeigt nur Fehler an ...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 07, 2018, 13:23:20
Hallo,

da ist ein Tippfehler..

Die Funktion heißt Choose()
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 07, 2018, 13:28:39
Ahhhh jetzt geht es ... außer bei einem neuen Datensatz, da sagt er jetzt #Typ!...

Dorian
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 07, 2018, 13:31:14
Hallo,

was zeigt denn die Abfrage bei einem neuen DS in Spalte "UrlExistiert" an?
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 07, 2018, 13:42:58
In der Abfrage ist das Feld leer ...
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: DF6GL am Mai 07, 2018, 19:29:25
Hallo,

dann versuch es so:

=Choose(nz([UrlExistiert];1);""; "geht";"geht nicht";"Fehler")
Titel: Re: Alle Web-Links in Tabelle auf Gültigkeit überprüfen!
Beitrag von: Dorian-1965 am Mai 07, 2018, 20:16:01
:-)

Vielen Dank jetzt klappt es!!!

Gruß

Dorian