[ASP] String in loop aanvullen

Pagina: 1
Acties:

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ik heb een query die een soortgelijk resultaat kan geven:

code:
1
2
3
4
Email          | Client_ID | Search    | Description
test@test.com  |     1     | chevrolet | chevrolet, in new condition
test@test.com  |     1     | chrysler  | very nice chrysler, $ 500
mail@mail.com  |     2     | chrysler  | good chrysler as new


Ik wil nu per Emailadres een lijstje weergeven van alle Descriptions bij dat emailadres, als volgt:

From: test@test.com
Car: chevrolet, in new condition
Car: very nice chrysler, $ 500
----------------------------------

From: mail@mail.com
Car: good chrysler as new
----------------------------------

Nu heb ik daar de volgende code voor bedacht:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
last_user = " "
            
While NOT rsResultaat.EOF
    If last_user <> rsResultaat("Email") Then
        body = ""
    End If
    
    body = body & rsResultaat("omschrijving") & "<br>"
    
    If last_user <> rsResultaat("Email") Then
        response.write "From: " & rsResultaat("email") & "<br>"
        response.write "Car: " & body & "---------------------------------" & "<br>"
    Else
        body = body & rsResultaat("omschrijving") & "<br>"
    End If
        last_user = rsResultaat("email")

 rsResultaat.MoveNext
Wend


Echter ik krijg met geen mogelijkheid voor elkaar, dat als een e-mailadres meerdere keren voorkomt, alle Descriptions bij dat e-mailadres worden geplaatst.

Met bovenstaande code wordt het lijstje van mail@mail.com wel goed weergegeven, omdat het maar 1 resultaat betreft, maar het andere lijstje toont alleen de laatste description, terwijl ik toch aangeef in de code wat er moet gebeuren, als last_user en de waarde van e-mail gelijk zijn.

Om de een of andere reden wordt de body niet bij elkaar gevoegd.

Pay peanuts get monkeys !


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

ASP.NET Visual Basic:
1
2
3
4
5
    If last_user <> rsResultaat("Email") Then
        body = ""
    End If
    
    body = body & rsResultaat("omschrijving") & "<br>"

Wat denk je dat dit doet? Telkens als je script een nieuw mailadres ziet, dan gooit ie je body leeg. :P

[ Voor 171% gewijzigd door NMe op 02-02-2005 22:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ik heb hem al gesorteerd staan op e-mailadres, anders werkt het inderdaad niet.

Edit: Stiekem ediiten he ? ;)

[ Voor 8% gewijzigd door Dutch_guy op 02-02-2005 22:09 ]

Pay peanuts get monkeys !


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
-NMe- schreef op woensdag 02 februari 2005 @ 22:07:
ASP.NET Visual Basic:
1
2
3
4
5
    If last_user <> rsResultaat("Email") Then
        body = ""
    End If
    
    body = body & rsResultaat("omschrijving") & "<br>"

Wat denk je dat dit doet? Telkens als je script een nieuw mailadres ziet, dan gooit ie je body leeg. :P
Dat is ook de bedoeling, want als er 2 dezelfde e-mailadressen voorbij komen, dan voert ie die code niet uit. Dan moet de body namelijk aangevuld worden.

Pay peanuts get monkeys !


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Op die manier hou je toch maar de body van één adres over aan het eind? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Met deze code krijg ik dit:

From: test@test.com
Car: chevrolet, in new condition
----------------------------------

From: mail@mail.com
Car: good chrysler as new
----------------------------------

Oftewel ik mis deze:
Car: very nice chrysler, $ 500

Dus worden de body's niet aan elkaar geplakt en ik kom er maar niet achter waarom niet.

Pay peanuts get monkeys !


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
last_user = " "
            
While NOT rsResultaat.EOF
    body = body & rsResultaat("omschrijving") & "<br>"
    
    If last_user <> rsResultaat("Email") Then
        response.write "From: " & last_user & "<br>"
        response.write "Car: " & body & "---------------------------------<br>"
        body = ""
    End If
    last_user = rsResultaat("email")

 rsResultaat.MoveNext
Wend

Zo?

[ Voor 79% gewijzigd door NMe op 02-02-2005 23:17 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Helaas niet, zelfde resultaat als wat ik had bedacht.

Pay peanuts get monkeys !


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
ASP:
1
2
3
4
5
6
7
8
9
10
dim strEmail : strEmail = null
dim strBody : strBody = null
While Not objRS.Eof
   If objRS("email") <> strEmail Then
      strBody = strBody & objRS("beschrijving")
       strEmail = objRS("email")
    End If
    strBody = strBody & objRS("email")
  objRS.MoveNext
Wend


zoiets zou het zo ff uit mijn hoofd moeten doen...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Werkt helaas niet.

Stom eigenlijk, want volgens mij moet mijn code gewoon werken. Enige probleem is dat de body's niet aan elkaar worden geplakt.

Pay peanuts get monkeys !


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-05 08:48

Janoz

Moderator Devschuur®

!litemod

Het rpobleem is dat je je mail opstelt waneer je voor het eerst een gebruiker tegen komt.

Daarnaa breid je de body wel uit, maar zodra een volgende gebruiker komt maak je een nieuwe body aan en is de uitgebreide body verloren gegaan.

Handigste in dit soort situaties is om stapje voor stapje na te gaan wat er exact gebeurt.

Een oplossing is om alle acties in andere volgordes te zetten. Append de mailtjes todat je een nieuwe gebruiker tegenkomt. Dan het mailtje afronden en een nieuwe aanmaken. Je moet er voor zorgen dat er niet 2 blokken zijn die iets doen bij een nieuwe gebruiker, maar dat je heel duidelijk 'je oude troep opruimt en dan een nieuwe begint'

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Een andere optie is om je beginsituatie zodanig te maken dat je niet gelijk een "verandering" constateert.
code:
1
2
3
4
5
6
7
8
9
10
11
12
If Not oRS.EOF Then
    last_user = oRS("Email")
End If
Do While Not oRS.Eof
   ' If last user anders dan huidige, plaats de gegevens
   ' en Reset Body

   ' Voeg nieuw deel toe aan body

   ' Next
Loop
' Plaats body indien deze niet leeg is, want de laatste is nog niet verwerkt


Ik neem aan dat je er hiermee wel komt

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Gelukt met de tips van bovenstaande 2 posts. :)

Even helemaal opnieuw begonnen.

Dit is het geworden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
While Not rsResultaat.Eof
    
    If last_user <> rsResultaat("email") Then
    body = rsResultaat("omschrijving")
        response.write "To: " & rsResultaat("email") & "<br>"
    Else
         body = rsResultaat("omschrijving")
    End If
    
    response.write body & "<br>"
    
    last_user = rsResultaat("email")
    
    rsResultaat.MoveNext    

Wend


Me happy ! :)

Pay peanuts get monkeys !


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-05 08:48

Janoz

Moderator Devschuur®

!litemod

Ik zie nog steeds optimalisaties. Het enige verschil tussen de ene mogelijkheid en de andere is het afdrukken van een header. In beide ken je omschrijving toe aan body. Vervolgens wordt body gewoon afgedrukt.

De volgende code doet exact hetzelfde.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
While Not rsResultaat.Eof
    
    If last_user <> rsResultaat("email") Then
         response.write "To: " & rsResultaat("email") & "<br>"
    End If
    
    response.write rsResultaat("omschrijving") & "<br>"
    
    last_user = rsResultaat("email")
    
    rsResultaat.MoveNext    

Wend

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ik had wellicht iets te snel gepost, want inderdaad dit is weer net wat mooier.

Echter ik zit evengoed met een probleem...

De bedoeling is namelijk dat ik deze resultaten ga mailen, echter dat gaat met deze code niet zomaar lukken ben ik achter gekomen.

Ik heb nu dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
While Not rsResultaat.Eof

Set Mail        = Server.CreateObject("CDONTS.NewMail")
Mail.From       = "info@test.nl"
Mail.Subject    = "TEST"
Mail.BodyFormat = 0 
Mail.MailFormat = 0 
    
    If last_user <> rsResultaat("email") Then
        Mail.To = rsResultaat("email")  
    End If

    Mail.Body = rsResultaat("omschrijving") & "<br>"
    
    Mail.Send
    Set mail = Nothing

    last_user = rsResultaat("email")
    
    rsResultaat.MoveNext
    
Wend


Je raad het al de bodytekst wordt weer niet aangevuld.

Pay peanuts get monkeys !


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-05 08:48

Janoz

Moderator Devschuur®

!litemod

Hiervoor geld weer hetzelfde.
1. Waar wordt de omschrijving toegevoegd aan de body?
2. Wordt de mail gestuurd na de laatste toegevoegde omschrijving?
3. Hoe vaak maak je een mail aan? 1x per record, of 1x per persoon?


Al de dingen die bij 1 mail horen en niet bij elke omschrijving zul je per gebruiker moeten doen. Deze zul je dus juist binnen zo'n if statement opnemen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Nu heb ik toch al heel wat mooie dingen gemaakt, maar ik krijg deze gewoon niet aan de praat.

Kan het egeinlijk wel met de query die ik gebruik ?

Ik heb namelijk wel eerder zoiets gemaakt en haalde toen uit de ene query de zoekresultaten op en uit de andere de gebruikers, dat werkte wel, maar lijkt mij niet echt efficient.

Pay peanuts get monkeys !


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het kan prima met deze query, je moet gewoon de zaken in je loop handiger aanpakken. Kijk nog eens goed naar het antwoord wat ik eerder gaf, volgens mij kun je daar zowel voor het afdrukken als voor het verzenden van e-mail gebruik van maken.

Wat je nu doet is steeds voor ieder record een e-mail versturen, terwijl je dat alleen wil doen als het e-mailadres wijzigt. Als je het op die manier doet, hoef je alleen nog na de loop te controleren of je nog een e-mail klaar hebt staan en die ook versturen. Probeer vooral het KISS principe erop na te houden. :)

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Dutch_guy schreef op donderdag 03 februari 2005 @ 14:58:
Werkt helaas niet.

Stom eigenlijk, want volgens mij moet mijn code gewoon werken. Enige probleem is dat de body's niet aan elkaar worden geplakt.
Hmm, zie dat ik zelf een aantal foutjes gemaakt heb... maar het ging mij eigenlijk meer om het aantonen van de routine... Je moet niet alles maar klakkeloos copy-pasten, maar ook zelf een beetje kijken naar wat er neer gezet wordt...

ASP:
1
2
3
4
5
6
7
8
9
10
dim strEmail : strEmail = ""
While Not objRS.Eof
   If LCase(objRS("email")) <> LCase(strEmail) Then
      Response.Write("-----------")
      Response.Write(objRS("email") & "<br />")
      strEmail = objRS("email")
    End If
    strBody = strBody & objRS("beschrijving") & "<br />"
  objRS.MoveNext
Wend


bovenstaand scriptje zou het wel moeten doen (kan zijn dat er een haakje niet helemaal goed staat, maar dat kun je zelf wel debuggen neem ik aan)... en ik weet niet of het al voorbij is gekomen.. maar je moet je sqlquery in ieder geval sorteren op emailadres...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Zover had ik hem inmiddels al gekregen.

Huidige probleem met deze code is dat deze niet zomaar gebruikt kan worden om mailtjes te versturen.

Dus de resultaten van een persoon in 1 mailtje plaatsen en versturen.

Zoals ik hier probeer te doen:

[rml]Dutch_guy in "[ ASP] String in loop aanvullen"[/rml]

Pay peanuts get monkeys !


  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
Ok, vooruitgang: :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set Mail        = Server.CreateObject("CDONTS.NewMail")
Mail.From       = "info@test.nl"
Mail.Subject    = "TEST"
Mail.BodyFormat = 0 
Mail.MailFormat = 0 

if not rsResultaat.Eof Then
last_user = rsResultaat("email")

While Not rsResultaat.Eof
    If last_user <> rsResultaat("email") Then
        Mail.Body = body
        Mail.To = last_user   
        Mail.Send
       body = ""
    End If
    last_user = rsResultaat("email")
    body = body & rsResultaat("omschrijving") & "<br>"
rsResultaat.MoveNext
Wend

End if

Enige probleempje nu is dat de laatste persoon in de recordset niet gemaild wordt.

Immers, de volgende regel is dan nooit van toepassing:

If last_user <> rsResultaat("email") Then

[ Voor 16% gewijzigd door Dutch_guy op 07-02-2005 17:23 ]

Pay peanuts get monkeys !


Verwijderd

Direct na de while-lus nog een Mail.Send opnemen. Dat scheelt een hoop... :)
Er wel even op letten dat dan je last_user niet leeg is, anders stuur je een bogus mailtje naar niemand wanneer je recordset toevallig een keer leeg is.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
:X :| Tjonge, ik voel mij licht onbegrepen. Ik heb pas 2x gewaarschuwd dat je aan het einde nog moet checken of je een mailtje hebt om te sturen. Is het mijn stijl van antwoorden? :Y)

Hmm, misschien wil ik dat wel niet weten... ;)

  • Dutch_guy
  • Registratie: September 2001
  • Laatst online: 20-04 14:47
bigbeng schreef op dinsdag 08 februari 2005 @ 00:12:
:X :| Tjonge, ik voel mij licht onbegrepen. Ik heb pas 2x gewaarschuwd dat je aan het einde nog moet checken of je een mailtje hebt om te sturen. Is het mijn stijl van antwoorden? :Y)

Hmm, misschien wil ik dat wel niet weten... ;)
Nee mijn stijl van te moeilijk denken. ;)

Bedankt iedereen voor de hulp.

Pay peanuts get monkeys !

Pagina: 1