Emailadressen: 1 record met 2 gegevens

Status
Niet open voor verdere reacties.

Crizke

Gebruiker
Lid geworden
11 feb 2013
Berichten
51
Hallo

Ik zit met een redelijk probleembje.

Voor een klantenregister heb ik het veld "Emailadressen" . Sommige klanten geven geen emailadressen in, sommigen 1; maar sommigen geven er 2 in.
Nu ben ik bezig met een query te maken, in 2 kolommen. in de 1e kolom wil ik het 1e emailadres, in de 2e kolom wil ik het 2e.
Ik zal dit met de SQL-code moeten gaan aanpassen waarschijnlijk... Iets zoals volgend:

Code:
Public Sub CreateEmail()

'*** Opvullen van de tabel

    StrSql_Read = "SELECT * FROM Klanten " _
           & "WHERE Klant = '" & Formulier & "' " _
           & "AND Volgnummer = '" & Taal & " '"
           
    Set Rst = Db.OpenRecordset(StrSql_Read)
     
    Do While Rst.EOF = False
    
        If klant <> vorige_klant Then
            volgnummer = 1
        Else
            volgnummer = volgnummer + 1
        End If
        
 '*** Wegschrijven van Klanten in tabel

        StrSql_Update = "INSERT INTO PKK_Email (KKKLNR, Volgnummer, Email) " _
               & "SELECT '" & KKKLNR & "', " & Email & ", '" & Volgnummer & "
        CurrentDb.Execute (StrSql_Update)
        
        Rst.MoveNext
    Loop

End Sub

Ben ik op de goede weg hiermee? Welke aanpassingen kan ik nog doen? Het is altijd hetzelfde record!!

Thanx
C:thumb:
 
Laatst bewerkt:
Leg eerst eens uit hoe je aan die 1, 2 of geen email adressen komt. Ik zie zo niet of je die in één of twee velden opslaat bijvoorbeeld.
 
Een klant heeft een klantenregister, gemaakt met een access formuliertje... Als een klant een factuur vraagt, geeft hij al zijn gegevens in, soms ook zijn emailadres (wij hadden hier 1 kader met naam "EMAD" voorzien). Maar wat gebeurde er? Sommige klanten gaven 2 emailadressen op (soms zelfs 3). zij kregen dan 1 klantnummer (bv KL01234) maar in het vak van de emailadressen werden de emailadressen achter elkaar ingegeven gescheiden door een komma (bv: ik@gmail.com , johan@administratie.gmail.com).

Onze klant print wekelijks zijn klanten af (access is naar excel geëxporteerd) maar hij krijgt geen emailadressen te zien. Nu maak ik een extra vakje waar de emailadressen in komen te staan, maar ik krijg enkel de 1e te zien (voor de komma dus)...

Ik weet dat dit een ingewikkelde situatie is . :)
 
Er verschijnt een beetje licht. Het veld [Emailadressen] kan dus één of meer emailadressen bevatten, gescheiden door een komma. Als dat teken altijd een komma is, kun je de string splitsen met het Split commando. Je splitst dan op basis van de komma. De adressen komen dan in een matrix variabele, die je kunt uitlezen met een lus.
Je grootste probleem nu is dus waarom je zowiezo maar één adres e zien krijgt. Op basis van je code is dat niet te zien. Maak er dus eens een voorbeeldje van, dat kijkt een heel stuk makkelijker.
 
Ik heb het opgelost gekregen... :-) Wel hoofdpijn en lang zoeken voor nodig gehad...

Code:
Option Compare Database

Public Function CreateEmail()

Dim Rst As DAO.Recordset
Dim Db As Database
Dim KKKLNR As String
Dim Email As String
Dim PKK_Email As String
Dim StrSql As String
Dim Klanten As String
Dim Klant As String
Dim KAKLNR As String
Dim Volgnummer As Integer

Set Db = CurrentDb

'*** Opvullen van de tabel

    StrSql_Read = "SELECT * FROM Q_Pkk order by KKKLNR"

    Set Rst = Db.OpenRecordset(StrSql_Read)

    Do While Rst.EOF = False

        If Rst!KKKLNR <> KLNR_SAV Then
            Volgnummer = 1
        Else
            Volgnummer = Volgnummer + 1
        End If
    
        KLNR_SAV = Rst!KKKLNR
    
'*** Wegschrijven van klanten in tabel

    StrSql_Update = "INSERT INTO PKK_Email (KKKLNR, Email, Volgnummer) " _
               & "SELECT '" & Rst!KKKLNR & "', '" & Trim(Rst!Email) & "', " & Volgnummer
        CurrentDb.Execute (StrSql_Update)

        Rst.MoveNext
    Loop

End Function

Via deze functie lees ik alles in in een nieuwe tabel. Op basis van deze tabel maak ik 5 nieuwe query's. Als het volgnr 1 is komt die in de 1e query; is het 2 in de 2e enz...
Dan maak ik via relaties in de oorspronkelijke tabel waar het klantenregister staat, 5 nieuwe kolommen aan gekoppeld aan de 5 nieuwe query's.
En voila, de emailadressen komen te voorschijn op hun plaats... ;)

Nu enkel nog wat macro's toepassen zodat hij bij openen altijd alles refresht... ;):d
 
Nu heb ik enkel het probleem dat mijn toevoegquery de gegevens altijd blijft toevoegen en inlezen, met gevolg dat elke keer dit proces gebeurd alle gegevens er opnieuw in komen (resultaat 20x hetzelfde record)

Code:
Option Compare Database
 
Public Function CreateEmail()
 
Dim Rst As DAO.Recordset
 Dim Db As Database
 Dim KKKLNR As String
 Dim Email As String
 Dim PKK_Email As String
 Dim StrSql As String
 Dim Klanten As String
 Dim Klant As String
 Dim KAKLNR As String
 Dim Volgnummer As Integer
 
Set Db = CurrentDb

 HIER MOET IETS KOMEN OM DE LIJST BIJ BEGIN LEEG TE MAKEN!

'*** Opvullen van de tabel
 
StrSql_Read = "SELECT * FROM Q_Pkk order by KKKLNR"
 
Set Rst = Db.OpenRecordset(StrSql_Read)
 
Do While Rst.EOF = False
 
If Rst!KKKLNR <> KLNR_SAV Then
 Volgnummer = 1
 Else
 Volgnummer = Volgnummer + 1
 End If

 KLNR_SAV = Rst!KKKLNR

 '*** Wegschrijven van klanten in tabel
  
StrSql_Update = "INSERT INTO PKK_Email (KKKLNR, Email, Volgnummer) " _
 & "SELECT '" & Rst!KKKLNR & "', '" & Trim(Rst!Email) & "', " & Volgnummer
 CurrentDb.Execute (StrSql_Update)
 
Rst.MoveNext
 Loop
 
End Function

Iemand die me kan helpen om de query leeg te maken???

Grtz
 
Laatst bewerkt:
Je hebt een vreemd gebruik van variabelen; je declareert variabelen niet die je gebruikt, en je declareert variabelen die niet gebruikt worden. Interessant derhalve... Kan mij niet voorstellen dat je Option Explicit aan hebt staan, want dan was je niet ver gekomen :)

Code:
Public Function CreateEmail()
Dim StrSql_Read As String, StrSql_Update As String
Dim KLNR_SAV As String
Dim Volgnummer As Integer

    CurrentDb.Execute ("DELETE FROM _TestEmail")
    StrSql_Read = "SELECT * FROM Q_Pkk order by KKKLNR"
    With CurrentDb.OpenRecordset(StrSql_Read)
        Do While Not .EOF
            If !KKKLNR <> KLNR_SAV Then
                Volgnummer = 1
            Else
                Volgnummer = Volgnummer + 1
            End If
            KLNR_SAV = !KKKLNR
            StrSql_Update = "INSERT INTO PKK_Email (KKKLNR, Email, Volgnummer) " _
                   & "SELECT '" & !KKKLNR & "', '" & Trim(!email) & "', " & Volgnummer
            CurrentDb.Execute StrSql_Update, dbFailOnError
            .MoveNext
        Loop
    End With

End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan