Avatar billede lund_dk Praktikant
11. januar 2007 - 14:02 Der er 1 kommentar og
1 løsning

Kan dette gøres nemmere?

Hej!

Jeg har denne kode, som går ned og henter nogle data i en MS SQL database.

Problemet er bare, den tabel der hentes fra, har over 200.000 poster, og med den kode jeg har her, så går jeg ind og henter data op til 36 gange.

36 gange søgning i database med over 200.000 poster, giver en lidt lang load tid..

Kan det løses på en nemmere måde..?





--------------------------------- K O D E ------------------

<%
Function UgeTilDato(aar,uge)
dim januar1,ugedagjan1,mandaguge1,mandagugex
    januar1 = DateSerial(aar, 1, 1)
    ugedagjan1 = Weekday(januar1, vbMonday)
    if ugedagjan1 <= 4 then
        ' 1. januar er i uge 1
        mandaguge1 = DateAdd("d", -ugedagjan1+1, januar1)
    else
        ' 1. januar er i sidste uge foregående år
        mandaguge1 = DateAdd("d", 7-ugedagjan1+1, januar1)
    end if
    mandagugex = DateAdd("ww", uge-1, mandaguge1)
    UgeTilDato = mandagugex
End Function

Function Ordrer(strSelskab,strDato)
strDato = Year(strDato) & "-" & Month(strDato) & "-" & Day(strDato)
if strSelskab = 0 then
set rs = Conn.Execute("select count(*) as antal from dbo.[3S Company A_S$Sales Invoice Header] [3S Company A_S$Sales Invoice Header] WHERE ([Sell-to Customer No_] = '45' OR [Sell-to Customer No_] = '46' OR [Sell-to Customer No_] = '47' OR [Sell-to Customer No_] = '48' OR [Sell-to Customer No_] = '49') and [Document Date] = '" & strDato & "'")
else
set rs = Conn.Execute("select count(*) as antal from dbo.[3S Company A_S$Sales Invoice Header] [3S Company A_S$Sales Invoice Header] WHERE [Sell-to Customer No_] = '" & strSelskab & "' and [Document Date] = '" & strDato & "'")
end if
Ordrer = rs("antal")
rs.close
set rs = nothing
End Function

Function Ugenr( MyDate )
  Ugenr = DatePart("ww", MyDate, vbMonday, vbFirstFourDays)
  If (Ugenr > 52) Then
    If (DatePart("ww", DateAdd("d", 7, MyDate), vbMonday, vbFirstFourDays) = 2) Then Ugenr = 1 End If
  End If
End Function

%>
<table cellpadding="2" cellspacing="1" class="weektable">
    <tr>
        <th style="">Denne uge</th>
        <th style="">DK</th>
        <th style="">SE</th>
        <th style="">NO</th>
        <th style="">KAS</th>
        <th style="">SP</th>
        <th style="">I alt</th>
    </tr>
<%
'mandag = UgeTilDato(2007,2)
mandag = UgeTilDato(2007,Ugenr(date()))
for f=0 to 6
dato = dateadd("d",f,mandag)
if datediff("d",dato,date) >=0 then

DK = Ordrer("45",dato)
SE = Ordrer("46",dato)
NO = Ordrer("47",dato)
KAS = Ordrer("48",dato)
SP = Ordrer("49",dato)
ALLE = Ordrer("0",dato)

DK1 =     DK1 + DK
SE1 =     SE1 + SE
NO1 =    NO1 + NO
KAS1 =     KAS1 + KAS
SP1 =     SP1 + SP
ALLE1 = ALLE1 + ALLE
%>
    <tr>
        <td><%=WeekdayName(weekday(dato,2), false, 2)%></td>
        <td><%=DK%></td>
        <td><%=SE%></td>
        <td><%=NO%></td>
        <td><%=KAS%></td>
        <td><%=SP%></td>
        <td><%=ALLE%></td>
    </tr>
    <%
    end if
    next
    %>
    <tr>
        <td class="sumbund"><em>I alt</em></td>
        <td class="sumbund"><em><%=DK1%></em></td>
        <td class="sumbund"><em><%=SE1%></em></td>
        <td class="sumbund"><em><%=NO1%></em></td>
        <td class="sumbund"><em><%=KAS1%></em></td>
        <td class="sumbund"><em><%=SP1%></em></td>
        <td class="sumbund"><em><%=ALLE1%></em></td>
    </tr>
</table>
Avatar billede kinderaeg Nybegynder
12. januar 2007 - 13:48 #1
Du kan vel nøjes med en enkelt søgning, hvor du grupperer efter de to kolonner du ellers har i dit where-clause:

select [Sell-to Customer No_], [Document Date], count(*) as antal from dbo.[3S Company A_S$Sales Invoice Header] [3S Company A_S$Sales Invoice Header] Group By [Sell-to Customer No_], [Document Date]
Avatar billede lund_dk Praktikant
23. januar 2007 - 18:56 #2
lukker igen.. kunne ikke rigtig bruge 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
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