---
title: "Optimering av do-loop"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/114593-optimering-av-do-loop"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "martinpartin"
published: "2004-10-28T09:25:56.000Z"
updated: "2004-10-28T10:06:35.000Z"
replies: 14
views: 321
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/114593-optimering-av-do-loop"
---

# Optimering av do-loop

## #1 — martinpartin, 2004-10-28T09:25Z

Hej, Skulle behöva tips & ideér hur man optimera den Do-loop till så lite kod som möjligt och så snabb så möjligt...

Ska köra 38 000 ggr... är det problem ? har testat med 50 st än så länge... 

Tankar o tips ang. detta mottages med glädje.

```

Do Until RS.EOF 

I_counter = i_counter + 1

If IsNull(RS("notification")) then
   str_noti = Cstr("-")
Else
   str_noti = Cstr(RS("Notification"))
End If
If IsNull(RS("Title")) then
   str_Title = Cstr("-")
Else
   str_Title = Cstr(RS("Title"))
End If

If IsNull(RS("Phone2")) then
   str_phone2 = Cstr("-")
Else
   str_phone2 = Cstr(RS("Phone2"))
End If

Set objContact = adsDomain.Create("contact", "cn=" & Cstr(RS("Name")))

objContact.put "DisplayName", Cstr(RS("Name"))
objContact.SetInfo
objContact.put "mail", Cstr(RS("Mail"))
objContact.put "mailNickname", Cstr(RS("Memoid"))
objContact.SetInfo
objContact.put "proxyAddresses", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "targetAddress", "SMTP:"& Cstr(RS("Mail")) &""
objContact.SetInfo
objContact.put "telephoneNumber", Cstr(RS("Phone1"))
objContact.put "Homephone", str_phone2
objContact.put "Department", Cstr(RS("Department"))
objContact.put "Title", str_title
objContact.put "Info", str_noti
objContact.SetInfo

Response.Write("Contact created!("& i_counter &")<BR>")

RS.MoveNext
Loop
```

Permalänk: https://www.webforum.nu/p/114593

## #2 — @nders, 2004-10-28T09:29Z

Eftersom jag inte har en aning om vad *adsDomain.Create()* håller på med, så är det lite svårt att svara på frågan.

Vad avgör var du har placerat *objContact.SetInfo* i koden?

Permalänk: https://www.webforum.nu/p/1469654

## #3 — martinpartin, 2004-10-28T09:34Z

Så... fick lite felmeddelanden innan när jag körde utan o bryta av med den ibland..  

Men tog bort alla utom än o det fungerade ändå..  :) 

Hämtar från access DB och sedan lägger objektet in information i Active Directory

Ny kod:

```

Do Until RS.EOF 

I_counter = i_counter + 1

If IsNull(RS("notification")) then
   str_noti = Cstr("-")
Else
   str_noti = Cstr(RS("Notification"))
End If
If IsNull(RS("Title")) then
   str_Title = Cstr("-")
Else
   str_Title = Cstr(RS("Title"))
End If

If IsNull(RS("Phone2")) then
   str_phone2 = Cstr("-")
Else
   str_phone2 = Cstr(RS("Phone2"))
End If

Set objContact = adsDomain.Create("contact", "cn=" & Cstr(RS("Name")))

objContact.put "DisplayName", Cstr(RS("Name"))
objContact.put "mail", Cstr(RS("Mail"))
objContact.put "mailNickname", Cstr(RS("Memoid"))
objContact.put "proxyAddresses", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "targetAddress", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "telephoneNumber", Cstr(RS("Phone1"))
objContact.put "Homephone", str_phone2
objContact.put "Department", Cstr(RS("Department"))
objContact.put "Title", str_title
objContact.put "Info", str_noti
objContact.SetInfo

Response.Write("Contact created!("& i_counter &")<BR>")

RS.MoveNext
Loop
```

Permalänk: https://www.webforum.nu/p/1469658

## #4 — OveRRidE, 2004-10-28T09:34Z

Använd *while* istället för *Do Until*. Det skall visst vara mer prestandasnålt. 

```
while not rs.eof 
   'baluba
rs.movenext
wend
```

Permalänk: https://www.webforum.nu/p/1469659

## #5 — martinpartin, 2004-10-28T09:35Z

Set adsDomain = GetObject("LDAP://OU=MEMODir, dc=\*\*\*\*,dc=\*\*\*\*")

Permalänk: https://www.webforum.nu/p/1469661

## #6 — martinpartin, 2004-10-28T09:39Z

Ok.. litar på dig override.. tack ! Fler tips ?

```

While not RS.eof 

I_counter = i_counter + 1

If IsNull(RS("notification")) then
   str_noti = Cstr("-")
Else
   str_noti = Cstr(RS("Notification"))
End If
If IsNull(RS("Title")) then
   str_Title = Cstr("-")
Else
   str_Title = Cstr(RS("Title"))
End If

If IsNull(RS("Phone2")) then
   str_phone2 = Cstr("-")
Else
   str_phone2 = Cstr(RS("Phone2"))
End If

Set objContact = adsDomain.Create("contact", "cn=" & Cstr(RS("Name")))

objContact.put "DisplayName", Cstr(RS("Name"))
objContact.put "mail", Cstr(RS("Mail"))
objContact.put "mailNickname", Cstr(RS("Memoid"))
objContact.put "proxyAddresses", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "targetAddress", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "telephoneNumber", Cstr(RS("Phone1"))
objContact.put "Homephone", str_phone2
objContact.put "Department", Cstr(RS("Department"))
objContact.put "Title", str_title
objContact.put "Info", str_noti
objContact.SetInfo

Response.Write("Contact created!("& i_counter &")<BR>")

RS.movenext
Wend
```

Permalänk: https://www.webforum.nu/p/1469664

## #7 — martinpartin, 2004-10-28T09:44Z

Den behöver inte sätta "-" .. kan fortfarande vara Null...
Ville slippa felmeddelande från Cstr 
Men det måste vara en str när man sätter in den i AD't

```

If IsNull(RS("Phone2")) then
   str_phone2 = Cstr("-")
Else
   str_phone2 = Cstr(RS("Phone2"))
End If
```

Permalänk: https://www.webforum.nu/p/1469668

## #8 — @nders, 2004-10-28T09:44Z

Hur ofta ska du köra den här koden?

Om det är en engångsföreteelse så tycker jag du ska brassa på ordentligt i Server.ScriptTimeout, och sedan köra så det ryker. (och hålla tummarna... ;) )

Permalänk: https://www.webforum.nu/p/1469669

## #9 — @nders, 2004-10-28T09:47Z

> **martinpartin skrev:**
>
> Den behöver inte sätta "-" .. kan fortfarande vara Null...
> Ville slippa felmeddelande från Cstr 
> Men det måste vara en str när man sätter in den i AD't

Ok. Då räcker det här:

```
Do Until RS.EOF 

I_counter = i_counter + 1

Set objContact = adsDomain.Create("contact", "cn=" & Cstr(RS("Name")))

objContact.put "DisplayName", Cstr(RS("Name"))
objContact.put "mail", Cstr(RS("Mail"))
objContact.put "mailNickname", Cstr(RS("Memoid"))
objContact.put "proxyAddresses", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "targetAddress", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "telephoneNumber", Cstr(RS("Phone1"))
objContact.put "Homephone", "" & RS("Phone2")
objContact.put "Department", Cstr(RS("Department"))
objContact.put "Title", "" & RS("Title")
objContact.put "Info", "" & RS("notification")
objContact.SetInfo

Response.Write("Contact created!("& i_counter &")<BR>")

RS.MoveNext
Loop
```

Du kan lägga **"" &** framför alla värden du hämtar direkt ur recordsetet, så undviker du null.

mvh

Permalänk: https://www.webforum.nu/p/1469672

## #10 — martinpartin, 2004-10-28T09:48Z

en gång i veckan ca :) ska försöka lösa det inkrementellt på nått sätt sen..   Server.Scriptout.. Har inte ens tänkt så långt.. Ska kolla på den. Behövs nog.. hmm. :)

Permalänk: https://www.webforum.nu/p/1469674

## #11 — martinpartin, 2004-10-28T09:48Z

ahhh tack för det sista anders

Permalänk: https://www.webforum.nu/p/1469675

## #12 — Erik Juhlin, 2004-10-28T09:50Z

Indentera koden i loopen så den blir tydligare...

Istället för alla IsNull prylar:

```
str_noti = RS("Notification") & ""
str_Title = RS("Title") & ""
str_phone2 = RS("Phone2") & ""
```

Permalänk: https://www.webforum.nu/p/1469678

## #13 — martinpartin, 2004-10-28T09:55Z

Fungerade inte med... & ""

Fick ett meddelande som inte ens microsoft visste..

Permalänk: https://www.webforum.nu/p/1469680

## #14 — martinpartin, 2004-10-28T09:59Z

Körde med detta och det funka

objContact.put "Info", RS("Notification") & " "

Permalänk: https://www.webforum.nu/p/1469681

## #15 — martinpartin, 2004-10-28T10:06Z

Så detta alltså.. känns faktiskt som det går snabbare !! :)

```

While not RS.eof 
I_counter = i_counter + 1
Set objContact = adsDomain.Create("contact", "cn=" & Cstr(RS("Name")))
objContact.put "DisplayName", Cstr(RS("Name"))
objContact.put "mail", Cstr(RS("Mail"))
objContact.put "mailNickname", Cstr(RS("Memoid"))
objContact.put "proxyAddresses", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "targetAddress", "SMTP:"& Cstr(RS("Mail")) &""
objContact.put "telephoneNumber", Cstr(RS("Phone1"))
objContact.put "Homephone", RS("Phone2") & " "
objContact.put "Department", Cstr(RS("Department"))
objContact.put "Title", "" & RS("Title") & " "
objContact.put "Info", RS("Notification") & " "
objContact.SetInfo
Response.Write("Contact created!("& i_counter &")<BR>")
RS.movenext
Wend
```

Permalänk: https://www.webforum.nu/p/1469684

---

Tråden på webben: https://www.webforum.nu/amne/asp/114593-optimering-av-do-loop
