Avatar billede tille Nybegynder
12. september 2002 - 10:43 Der er 8 kommentarer og
1 løsning

Batchsize/cache - hjælp til langsom loop

jeg har en besværlig (læs: langsom) sql, det kan ikke laves om den er bare tung.

recordset jeg får ud af det, skal jeg så loope igennem med følgende kode:

(den skriver en linie i en tekstfil for hver 15 rækker i outputRS)

            If Not outputRS.EOF Then
              linenumber = 0
                unitnumber = 0
                outputRS.MoveFirst
                selectString = "SELECT UNIT "
                While Not outputRS.EOF
                    unitnumber = unitnumber + 1
                    selectString = selectString & "'" & outputRS!Father & "'"
                    If unitnumber > 15 Then
                        Print #2, selectString
                        selectString = "SELECT UNIT PLUS "
                        unitnumber = 0
                        linenumber = linenumber + 1
                    End If
                    outputRS.MoveNext
                    If Not outputRS.EOF Then
                        selectString = selectString & ", "
                    End If
                Wend
                If unitnumber > 0 Then
                    Print #2, selectString
                End If
                outputRS.MoveFirst
            End If

det kører utrolig langsom, da 'den' indlæser for små bidder af gangen. hvordan forøger jeg størrelsen på de bidder der indlæses?

på forhånd tak

peter
Avatar billede sjap Praktikant
12. september 2002 - 12:04 #1
Der er nogen ting jeg ikke helt forstår, men det skyldes måske jeg ikke helt har forstået koden.

Er der nogen grund til at åbne OutputRS som et recordset? Du læser jo ikke noget fra den. Du kan jo blot tælle hvor mange poster der er i recordsettet og så lave løkken ud fra en tæller.
Avatar billede tille Nybegynder
12. september 2002 - 12:56 #2
jo, jeg læser outputRS!father

det der skrives i filen er så 'SELECT UNIT 'father1', 'father2', etc'
Avatar billede sjap Praktikant
12. september 2002 - 18:18 #3
Det gør du jo også - my mistake :)
Avatar billede sjap Praktikant
12. september 2002 - 18:33 #4
Et rent gæt herfra: Vil koden ikke afvikles hurtigere, hvis du venter med at skrive til tekstfil, til du har fundet hele tekststrengen? Så skal du kun skrive én gang.
Avatar billede tille Nybegynder
13. september 2002 - 09:16 #5
det er ikke I/O på tekstfilen der tager tiden, jeg har prøvet helt at udelade skrivningen
Avatar billede sjap Praktikant
13. september 2002 - 10:25 #6
Så har jeg lige et nyt spørgsmål:

Hvad skal "linenumber" bruges til?

Det bruger nok ikke så meget tid.
Avatar billede sjap Praktikant
13. september 2002 - 10:49 #7
Tille

Hermed et forsøg på at tune While sætningen lidt. Da jeg ikke helt kender OutputRS er det ikke sikkert den holder i landsretten, men det er i hvert tilfælde et forsøg på at speede tingene lidt op. Hvis du orker, så lad mig høre hvordan det går.

    While Not outputRS.EOF
        for unitnumber = 1 to 14
            selectString = selectString & "'" & outputRS!Father & "'"
            outputRS.MoveNext
            selectString = selectString & ", "
        Next unitnumber
        selectString = selectString & "'" & outputRS!Father & "'"
        outputRS.MoveNext
        If unitnumber > 15 Then
            Print #2, selectString
            selectString = "SELECT UNIT PLUS "
            unitnumber = 0
            linenumber = linenumber + 1
        end if
    Wend
Avatar billede sjap Praktikant
13. september 2002 - 11:11 #8
Der var selvfølgelig allerede endnu en lille forbedring:

    While Not outputRS.EOF
        for unitnumber = 1 to 14
            selectString = selectString & "'" & outputRS!Father & "', "
            outputRS.MoveNext
        Next unitnumber
        selectString = selectString & "'" & outputRS!Father & "'"
        outputRS.MoveNext
        If unitnumber > 15 Then
            Print #2, selectString
            selectString = "SELECT UNIT PLUS "
            unitnumber = 0
            linenumber = linenumber + 1
        end if
    Wend
Avatar billede tille Nybegynder
24. september 2002 - 13:53 #9
point til superjap for at prøve, intet af det virkede, jeg lavede et par mellemtabeller og det hjalp noget på det
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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