voornaam, tussenvoegsel en achternaam

  • Onderwerp starter Onderwerp starter scw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Goedendag,

Ik wil in mijn dB graag de voornaam, evt. tussenvoegsel(s) en achternaam splitsen.
Maar hoe krijg ik het voor elkaar, dat als er geen tussenvoegsel in de naam voorkomen, die extra spatie er ook niet tussen zit...
Nu gebruik ik deze namelijk:

Naam: [Voornaam] & " " & [Tussenvoegsel] & " " & [Achternaam]

Maar als er geen tussenvoegsel aanwezig is, dan zit er dus een spatie te veel in. Of deze heb ik ook nog als voorbeeld:

Naam: [Achternaam] & ", " & [Tussenvoegsel] & [Voornaam]
 
Maak een functie (funNaam) met vier parameters (Voornaam, Tussenvoegsel, Achternaam, Type)
Afhankelijk van het type geef je de een of de andere terug. Tussenvoegsel is optioneel variant.

Als het tussenvoegsel leeg is dan geef je afhakelijk van het Type
Naam: [Voornaam] & " " & [Achternaam]
of
Naam: [Achternaam] & ", " & [Voornaam]
terug

Als het tussenvoegsel niet leeg is dan geef je
Naam: [Voornaam] & " " & [Tussenvoegsel] & " " & [Achternaam]
of
Naam: [Achternaam] & ", " & [Tussenvoegsel] & [Voornaam]
terug.

Share & Enjoy!
 
Met deze formule krijg je geen lege spatie bij lege tussenvoegsels:

Naam: [Voornaam] & " " & [Tussenvoegsel] + " " & [Achternaam]
 
Beste Guus2005 & Octafish,

Uiteraard bedankt in de eerste plaats voor antwoorden. Ik heb uiteindelijk voor de oplossing van Octafish gekozen: deze werkt namelijk perfect! Weer een probleem minder in m'n db! :d

Nu ben ik nog even nieuwsgierig Michel: wat is de precieze functie van de + in de regel?? Mogelijk kun je dit uitleggen?

Bedankt nogmaals,

scw :thumb:
 
En nu de uitleg...

Eigenlijk heel simpel: met het &teken combineer je (tekst)velden, met het + maak je een berekening. Door het veld [Tussenvoegsel] op te tellen bij een spatie ([Tussenvoegsel] + " ") voer je in wezen een onzinnige berekening uit als het veld een Nullwaarde bevat. Eentje die niet kan. Access negeert deze berekening, en laat dus ook het resultaat weg. En da's precies wat je wilt!
Ik gebruik de laatste jaren alleen nog maar deze formule om namen samen te stellen, en je snapt wel waarom... :)
 
Laatst bewerkt:
:D Fenomenaal!! Wat grappig!

Dus als ik Achternaam, Voornaam (evt.)Tussenvoegsel(s) wil, zoals:

Marwijk, Bert van
Vaart, Rafael van der
Vlaar, Ron

Doe ik:
Naam: [Achternaam] & ", " & [Voornaam] + " " & [Voorzetsel]

Maar volgens mij krijg ik dan nog een spatie te veel er tussen of is die wel goed?? :d
 
Dat wordt dan dit:
Naam: [Achternaam] & ", " & [Voornaam] & " " + [Voorzetsel]
Voornaam is namelijk niet leeg...
 
Zat ik er toch nog naast (wat ik al vermoedde dus), maar het is nu wel helemaal duidelijk! Daarom vroeg ik het nog maar eens voor de zekerheid...

Mag ik nog een laatste vraag stellen, over een probleem welke ik nu weer tegenkom, indirect hierdoor: :o
In mijn code had ik dus origineel staan:

Code:
Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblLeden "
stSql = stSql & "WHERE [LidID] = " & Me!Betrokkene
Set Rsq = CreateObject("ADODB.Recordset")
Rsq.Open stSql, Con, 1

Maar nu werkt dat niet meer nu ik natuurlijk veld Naam heb vervangen door velden Voornaam, Achternaam, Tussenvoegsel.
Dus dacht ik dan moet Access hem vanuit de query oppakken

Code:
Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM qryLeden "
stSql = stSql & "WHERE [LidID] = " & Me!Betrokkene
Set Rsq = CreateObject("ADODB.Recordset")
Rsq.Open stSql, Con, 1

Maar dat pikt Access niet... hoe kan ik dit nu weer oplappen?? :o

Excuses, dat ik zoveel van je expertise moet vragen... Maar zo ga ik het wel begrijpen allemaal.
 
