Bijwerkquery maken die hyperlink samenstelt en toevoegd in veld

Status
Niet open voor verdere reacties.

vermhans

Gebruiker
Lid geworden
31 mrt 2010
Berichten
38
Hallo
Veel ervaring met acces heb ik niet, daarom deze vraag. Ik heb een bestaande tabel personeelsleden (300-tal), met o.m. de velden: nr, naam, voornaam. Ik heb nu een veld bijgemaakt: “link dossier” met als eigenschap “hyperlink”. Doel: als ik de link aanklik in een formulier opent de map van dat personeelslid, die staat op de server met o.m. allerlei documenten. De mappen zijn allemaal aangemaakt, ze zijn als volgt benoemt: “naam.voornaam”. Ik wil nu met een bijwerkquery in 1 beweging alle hyperlinks aanvullen voor alle personeelsleden en door acces de hyperlink laten samenstellen met de padnaam aangevuld met veld naam.veld voornaam uit de tabel, dus bv. G:\map\map\personeel\jansens.piet
Hoe doe ik dat?
Alvast bedankt.
 
Laten we bij het begin beginnen: gebruik nooit hyperlink velden. Met tekstvelden kun je hetzelfde bereiken, en je mogelijkheden zijn veel beter. In een formulier kun je namelijk een klik actie maken op dat veld (FollowHyperlink) waarmee je alles kunt doen. De links zelf (de tekst dan) kun je met een Bijwerkquery makkelijk samenstellen.
 
Laten we bij het begin beginnen: gebruik nooit hyperlink velden. Met tekstvelden kun je hetzelfde bereiken, en je mogelijkheden zijn veel beter. In een formulier kun je namelijk een klik actie maken op dat veld (FollowHyperlink) waarmee je alles kunt doen. De links zelf (de tekst dan) kun je met een Bijwerkquery makkelijk samenstellen.
 
Bedankt octafish... en hoe stel ik de tekst samen met het gebruik van de inhoud van 2 velden, nl naam en voornaam? In excel is dit eenvoudig met formule tekst samenvoegen ... tekst cel A1. cel B2 en kopiëren maar.
 
Zelfs in Excel kan het simpeler met de 'formule' =A1 & B2. Dus Tekst.Samenvoegen is nogal omslachtig in mijn ogen :).
Maar bovenstaand voorbeeldje kan dus niet eens in Access, omdat A1 en B2 in Access twee velden uit twee verschillende records zijn. Dus daar heb je al een probleem :).

Laten we even teruggaan naar je oorspronkelijke vraag: je wilt een extra veld in je tabel zeg je, om het pad vast te leggen. Dat pad is vast (tenzij je het verkeerd hebt uitgelegd, en het anders is) aangevuld met achternaam.voornaam. Het mooie is nu: je hoeft helemaal niks te doen, en dat veld dus ook niet aan te maken :).
Wat moet je wél doen? Op je formulier een tekstveld maken (laten we zeggen: txtPadNaam) waarin je het volledige pad samenstelt. De Besturingselementbron van dat tekstveld ziet er dan zo uit: ="G:\map\map\personeel" & [Achternaam] & "." & [Voornaam]. En op dat tekstveld zet je dan de actie <Bij klikken>:
Code:
Private Sub txtPadNaam_Click()
     FollowHyperlink Me.txtPadNaam
End Sub

Wil je het écht mooi hebben, dan gebruik je dit natuurlijk niet, en zet je een subformulier op je hoofdformulier met een keuzelijst waarin je per medewerker de map met bestanden al uitleest. Je ziet dan, als je door de personen bladert, in de keuzelijst alle bestanden die er in de map staan, en je gebruikt de OnCLick gebeurtenis dan om gelijk het gewenste document te openen. Ook daar gebruik je de FollowHyperlink voor. Want waarom zou je de gebruiker uit de database halen? Nergens voor nodig :)
 
Thx OctaFish, ik ga eerst voor de quickwin, maar uw oplossing met het subformulier ga ik zeker verder uitspitten en bekijken :thumb:... Heel waarschijnlijk zal ik dan wel terug ten rade moeten komen ;)
 
Helemaal goed :). Ik heb uiteraard wel een paar voorbeelden, want ik pak het zo dus ook aan!
 
Als ik nog even mag verder bomen op dit onderwerp... Ik heb wat zitten zoeken ... nu voor de "update" heb ik een lijst getrokken uit access naar excel en via een macro alle 300 mappen aangemaakt op de server. De combo tekstvak en followhyperlink werkt perfect om de juiste personeelsmap te adresseren, dus voorlopig werkt dit voor mij... maar in de huidige stand dien ik nog, telkens er een nieuw personeelslid komt, een map aan te maken op de server. Nu las ik dat je op hetzelfde principe als de followhyperlink ook een CreateFolder doen. Dus ik zou denk ik voorlopig willen afstappen van het principe tekstvak en een knop maken, en waarachter een code zit die
1. het pad aanmaakt zoals door u voorgesteld: ="G:\map\map\personeel" & [Achternaam] & "." & [Voornaam]
2. kijkt of de map al bestaat op de server
3. zo ja, onmiddellijk de map opent
4. zo niet, de map aanmaakt en
5. vervolgens de map opent (followhyperlink)

Ik vond, Octafish, uw volgende code: https://www.helpmij.nl/forum/showthread.php/863409-Documenten-openen-via-keuzelijst-werkt-niet, maar hoe ik die vertaal en combineer naar een voor mij bruikbare code ...:confused:

Code:
Function CreateFolder(strFolder)
'Aanroepen met:     CreateFolder "H:\Algemeen\Kwaliteit\Creatie_producten"
Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FolderExists(strFolder) Then
        Exit Function
    Else
        CreateFolder (oFSO.GetParentFolderName(strFolder))
    End If
    oFSO.CreateFolder (strFolder)
    Set oFSO = Nothing
End Function
 
Ik gebruik de door jou nu gewenste methodiek ook voor een database, en dat werkt inderdaad prima. Zodra een nieuwe persoon wordt aangemaakt, dan wordt gelijk de gewenste mappenstructuur aangemaakt. In mijn db zelfs op twee niveau's, want ook voor dossiers. Een persoon kan namelijk meerdere dossiers hebben, en voor elk dossier maak je dan ook een aparte map aan. Ik kan die code maandag wel doorsturen.
 
Hallo Octafish of iemand ;;;
ik vogelde uiteindelijk iets uit dat (tot mijn verbazing) werkt
Code:
Private Sub Knop_28787_Click()
Dim strFolder As String
strFolder = "\\server\personeel\pdos\" & [Achternaam] & "." & [Voornaam]
If FolderExists(strFolder) = False Then
                 Call MkDir(strFolder)
                 Call FollowHyperlink(strFolder)
          
Else
                 Call FollowHyperlink(strFolder)
End If
End Sub

Function FolderExists(sFile As Variant) As Boolean
On Error Resume Next
If Len(sFile) > 0 Then
       FolderExists = (Len(Dir$(sFile, vbDirectory)) > 0&)
End If
End Function
Ik weet niet of dit zeer proper is ... maar het doet zijn werk.
Nu zit ik nog eigenlijk met 1 probleempje. Ik maak mijn map op basis van de [naam] en [voornaam]. Maar wat igv van naamgenoten? Ik dacht om het [ID-nr] bij te voegen in de naam van de map, maar dat is een autonummering, en dat werkt blijkbaar niet, of de [geboortedatum], maar die heeft als notatie "korte datumnotatie" met een invoermasker "99/00/0000;0;_" ... heb jij soms een idee hoe dit op te lossen
 
Waarom werkt het niet met een autonummerveld? Dat kun je toch gewoon opvragen? En je datumveld? Je invoermasker doet geen drol voor de ingevoerde waarde, dat is namelijk een getal, ongeacht hoe je het laat invullen. Persoonlijk gruwel ik van invoermaskers; jij laat gebruikers verplicht acht cijfers invoeren voor een datum, terwijl je doorgaans met 4-5 tekens kan volstaan. 1 maart 2019 moet bij jouw worden ingevoerd als 01032019, terwijl in mijn databases 1-3 volstaat. En we slaan allebei exact hetzelfde op. Mag jij raden waar mijn gebruikers de voorkeur aan geven :)
Kortom: je kunt uit een datum alles halen wat je wilt; de dag, maand, jaar, dag-maand..... En met Format geef je dat dus exact op.
 
Overigens kan je functie wat korter:
Code:
Private Sub Knop_28787_Click()
Dim strFolder As String
     strFolder = "\\server\personeel\pdos\" & [Achternaam] & "." & [Voornaam]
     If FolderExists(strFolder) = False Then  MkDir(strFolder)
     FollowHyperlink(strFolder)
End If
End Sub
 
Waarom werkt het niet met een autonummerveld? Dat kun je toch gewoon opvragen? En je datumveld? Je invoermasker doet geen drol voor de ingevoerde waarde, dat is namelijk een getal, ongeacht hoe je het laat invullen. Persoonlijk gruwel ik van invoermaskers; jij laat gebruikers verplicht acht cijfers invoeren voor een datum, terwijl je doorgaans met 4-5 tekens kan volstaan. 1 maart 2019 moet bij jouw worden ingevoerd als 01032019, terwijl in mijn databases 1-3 volstaat. En we slaan allebei exact hetzelfde op. Mag jij raden waar mijn gebruikers de voorkeur aan geven :)
Kortom: je kunt uit een datum alles halen wat je wilt; de dag, maand, jaar, dag-maand..... En met Format geef je dat dus exact op.
 
Waarschijnlijk foutje getikt in de veldnaam. Werkt perfect. Mbt datum, mijn db bestaat al een eind en heb ik aangemaakt na lessen access. Nooit bij stilgestaan... hartelijk dank voor de hulp!
 
Ik zou zeggen: dit bericht (14) kan in zijn geheel weg; wat is het nut van een compleet bericht quoten?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan