Aktualisierungsabfrage für ein Hyperlinkfeld

Moderator: ModerationP

Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon kathyv » 31. Aug 2021, 11:15

Hallo,
bei vielen Datensätzen stimmt die Adresse eines Hyperlinkfeldes nicht mehr.
Man müsste jetzt über das Kontextmenü "Hyperlink bearbeiten" aufrufen, um die Adresse zu korrigieren.
Am besten wäre es, das über eine Aktualisierungsabfrage zu erreichen.
Aber geht das überhaupt und wenn wie?
Gruß
Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 01. Dez 2020, 14:50

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon Doming » 31. Aug 2021, 11:36

Moin Kathy,

was meinst Du mit "Adresse stimmt nicht mehr"? Ist es nur eine bestimmte Adresse, meinetwegen aus http://alteAdresse/Linkziel wurde http://neueAdresse/Linkziel?
Dann würde ich die Änderung mit Suchen/Ersetzen direkt in der Tabelle korrigieren.
Um wieviele DS handelt es sich?

Gruß
Doming
Benutzeravatar
Doming
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 192
Registriert: 01. Jul 2014, 05:19

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon kathyv » 31. Aug 2021, 12:02

Hallo Doming,
dein Bsp zur bestimmten Adresse trifft zu. Kam dadurch, dass im Explorer der Ordner umbenannt wurde.
An Suchen/Ersetzen in der Tabelle dachte ich auch schon, aber dort wird nur der Dateiname gezeigt und 'Suchen' findet nichts.
Sind ca. 100 DS
Gruß
Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 01. Dez 2020, 14:50

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon Doming » 31. Aug 2021, 12:11

Hallo Kathy,

in der Tabelle die Spalte mit den Linkfeldern markieren, mit Strg-H die Suche aktivieren, "AlteAdresse" suchen und die Option "Vergleichen" auf "Teil des Feldinhaltes" setzen.
So funktioniert es hier.

Gruß
Doming
Benutzeravatar
Doming
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 192
Registriert: 01. Jul 2014, 05:19

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon SGast » 31. Aug 2021, 12:17

Hallo,
mit Suchen/Ersetzen kommt man bei Hyperlinkfeldern nicht weit. Einer der Nachteile dieses Datentypen.

Ohne programmieren geht das zum Bsp über Copy&Paste.
Tabellenspalte kopieren. Im Editor deiner Wahl einfügen. Tauschen. In Tabelle einfügen.

Per Programmierung wäre Hyperlinkpart das Stichwort.

Gruß Steffen
SGast
 

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon kathyv » 31. Aug 2021, 12:38

Hallo,
@Doming
So funktioniert es hier

Ja, bei mir auch. Aber nur dann, wenn der Suchstring im Feld gezeigt wird. Bei mir ist aber die Adresse im Feld nicht gezeigt, sondern nur der Dateiname. Und der ist OK. Für die Adresse funktioniert es nicht.
@Steffen
also keine Aktualisierungsabfrage, sondern VBA mit einem Recordset?
Ich habe im Code am Ende
Code: Alles auswählen
  rst.Close
  db.Close
  Set rst = Nothing
  Set db = Nothing

Ist das eigentlich nötig? Sowohl close als auch nothing?
Vielleicht auch beides nicht, da mit End Sub doch alle Variablen ihren Inhalt verlieren.
Versuche jetzt Hyperlinkpart
Gruß
Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 01. Dez 2020, 14:50

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon SGast » 31. Aug 2021, 12:43

Hallo,
ein Hyperlink besteht intern aus
Code: Alles auswählen
Anzeigetext#Link

In der Tabelle sieht man nur den Anzeigetext und kann auch nur diesen Tauschen.

Über eine Aktualisierungsabfrage kann man im einfachsten Fall (alles) per Replace()bearbeiten.
Anzeigetext und Link getrennt dann über HyperlinkPart.

Gruß Steffen
SGast
 

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon SGast » 31. Aug 2021, 12:46

Hallo,
Code: Alles auswählen
db.close
macht keinen Sinn. Würde eigentlich bedeuten Datenbank schließen.

Code: Alles auswählen
  rst.Close
  Set rst = Nothing
Macht Sinn. Ist aber nmM. nicht zwingend notwendig.

Gruß Steffen
SGast
 

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon knobbi38 » 31. Aug 2021, 13:14

Hallo Kathy,

auch wenn Steffen seiner Meinung nach ein Close auf einem Recordset für "nicht notwendig" erachtet, ist es eine goldene Regel, daß wenn man selber ein Objekt geöffnet hat, dieses auch wieder selber zu schließen.

Set rst = Nothing muß man nicht unbedingt machen. Das macht VBA automatisch, wenn die Variable mit der Objektreferenz den Scope verliert.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3458
Registriert: 02. Jul 2015, 14:23

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon kathyv » 31. Aug 2021, 13:16

Hallo,
Tabellenspalte kopieren. Im Editor deiner Wahl einfügen. Tauschen. In Tabelle einfügen.

Ich habe zwischenzeitlich das probiert in Word. Mit Alt F9 in die Feldansicht umgeschaltet für Suchen/ersetzen. In Word funktionieren die korrigierten Links. In Acc in die Spalte eingefügt, sind sie tot und zwar alle, nicht nur die korrigierten.
Wäre eine Alternative gewesen, aber bei mir gehts nicht.
Mit HyperlinkPart mache ich jetzt weiter und berücksichtige das zu den Variablen.
Gruß
Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 01. Dez 2020, 14:50

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon SGast » 31. Aug 2021, 13:19

Hallo,
Ich habe zwischenzeitlich das probiert in Word.
Also Word ist kein Editor sondern eine Textverarbeitung.
Nutze Notepad, wenn du nicht gescheites anderes hast.

Gruß Steffen
SGast
 

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon Bitsqueezer » 31. Aug 2021, 15:48

Hallo,

ein Hyperlink ist einfach nur ein Textfeld, bei dem die Teile mit "#" getrennt sind.

Wenn Du also einen Update durchführen möchtest, mußt Du nur genau auf diese Syntax achten.

Bei einem normalen Hyperlink sieht so ein Eintrag z.B. so aus:

Code: Alles auswählen
CCEDV#http://www.ccedv.de##Quickinfo CCEDV


Zuerst der Anzeigetext, dann "#", dann der www-Link, dann zweimal "#" und dann die Quickinfo (Tooltip).

Entsprechend kannst Du "HyperlinkPart" verwenden, um nach dem gewünschten Einträgen im WHERE-Teil des UPDATEs zu suchen und dann den String austauschen.

Beispiel für ein Feld namens "HL":
Code: Alles auswählen
CurrentDb.Execute "UPDATE tblHyperlink SET HL = 'Anzeigetext#NeuerLink##TooltipText' WHERE HyperlinkPart(HL,5) = 'Alter Linktext'"


"5" steht für "acFullAddress", da SQL keine VBA-Konstanten verarbeiten kann.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8465
Registriert: 21. Jun 2007, 12:17

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon Gast » 01. Sep 2021, 11:25

Hallo,
vielen Dank an alle für die Tipps. :D
Ich habe alles umgesetzt - die Abfrage, das Recordset und auch CP mit Notepad statt Word.
Klappte alles.
Dabei stellte ich fest, dass andere Links ebenfalls wegen geänderter Ordnerstruktur nicht funktionieren.
Gibt es eine Methode, die Gültigkeit eines Links zu checken?
Ich denke an dies, wobei als strInput aus dem Recordset HyperlinkPart(rst!Hyp, 5) übergeben wird.
Als Nachteil sehe ich nur, dass jedesmal beim richtigen Link die Anwendung geöffnet wird. Evtl. auch Zeitkollisionen, da der Code schneller ist als das Öffnen und Schließen der Anwendung. Für das letzte weiß ich auch noch nicht wie das gehen könnte.
Aber vielleicht gibt es noch eine andere Lösung, die Links zu prüfen?
Gruß
Kathy
Function GetAddress(strInput As String) As Boolean
On Error GoTo Error_GetAddress
strInput = InputBox("Enter a valid address")
Application.FollowHyperlink strInput, , True 'öffnet im neuen Fenster
GetAddress = True

Exit_GetAddress:
Exit Function

Error_GetAddress:
GetAddress = False
Resume Exit_GetAddress
End Function
Gast
 

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon kathyv » 01. Sep 2021, 11:32

die Anmeldung vergessen
Hallo,
vielen Dank an alle für die Tipps. :D
Ich habe alles umgesetzt - die Abfrage, das Recordset und auch CP mit Notepad statt Word.
Klappte alles.
Dabei stellte ich fest, dass andere Links ebenfalls wegen geänderter Ordnerstruktur nicht funktionieren.
Gibt es eine Methode, die Gültigkeit eines Links zu checken?
Ich denke an dies, wobei als strInput aus dem Recordset HyperlinkPart(rst!Hyp, 5) übergeben wird.
Als Nachteil sehe ich nur, dass jedesmal beim richtigen Link die Anwendung geöffnet wird. Evtl. auch Zeitkollisionen, da der Code schneller ist als das Öffnen und Schließen der Anwendung. Für das letzte weiß ich auch noch nicht wie das gehen könnte.
Aber vielleicht gibt es noch eine andere Lösung, die Links zu prüfen?
Gruß
Kathy
Code: Alles auswählen
Function GetAddress(strInput As String) As Boolean
  On Error GoTo Error_GetAddress
  Application.FollowHyperlink strInput, , True
  GetAddress = True

Exit_GetAddress:
  Exit Function

Error_GetAddress:
  GetAddress = False
  Resume Exit_GetAddress
End Function
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 01. Dez 2020, 14:50

Re: Aktualisierungsabfrage für ein Hyperlinkfeld

Beitragvon SGast » 01. Sep 2021, 11:55

Hallo,
wenn es um Dateien geht, lies die Dateinamen aus dem Link und teste mit Dir() (oder FSO).
Wenn es um Internetseiten geht, wird es komplizierter.

Gruß Steffen
SGast
 

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste