Avatar billede jakobscafe Nybegynder
10. februar 2006 - 17:04 Der er 14 kommentarer og
1 løsning

Opdater ca 100 specifikke records (asp/access)

Jeg har en liste (array) over record-id og en true/false.
Jeg vil gerne opdatere hver record til nyeste tilstand (true/false) - Teoretisk:
update database
for x=1 to 100
set ledig=array(x) 'true eller false
where recordid=x
next

Men sådan er virkeligheden ikke, hvordan gør man?
Avatar billede nielle Nybegynder
10. februar 2006 - 17:54 #1
Skal alle records i arrayet sættes til samme værdi? Altså enten alle sammen til true eller allesammen til false? Og hvor kommer Acces egentligt ind i sammenhængen?
Avatar billede jakobscafe Nybegynder
10. februar 2006 - 21:27 #2
access = databasen (ligger i en mdb fil)
Nej, hver recordid har vilkårlig værdi (true eller false) som er sat i array'et
recordid ledig
1        true
2        true
3        false

f.eks.

Så vil jeg på et tidspunkt ændre værdierne, og har i arrayet styr på hvilke recordid'er der skal være true eller false.
1    true
2    false
3    false

f.eks.
Avatar billede nielle Nybegynder
10. februar 2006 - 21:32 #3
Vil det sige at for f.eks. id=42 så er array(id)=false det samme som at i Access-databasen skal feltet ledig sættes til false?
Avatar billede jakobscafe Nybegynder
10. februar 2006 - 22:02 #4
netop.
Avatar billede nielle Nybegynder
10. februar 2006 - 22:15 #5
Noget i denne stil:

For idx=LBound(ditArray) To UBound(ditArray)
    sql = "UPDATE dinTabel SET ledig="

    If ditArray = True Then
        sql = sql & "True"
    Else
        sql = sql & "False"
    End If

    sql = sql & " WHERE id=" & idx

    Conn.Execute(sql)
Next
Avatar billede jakobscafe Nybegynder
10. februar 2006 - 22:18 #6
ja - men så skyder jeg 100 SQL kommandoer af. Er der ikke en smartere måde, f.eks. via recordset? - så kunne jeg ændre mine 100 rækker, og derefter skyde dem samlet af?
Men det er måske ligemeget med de 100 gange SQL+execute kommandoer? (performance, fejl undervej osv)
Avatar billede nielle Nybegynder
10. februar 2006 - 22:23 #7
Performance afhænger af hvor tit du skal gøre det.
Avatar billede nielle Nybegynder
10. februar 2006 - 22:27 #8
Men, jo det kan da gøres på andre måder:

idTrue = ""
idFalse = ""

For idx=LBound(ditArray) To UBound(ditArray)
    If ditArray = True Then
    If idTrue <> "" Then idTrue = idTrue & ","
        idTrue = idTrue & idx
    Else
    If idFalse <> "" Then idFalse = idFalse & ", "
        idFalse = idFalse & idx
    End If
Next

sql = "UPDATE dinTabel SET ledig=True WHERE id IN (" & idTrue ")"
Conn.Execute(sql)

sql = "UPDATE dinTabel SET ledig=False WHERE id IN (" & idFalse ")"
Conn.Execute(sql)
Avatar billede jakobscafe Nybegynder
10. februar 2006 - 22:34 #9
Ja, se det var snedigt! Den skal afprøves, kast et svar
Avatar billede nielle Nybegynder
10. februar 2006 - 22:35 #10
Først når den er afprøvet med succes :^)
Avatar billede nielle Nybegynder
20. februar 2006 - 19:00 #11
Hvad med noget respons?
Avatar billede jakobscafe Nybegynder
08. maj 2006 - 08:10 #12
Looper bare og bruger samme kommando 100 gange. Har ikke haft mulighed for at afprøve forslag 2. Men kast et svar, du bragte mig på sporet.
Avatar billede nielle Nybegynder
08. maj 2006 - 17:38 #13
Ok :^)
Avatar billede nielle Nybegynder
15. maj 2006 - 17:52 #14
Du mangler egentligt bare at acceptere svaret :^)
Avatar billede nielle Nybegynder
27. september 2006 - 20:11 #15
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester