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?
14 svar · 295 visningar · startad av martinpartin
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
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?
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
Använd while istället för Do Until. Det skall visst vara mer prestandasnålt.
while not rs.eof
'baluba
rs.movenext
wend
Set adsDomain = GetObject("LDAP://OU=MEMODir, dc=****,dc=****")
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
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
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... ;) )
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
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. :)
ahhh tack för det sista anders
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") & ""
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