Avatar billede zeusdk Nybegynder
19. februar 2003 - 18:32 Der er 13 kommentarer og
3 løsninger

Indsæt en dato i en sorteret dato-streng

Hej

Jeg har nogle kode, som henter nogle datoer op fra databasen og smider dem sorteret ind i en dropdown-box. Nu vil jeg også gerne, at der tilføjes en enkelt dato, som også skal blive indsat, så dropdown-boxen stadig er sorteret (altså så den ekstra dato bliver indsat i de eksisterende datoer, så de stadig er sorteret).

Det er underordnet for mig, hvor i forløbet den ekstra dato smides ind. Omhandlende ekstra dato findes i:
Session("henvisningDatoPublikation")

_______________________________________

Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
   
    strSQL = "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
        if isDate(rs("datopublish")) then
            myDates = myDates & rs("datopublish") & ", "
        End If
    rs.MoveNext
    Loop
   
    if not myDates = "" then
        myDates = left(myDates,len(myDates)-2)
    end if
   
    myDateArr = Split(myDates,",")

    dato = date ()
    datoSlut = DateAdd("yyyy",1,date)
    i = 0
    do while dato <= datoSlut
        if CDate(myDateArr(i)) <> CDate(dato) then
            'if i = 0 then
                  'Response.Write "<option selected value=""" & dato & """>" & dato & "</option>"
            'else
                  Response.Write "<option value=""" & dato & """>" & dato & "</option>"
            'end if
          else
            i = i + 1
            if i > ubound(myDateArr) then i = ubound(myDateArr)
          end if
        dato = dateAdd("d",1,dato)
    loop
    response.write "</select></p>"
Avatar billede somaliomar Praktikant
19. februar 2003 - 18:59 #1
Prøv at lave sætningen

    strSQL = "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

om til

    strExtraDato = Session("henvisningDatoPublikation")
    strSQL = "SELECT #" & strExtraDato & "# As datopublish FROM search UNION "
    strSQL = strSQL & "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"
Avatar billede somaliomar Praktikant
19. februar 2003 - 19:00 #2
Svar
Avatar billede eagleeye Praktikant
20. februar 2003 - 09:44 #3
Du skal havde lagt datoen ind i listen med datoer. Så du skal tjekke på om den er større eller mindre end den dato som er i recordsetet alt efter om du sortere stigene eller faldene..:


    datoSatInd = false
    do while not rs.EOF
      if datoSatInd = false AND CDate(Session("henvisningDatoPublikation")) < CDate(rs("datopublish")) then
        myDates = myDates & Session("henvisningDatoPublikation") & ", "
        datoSatInd = true
      end if
      if isDate(rs("datopublish")) then
          myDates = myDates & rs("datopublish") & ", "
      End If
    rs.MoveNext
    Loop
    'Hvis daoten ikke er sat ind endnu tilføj efter sidste dato.
    if datoSatInd = false then
      myDates = myDates & Session("henvisningDatoPublikation") & ", "
    end if



Eks vil virker hvis du ekvis har denne liste med datoer:
03-01-2003
05-01-2003
06-01-2003

Og vil indsætted denne dato: 04-01-2003
Avatar billede eagleeye Praktikant
20. februar 2003 - 09:54 #4
Er det módsat sortering så prøv denne hvor < er vendt til >


    datoSatInd = false
    do while not rs.EOF
      if datoSatInd = false AND CDate(Session("henvisningDatoPublikation")) > CDate(rs("datopublish")) then
        myDates = myDates & Session("henvisningDatoPublikation") & ", "
        datoSatInd = true
      end if
      if isDate(rs("datopublish")) then
          myDates = myDates & rs("datopublish") & ", "
      End If
    rs.MoveNext
    Loop
    'Hvis daoten ikke er sat ind endnu tilføj efter sidste dato.
    if datoSatInd = false then
      myDates = myDates & Session("henvisningDatoPublikation") & ", "
    end if



Eks vil virker hvis du ekvis har denne liste med datoer:
06-01-2003
05-01-2003
03-01-2003

Og vil indsætted denne dato: 04-01-2003
Avatar billede zeusdk Nybegynder
20. februar 2003 - 11:24 #5
>>eagleeye
Åhhh, jeg har udtrykt mig uklart. Min skyld...

Du har læst mit indlæg, som om, at der skulle tilføjes en dato til mydates, faktisk var datoen allerede i mydates, og derved kom den ikke til syne i dropdown-boxen. (Fordi dropdown-boxen kun viser de datoer, som ikke findes i mydates).

Så jeg prøver lige igen. Et eller andet sted i forløbet, skal den dato, som ligger i Session("henvisningDatoPublikation"), slettes fra mydates, hvorved den kommer til syne i dropdown-boxen.

(Jeg for fordobler lige pointene, så I ikke føler at jeres arbejde er spildt).
Avatar billede zeusdk Nybegynder
20. februar 2003 - 11:30 #6
Så da jeg skrev:
"Det er underordnet for mig, hvor i forløbet den ekstra dato smides ind."

Skulles jeg i stedet have skrevet:
"Det er underordnet for mig, hvor i forløbet den ekstra dato smides ind I DROPDOWN-BOXEN."

;)
Avatar billede somaliomar Praktikant
20. februar 2003 - 11:46 #7
zeusdk >> Har du prøvet mit eksempel?
Avatar billede zeusdk Nybegynder
20. februar 2003 - 11:47 #8
Ja, men det virkede ikke. Der komme ingen fejl-meddelelse. Den blev bare ved med at indlæse filen.
Avatar billede zeusdk Nybegynder
20. februar 2003 - 11:48 #9
>>somaliomar
Jo, der kom den vejl, at dit script var time-out'et.
Avatar billede somaliomar Praktikant
20. februar 2003 - 11:49 #10
Hvordan ser din kode ud når du får time-out?
Avatar billede zeusdk Nybegynder
20. februar 2003 - 11:55 #11
>>somaliomar
Således... hvis du med dit script ønsker at fjerne den dato, som findes Session("henvisningDatoPublikation", er du på rette vej. Hvorimod hvis du som eagleeye tilføjer den, så er du ikke på rette vej (som omtalt ovenstående). Datoen skal såmen bare slettes, så den kommer tilsyne i dropdown-boxen.

_______________

Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
   
    strExtraDato = Session("henvisningDatoPublikation")
    strSQL = "SELECT #" & strExtraDato & "# As datopublish FROM search UNION "
    strSQL = strSQL & "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
        if isDate(rs("datopublish")) then
            myDates = myDates & rs("datopublish") & ", "
        End If
    rs.MoveNext
    Loop
   
    if not myDates = "" then
        myDates = left(myDates,len(myDates)-2)
    end if
   
    myDateArr = Split(myDates,",")

    dato = date ()
    datoSlut = DateAdd("yyyy",1,date)
    i = 0
    do while dato <= datoSlut
        if CDate(myDateArr(i)) <> CDate(dato) then
            'if i = 0 then
                  'Response.Write "<option selected value=""" & dato & """>" & dato & "</option>"
            'else
                  Response.Write "<option value=""" & dato & """>" & dato & "</option>"
            'end if
          else
            i = i + 1
            if i > ubound(myDateArr) then i = ubound(myDateArr)
          end if
        dato = dateAdd("d",1,dato)
    loop
    response.write "</select></p>"
Avatar billede somaliomar Praktikant
20. februar 2003 - 12:05 #12
Du skriver, at datoen Session("henvisningDatoPublikation") er med i dropdown-listen. Det, du vil er, at du vil fjerne datoen fra dropdown-listen. Er det det du vil??
Avatar billede zeusdk Nybegynder
20. februar 2003 - 12:06 #13
Sådan skal koden se ud, hvis det skal gøres rigtigt. Desværre siger den:
Cannot use parentheses when calling a Sub

ved:
Replace(myDates, Session("henvisningDatoPublikation") & ", ", "")

Hvorfor?
___________________________

Set myConn=Server.CreateObject("ADODB.Connection")
myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))

strSQL = "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #" & Year(date) & "-" & month(date) & "-" & Day(date) & "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) & "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

set rs = myConn.execute(strSQL)

do while not rs.EOF
if isDate(rs("datopublish")) then
myDates = myDates & rs("datopublish") & ", "
End If
rs.MoveNext
Loop

if Session("henvisningStatus") = "opdatere" then

Replace(myDates, Session("henvisningDatoPublikation") & ", ", "")
Replace(myDates, Session("henvisningDatoPublikation"), "")

end if

if not myDates = "" then
    myDates = left(myDates,len(myDates)-2)
end if

myDateArr = Split(myDates,",")

dato = date ()
datoSlut = DateAdd("yyyy",1,date)
i = 0
do while dato <= datoSlut
if CDate(myDateArr(i)) <> CDate(dato) then
    Response.Write "<option value=""" & dato & """>" & dato & "</option>"
else
i = i + 1
if i > ubound(myDateArr) then i = ubound(myDateArr)
end if
dato = dateAdd("d",1,dato)
loop
response.write "</select></p>"
Avatar billede zeusdk Nybegynder
20. februar 2003 - 12:09 #14
>Det, du vil er, at du vil fjerne datoen fra dropdown-listen. Er det det du vil??
Nej, det skal godt nok fjernes men ikke fra dropdown-boxen (for der findes den ikke i forvehen). Den skal i stedet fjernes fra mydates, hvorved den kommer til syne i dropdown-boxen. Dropdown-boxen viser kun de datoer, som ikke findes i mydates.
Avatar billede zeusdk Nybegynder
20. februar 2003 - 12:19 #15
Jeg fik selv skidtet til at virke :-)

Set myConn=Server.CreateObject("ADODB.Connection")
    myConn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="+server.Mappath("/db/selvet.mdb"))
   
    strSQL = "SELECT DISTINCT datopublish FROM search WHERE datopublish >= #"  & Year(date) & "-" & month(date) & "-" & Day(date) &  "# AND datopublish < #" & Year(dateadd("yyyy",1,date)) & "-" & month(dateadd("yyyy",1,date)) &  "-" & Day(dateadd("yyyy",1,date)) & "# order by datopublish"

    set rs = myConn.execute(strSQL)
   
    do while not rs.EOF
          if isDate(rs("datopublish")) then
              myDates = myDates & rs("datopublish") & ", "
        End If
    rs.MoveNext
    Loop
       
    if Session("henvisningStatus") = "opdatere" then
       
        myDates = Replace(Session("henvisningDatoPublikation") & ", ", "")
       
    end if
       
    if not myDates = "" then
        myDates = left(myDates,len(myDates)-2)
    end if
   
    myDateArr = Split(myDates,",")

    dato = date ()
    datoSlut = DateAdd("yyyy",1,date)
    i = 0
    do while dato <= datoSlut
        if CDate(myDateArr(i)) <> CDate(dato) then
            Response.Write "<option value=""" & dato & """>" & dato & "</option>"
          else
            i = i + 1
            if i > ubound(myDateArr) then i = ubound(myDateArr)
          end if
        dato = dateAdd("d",1,dato)
    loop
    response.write "</select></p>"
Avatar billede zeusdk Nybegynder
20. februar 2003 - 12:20 #16
Tak for hjælpen :-)
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