Is je query verder gelijk aan de tabel? Oftewel: heb je alle velden die je refereert wel in de query zitten? Want het maakt in beginsel niet uit of je een query of tabel gebruikt.
Je kunt het anders eens zonder ADODB proberen:

Code:
With CurrentDB.OpenRecordset(strSQL)
     If .RecordCount >0 Then Msgbox .Fields(0).Value
End With

Of wat je maar wilt doen met je recordset...
 
Hmmm... hij blijft dit geven: No value given for one or more required parameters.

Dezelfde velden zijn opgenomen in de query als in de tabel. Zoals hieronder/boven beschreven Naam: Achternaam etc.
Daarnaast dacht ik ze voor de zekerheid ook nog eens gewoon individueel in de query op te nemen voor de zekerheid [Achternaam] [Voornaam] etc.

Maar zoals gezegd geen resultaat. Je andere oplossing zal ik niet helemaal uit komen. Anders zal ik de dB wel uploaden..
 
het brok code

Hieronder volgt de code op het form:

Code:
Private Sub Opslaan_Click()
On Error GoTo Err_Opslaan_Click

Dim objOutlook As Object
Dim objEmail As Object
Dim Con As Object
Dim Rs, Rsq, Rst, Rss, Rsv, Rsn, Rsp As Object
Dim stSql As String

Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblMedewerkers "
stSql = stSql & "WHERE [MedewerkerID] = " & Me!Aanname
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open stSql, Con, 1

Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM qryMedewerkers "
stSql = stSql & "WHERE [MedewerkerID] = " & Me!Betrokkene
Set Rsq = CreateObject("ADODB.Recordset")
Rsq.Open stSql, Con, 1

stSql = "SELECT [AntwoordSoort] FROM tblAntwoordSoorten "
stSql = stSql & "WHERE [AntwoordSoorttID] = " & Me!Soort
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open stSql, Con, 1

stSql = "SELECT [Groep] FROM tblGroepen "
stSql = stSql & "WHERE [GroepID] = " & Me!Groep
Set Rss = CreateObject("ADODB.Recordset")
Rss.Open stSql, Con, 1

stSql = "SELECT [Klantnaam] FROM tblKlanten "
stSql = stSql & "WHERE [KlantID] = " & Me!Klant
Set Rsv = CreateObject("ADODB.Recordset")
Rsv.Open stSql, Con, 1

stSql = "SELECT [Status] FROM tblStatus "
stSql = stSql & "WHERE [StatusID] = " & Me!Status
Set Rsp = CreateObject("ADODB.Recordset")
Rsp.Open stSql, Con, 1

Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblMedewerkers "
stSql = stSql & "WHERE [MedewerkerID] = " & Me!Afhandeling
Set Rsn = CreateObject("ADODB.Recordset")
Rsn.Open stSql, Con, 1

Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
.CC = DLookup("[E-mailadres]", "tblEmail")
.Subject = "Antwoord " & LCase(Rst![Antwoordsoort])
.Body = "Antwoord toegevoegd door " & Rs!Naam & "." & Chr$(13) & _
Chr$(13) & "Dit antwoord is " & Rsq!Naam & _
" en valt onder de groep: " & Rss!Groep & "." & Chr$(13) _
& "Details antwoord: " & Chr$(13) & _
Chr$(13) & Me!Omschrijving & Chr$(13) & Chr$(13) & _
"Datum: " & Me!Datum & Chr$(13) & _
"Klant: " & Rsv!Klantnaam & Chr$(13) & _
"Maatregelen: " & Me!Maatregel & Chr$(13) & _
"Status: " & Rsp!Status & Chr$(13) & _
"Afhandeling: " & Rsn!Naam & Chr$(13) & _
"Vervolg: " & Me!Vervolg & Chr$(13) _
& "------------------------------------------------------------" & _
Chr$(13) & "Dit is een automatisch gegenereerde e-mail."
.Display
End With


DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acForm, "frmAntwoordToevoegen"
End If
Exit Sub

Rs.Close
Rsq.Close
Rst.Close
Rss.Close
Rsv.Close
Rsn.Close
Rsp.Close


Set Con = Nothing
Set Cont = Nothing
Set Rs = Nothing
Set Rsq = Nothing
Set Rst = Nothing
Set Rss = Nothing
Set Rsv = Nothing
Set Rsn = Nothing
Set Rsp = Nothing

Exit Sub


Exit_Opslaan_Click:
    Exit Sub

Err_Opslaan_Click:
    MsgBox Err.Description
    Resume Exit_Opslaan_Click

End Sub


Zoals gezegd heeft de tblMedewerkers de velden Voornaam, Tussenvoegsel en Achternaam. Maar hoe zet ik het dan neer? :confused:
 
Ik heb jouw code een beetje aangepast;

Dim a,b,c,d,e,f as object betekent dat a,b,c,d,e van het type variant zijn en f is een object. In dit geval niet erg want een variant kan alles zijn.
Als je variabelen gebruikt van het type object, dan maak je gebruik van "late binding". Dat betekent dat je geen gebruik kan maken van intellisense en je moet goed weten waar je mee bezig bent.

Code:
Private Sub Opslaan_Click()
    On Error GoTo Err_Opslaan_Click
    
    Dim objOutlook As Object
    Dim objEmail As Object
    Dim Rs As Recordset
    Dim Rsq As Recordset
    Dim Rst As Recordset
    Dim Rss As Recordset
    Dim Rsv As Recordset
    Dim Rsn As Recordset
    Dim Rsp As Recordset
    Dim stSql As String
    
    stSql = "SELECT [Naam] FROM tblMedewerkers "
    stSql = stSql & "WHERE [MedewerkerID] = " & Me!Aanname
    Set Rs = CurrentDb.OpenRecordset(stsql)
    
    Set Con = Application.CurrentProject.Connection
    stSql = "SELECT [Naam] FROM qryMedewerkers "
    stSql = stSql & "WHERE [MedewerkerID] = " & Me!Betrokkene
    Set Rsq = CurrentDb.OpenRecordset(stsql)
    
    stSql = "SELECT [AntwoordSoort] FROM tblAntwoordSoorten "
    stSql = stSql & "WHERE [AntwoordSoorttID] = " & Me!Soort
    Set Rst = CurrentDb.OpenRecordset(stsql)
    
    stSql = "SELECT [Groep] FROM tblGroepen "
    stSql = stSql & "WHERE [GroepID] = " & Me!Groep
    Set Rss = CurrentDb.OpenRecordset(stsql)
    
    stSql = "SELECT [Klantnaam] FROM tblKlanten "
    stSql = stSql & "WHERE [KlantID] = " & Me!Klant
    Set Rsv = CurrentDb.OpenRecordset(stsql)
    
    stSql = "SELECT [Status] FROM tblStatus "
    stSql = stSql & "WHERE [StatusID] = " & Me!Status
    Set Rsp = CurrentDb.OpenRecordset(stsql)
    
    Set Con = Application.CurrentProject.Connection
    stSql = "SELECT [Naam] FROM tblMedewerkers "
    stSql = stSql & "WHERE [MedewerkerID] = " & Me!Afhandeling
    Set Rsn = CurrentDb.OpenRecordset(stsql)
    
    Set objOutlook = CreateObject("Outlook.application")
    Set objEmail = objOutlook.CreateItem(olMailItem)
    
    With objEmail
        .CC = DLookup("[E-mailadres]", "tblEmail")
        .Subject = "Antwoord " & LCase(Rst![Antwoordsoort])
        .Body = "Antwoord toegevoegd door " & Rs!Naam & "." & Chr$(13) & _
        Chr$(13) & "Dit antwoord is " & Rsq!Naam & _
        " en valt onder de groep: " & Rss!Groep & "." & Chr$(13) _
        & "Details antwoord: " & Chr$(13) & _
        Chr$(13) & Me!Omschrijving & Chr$(13) & Chr$(13) & _
        "Datum: " & Me!Datum & Chr$(13) & _
        "Klant: " & Rsv!Klantnaam & Chr$(13) & _
        "Maatregelen: " & Me!Maatregel & Chr$(13) & _
        "Status: " & Rsp!Status & Chr$(13) & _
        "Afhandeling: " & Rsn!Naam & Chr$(13) & _
        "Vervolg: " & Me!Vervolg & Chr$(13) _
        & "------------------------------------------------------------" & _
        Chr$(13) & "Dit is een automatisch gegenereerde e-mail."
        .Display
    End With
    
    
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.Close acForm, "frmAntwoordToevoegen"
    
    Set Con = Nothing
    Set Cont = Nothing
    Set Rs = Nothing
    Set Rsq = Nothing
    Set Rst = Nothing
    Set Rss = Nothing
    Set Rsv = Nothing
    Set Rsn = Nothing
    Set Rsp = Nothing
    
Exit_Opslaan_Click:
    Exit Sub
    
Err_Opslaan_Click:
    MsgBox Err.Description
    Resume Exit_Opslaan_Click

End Sub
Enjoy!
 
vriendelijk bedankt!!

Ha die Guus!!

Hartelijk dank voor de moeite om naar de code te kijken (en de uitleg)! Het werkt weer helemaal naar behoren! Geweldig :thumb:

Nogmaals dank,

scw!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan