Gegevens uit een memo veld in nieuwe tabel

Status
Niet open voor verdere reacties.

LuckyFm

Gebruiker
Lid geworden
3 feb 2015
Berichten
91
Hallo allemaal,

Middels de importoptie in Access haal ik "Pop gereed meldingen" uit Outlook in het message veld staan de gegevens zoals ik die nodig heb (Zie afbeelding)
Deze gegevens worden door automatisch doorgestuurd door de planning

ik heb dus een tblMail met daarin een Memo veld waar deze gegevens in staan.

Nu wil ik de gegevens tussen de [ ] graag in een aparte tabel "toveren" importeren?

POP gereed melding : [02-11-2015 08:33]

Perron : [06]
POP nummer : [018]
Bestemming : [BOS-OOST]
Aantal Rollen : [04]

6606499 23160
6606494 23110
6606460 23970
6606461 23990
----------
[94] Ton

heeft iemand een suggestie??

Alvast bedankt voor de medewerking
 

Bijlagen

  • Memo.jpg
    Memo.jpg
    33,2 KB · Weergaven: 45
Dat wordt nog lastig omdat je (zo te zien) minstens één variabele hebt: aantal rollen. En de omschrijving daarvan ziet er ook niet gestandaardiseerd uit. Wat ik zelf zou doen, en ik doe dat ook al met een verglijkbaar probleem: ik lees de tekst in een matrix in, die scheidt op basis van alinea's. Dan krijg je dus een matrix met net zo veel elementen als er alinea's staan. Hoe gestructureerder je mail, hoe makkelijker je weet op welke positie een waarde staat. In jou voorbeeld zou in arr(24) bijvoorbeeld het perronnummer kunnen staan.
Op basis van die kennis kun je dan een tabel vullen.
 
Dat is nou weer heel vervelend in feite zijn alle velden die ik uit deze mail wil hebben variabelen
was al een heel eind met selStart en SelEnd maar ook dat werkt niet.
het aantal rollen is variabel tussen 3 en 6 doorgaans dus in een matrix gaat ook niet lukken vrees ik
om dat het totaal gewicht steeds op een andere regel komt

Heb je nog een andere suggestie misschien???

Het enige vaste is de benaming door de variabelen:

POP gereed melding :
Perron :
POP nummer :
Bestemming :
Aantal Rollen :

en bij het totaalgewicht staat er altijd "Ton" achter

103 Ton

Wellicht dat met deze gegevens iets te doen is?????

Alvast bedankt voor je medewerking
 
Je interpreteert de term 'variabelen' niet goed; een variabele is een object met een variabele inhoud, maar de variabele zelf is wel een constante. In jouw geval heb je dus wel degelijk bruikbare variabelen zoals je ze dus ook zelf al benoemt. Het enige probleem is (vermoedelijk, je geeft net wat te weinig informatie voor een volledig inzicht) dus het veld [Aantal rollen]. Die hebben zo te zien dus een afwijkende opmaak, en dat maakt het lastig. Daarnaast moet je dus goed inzicht hebben in de structuur van de mail die je inleest.
Om de werkwijze wat nader te verklaren: je leest dus de complete mail in in de matrix, op basis van de code Char(10) bijvoorbeeld. Alinea-eindes dus. Dat betekent dan dat elke alinea in een eigen rij van de matrix komt. Op basis van de layout van de mail kun je dan wel ongeveer bepalen wat er verder moet gebeuren. Je moet namelijk een lus maken door alle elementen van de matrix en die gaan bekijken. Zo valt dan op dat de regels met de waarden die je wilt hebben (bijna) allemaal een dubbele punt hebben. Die regels zet je zelf dan ook weer in een tijdelijke matrix, waarbij de hoogste waarde dan de door jou gewenste waarde is, en de laagste de veldnaam aanduidt. Dan heb je al genoeg informatie om een toevoegquery te draaien die dat veld met die waarde toevoegt.
Zoals gezegd: het wordt wat lastiger met de eigenlijke rollen omdat die zo te zien moeilijker zijn te identificeren. Niet alleen door het aantal, maar ook door de naamgeving. In dit geval wil je namelijk zowel de naam als de waarde wegschrijven. Het lijkt er op dat je het blok kunt herkennen aan de koppen die er boven staan. En dat helpt dan wellicht, want als je weet dat de regel onder Rolnummer ------- bevat, dan kun je concluderen dat je, als de tekst Rolnummer in regel 36 staat, en je 5 rollen hebt, je de elementen uit arr(38)-arr(42) moet wegschrijven in de tabel.
En op die manier evalueer je de complete mail en schrijf je weg wat je weg wilt schrijven.
 
nu ben ik weer een tijd bezig geweest maar ik kom er niet echt uit ik kan regeltjes in mijn array lezen maar veel verder kom ik er niet mee.

Heb maar een link naar een voorbeeld database gemaakt hopelijk kan je mij daarmee verder helpen

alvast bedankt


http://www.bckamperduin.nl/voorbeeld.accdb

nog even voor alle duidelijkheid

ik wil uit de Array:

Perron : [05]
POP nummer : [018]
Bestemming : [BOS-OOST]
Aantal Rollen : [04]

[98] Ton

bijvoorkeur alleen de gegevens tussen de [ ] in de tblGereed
 
Laatst bewerkt:
Inmiddels ben ik weer een stukje verder heb het nu werkend maar ik moet in frmMail alle velden door enteren

Wellicht kan iemand mij helpen om dit te automatiseren voor alle binnen gehaalde email.
In de tblMail worden de openstaande email binnen gehaald.
In het frmMail wordt de inhoudvan de email in rijen verdeeld (array)
Deze array zet ik in textboxen en met Len kort ik de rijen in tot wat ik wil hebben uit deze email
Gelukkig is de opbouw van de email aardig gestandaardiseerd zodat dit eigenlijk feilloos werkt,
het enige wat nog een klein probleempje was het aantal rollen omdat elke rol een regel in de email inneemt.
Dat heb ik onder vangen met een if aantal = 3 then elsif 4 enz..

Nu moet ik alleen nog telkens door enteren om de rijen in te korten dit zou ik ook graag vanzelf laten verlopen zodra je het formulier frmMail opent bijvoorbeeld

Misschien heeft iemand een suggestie??

in het voorbeeld2 staat een voorbeeld van tot waar ik nu ben.

Alvast bedankt voor de hulp
 
Je komt een heel eind, maar het kan nog wel een stuk mooier. Om met je laatste probleem te beginnen: je weet eigenlijk al wel hoe je het moet oplossen, want je begin is perfect. Jammer genoeg stop je na één regel, en ga je over op een foute werkwijze. Heb je hier genoeg aan? Wellicht niet :). Wat je dus niet moet doen is die tekstvakken vullen met een gebeurtenis op die tekstvakken. Dat werk alleen als die tekstvakken (in jou geval) de focus krijgen. En dat is dus nergens voor nodig. Wat je moet doen (en waar je dus ook begonnen bent) is de gebeurtenis Form_Current gebruiken.
Je code kan dus nog een stuk beter, en dat komt zo wel :).
 
En om je niet al het werk uit handen te nemen, hier mijn code... Ik heb op je formulier een aparte, verboregen, keuzelijst gezet (lstPerrons) en die vul ik a.d.h. van het aantal rollen. Maakt niet uit hoeveel rollen, als de structuur vast ligt, zoals je zegt, zou het altijd moeten werken.

Code:
Private Sub Form_Current()
Dim arrLines() As String, arr() As String, sRol As String
Dim i As Integer
    If IsNull(Me.txtText1) Then
        Me.Knop15.Visible = False
        Me.Knop25.Visible = True
        Exit Sub
    Else
        With Me
            arrLines = Split(.txtText1.Value, vbCrLf)
            arr = Split(arrLines(5), " ")
            .txtTijd = arr(UBound(arr))
            .TxtPerron = Trim(arr(UBound(Split(arrLines(6), ":"))))
            .txtTafel = Trim(arr(UBound(Split(arrLines(7), ":"))))
            .txtBestemming = Trim(arr(UBound(Split(arrLines(8), ":"))))
            .txtAantal = Trim(arr(UBound(Split(arrLines(9), ":"))))
            'Keuzlijst vullen
            For i = 12 To UBound(arrLines) - 2
                If sRol <> "" Then sRol = sRol & ";"
                arr = Split(arrLines(i), " ")
                sRol = sRol & Trim(arr(LBound(arr))) & ";" & Trim(arr(UBound(arr)))
            Next i
            If Not sRol & "" = "" Then
                With Me.lstPerrons
                    .RowSource = sRol
                    .Visible = True
                End With
            End If
            .txtGewicht = Trim(arrLines(UBound(arrLines)))
            .Knop15.Visible = True
            .Knop15.SetFocus
            .Knop25.Visible = False
        End With
    End If
End Sub
Zoals je ziet: nergens een MID of LEFT nodig :)
 
Bovenstaande code is toch een beetje kort door de bocht; er zitten wat meer variabele zaken in dan ik in eerste instantie dacht. ik dacht ook dat er maar één record met data in zat; blijkt dus niet zo te zijn. Beter om die dus m.b.v. code voor te zijn. In bijgaande db werkt het prima, voor zover ik kan zien :).
 

Bijlagen

Octafish

Helemaal super werkt (bijna) perfect nog een klein puntje zou het mogelijk zijn om bij het gewicht alleen het gewicht te zetten dus zonder "Ton",
ik wil namelijk aan het eind van de dag het totaal aantal rollen en het totaal gewicht per bestemming in een rapport zetten.

b.v. 28 rollen naar BOS-West 728 (Ton)


nogmaals super bedankt voor je hulp
 
het was even puzzelen maar ik ben eruit.

Moet toegeven dat het wel even duurde voor ik het stukje code van OctaFish (begrijpend) kon lezen.

maar de oplossing lag voor de hand (nadat ik het een beetje begreep)

Code:
            arr = Split(arrLines(y), "ton")
            '.txtGewicht = Trim(arrLines(y))
            .txtGewicht = Trim(arr(LBound(arr)))


Nogmaals enorm bedankt voor de hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan