Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Snabbare loop?

Postades av 2007-12-11 20:17:44 - Michael Ziegler, i forum access, Tråden har 7 Kommentarer och lästs av 1086 personer

Jag har en tabell i Access som jag med ett SQL-anrop tar ut ett recordset till Excel-VBA, därefter loopar jag igenom setet, kollare lite saker och ökar en räknare (som jag återställer ibland) för att sedan uppdatera tabellen med räknarens värden för den posten, nån som fattar!??! :-) Se nedan!

Set rsData = dbs.OpenRecordset(Select SQL-sträng)
Do While Not rsData.EOF
If strLastCode <> rsData.Fields("Code") Then
lngValue = 1
Else
lngValue = lngValue + 1
End If

dbs.Execute (Update SQL-sträng)

rsData.MoveNext
Loop
rsData.Close
Set rsData = Nothing

Min fråga är, om någon har något enkelt tips på hur detta går att snabba upp, då loopen idag tar närmare 5 timmar!!!

/Michael


Svara

Sv: Snabbare loop?

Postades av 2007-12-11 20:50:45 - Pelle Johansson

Tre förslag:

1. If strLastCode <> rsData.Fields("Code") Then

Ersätt det med rsData(3) - om nu code-fältet är 3:e kolumnen

Du verkar göra en rekursiv loop. Berätta vad det är du hämtar ut för det kanske går att skriva om den så att din sql-sats går mycket snabbare och levererar mycket färre poster att bearbeta. Det du gör är troligtvis en full-tablescan, dvs tittar igenom varenda post flera gånger och gör därför kanske samma sak flera gånger.

tex:
strLastCode = 52
sql = "update tabell set värde = x where code <> " & strLastCode

En annan variant är att konvertera Access till MS-SQL Server Express vilket är en äkta databasmotor och gör jobbet mycket fortare. Inte minst kan du skapa lagrade procedurer och något som kallas cursors för att i en enda körning uppdatera datat eller som i detta fall en rekursiv loop.


Svara

Sv:Snabbare loop?

Postades av 2007-12-11 21:13:48 - Michael Ziegler

Datan i tabellen ser ut enligt nedan:
1, 0000006, A
1, 0000006, B
1, 0000006, C
1, 0000007, D
1, 0000010, A
1, 0000010, B
2, 0000006, A
2, 0000010, C
osv totalt ca.17000 poster

När första eller andra fältet skiljer sig mellan två poster skall räknaren börja om. I ovanstående
fall skall räknaren få värdena 1,2,3,1,1,2,1,1
Räknaren skriver jag sedan tillbaka med (för första posten)
"Update tabell set counter = räknare where fältA='A' and fältB='0000006' and fältC='A'"

Jag loopar igenom hela setet, men varje post endast en gång.


Svara

Sv: Snabbare loop?

Postades av 2007-12-12 08:51:47 - Martin Adrian

Är fältC unikt för varje grupp?

I såfall kan du kanske något sånt här blir snabbare:
UPDATE tabell as t1
SET counter = (
SELECT Count(*)
FROM tabell as t2
WHERE t1.fältA = t2.fältA AND t1.fältB = t2.fältB AND t2.fältC <= t1.fältC
)


Svara

Sv:Snabbare loop?

Postades av 2007-12-12 09:32:37 - Tomas Granlund

Kan du inte skippa att köra den specifika UPDATE-queryn separat och istället modifiera recordsetet du redan har?

         rsdata.Edit
         rsdata.Fields("DetForstaFaltet") = lngValue
         rsdata.Update
         rsdata.MoveNext


Svara

Sv: Snabbare loop?

Postades av 2007-12-12 10:40:06 - Ola Lindfeldt

Kör som Thomas G föreslår och ett enda genomlöp i posterna,
(om värdet är samma, öka med ett, uppdatera. Annars nollställ räknaren).
Det ska räcka.
Detta borde vara avklarat på några sekunder.


Svara

Sv:Snabbare loop?

Postades av 2007-12-12 13:37:03 - Pelle Johansson

Glöm inte en sista feedback så vi vet vad som hände ;)


Svara

Sv:Snabbare loop?

Postades av 2007-12-12 14:48:21 - Michael Ziegler

Tack för tipsen, verkar fungera!!


Svara

Nyligen

  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 864
27 962
271 767
438
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies