27. marts 2005 - 13:02Der er
23 kommentarer og 1 løsning
drop dowm med distinct valg tilknyttet
Hej
Jeg har et modul som styre et loppemarked, hvor det er muligt at redigere bestilingerne. i modulet skal det være muligt at tildele de 58 pladser som der er plads til. dette loppemarked kommer over mange datoer, så alt er delt omkring de mulige datoer som loppemarkedet afholdes på.
jeg har en side hvor jeg kan redigere bestillingerne fra en database (MS Access). I databasen er der et X antal bestillnger, dog max 58 per mulige dato. Dato kan have fra 1-23 forskellige. Det betyder at samme person kan godt have 2 bestillinger men på 2 forskellige datoer. (Håber dette give lidt menning)
Målet er nu at når man vælger hvilken plads af de 58 en bestillng skal have fra en dropdown boks, skal man kun se de muligheder som ikke er valgt på forhånd. så man ikke kan vælge samme plads 2 gange på samme dato.
min Access database består af 3 tabler, en med alle informationer om den enkelte bestilling og to tabeller som henholdvis indeholder datoerne for loppemarekedet og en med de mulige pladser.(max 58)
hvordan kan jeg scripte at jeg kun får vist de muligheder som ikke er valgt ???
Den henter alle fra den ene tabel og hvis feltet fra hoved tabel er det samme er den valgt.
<select size="1" name="txtStadeNr"> <option value="0">0</option> <% Dim sel_1 Dim strRSStadeNr
strRSStadeNr = strStadeNr
SET oRS3= oDB.execute("SELECT AutoID,Stadenr_tal FROM Stadenr") Do While Not oRS3.EOF If strRSStadeNr = oRS3("StadeNr_tal") Then sel_1="selected" else sel_1="" end if %> <option value="<%= oRS3("Stadenr_tal") %>" <%= Sel_1%>><%= oRS3("Stadenr_tal") %></option> <% oRS3.MoveNext Loop %> </select>
ja - det er menningen at der kun skal vises de stade nr for en gældene dato som ikke er valgt og samtidig vil jeg gerne beholde det med at når jeg henter den op igen så er den stade som er valgt markeret.
Jeg forsøger lige nu bare at få vist de rigtige stade nr og har brugt følgende code:
SQL = "select DISTINCT main.StadeNr, main.Dato, Stadenr.Stadenr_tal from main left join Stadenr on main.StadeNr <> Stadenr.Stadenr_tal WHERE Dato='10/04/05' " Set rs=oDB.Execute(SQL) response.write "<table>" do while not rs.EOF response.write "<tr>" Response.Write "<td>" & rs("Stadenr_tal") if ""&rs("StadeNr")<>0 then Response.write "<br> Optaget" Response.Write "</td>" Response.Write "</tr>" rs.Movenext loop Response.Write "</table>"
%>
Men det virker ikke helt efter hensigten, den viser alle stade nr det antal gange som der er valgt et stade nr - hvis det giver menning
Så i bund og grund vil jeg gerne have en liste med stade nr hvor der kun vises de stade nr som ikke er valgt i forvejen - for at undgå at lave en dobbelt bookning af samme stade på samme dato
kan du kort skitsere din database. Du skal vel i princippet bare lave en SQL der trækker pladserne for en valgte dag ud minus de pladser der allerede er optaget.
når du kommer på listen er det virgtigt at du vælger den bestilling som hedder JESPER WERGE - for de andre er LIVE data - tak :o)
de tre Stadenr 1/ stedenr 2 / stadenr 3 dropdown er dem som jeg gerne vil have de viser de tilgængelige stadenr. i feltet under de tre dorpdows er en liste af nr som er dem som er valgt, det er egentlig dem som skal tages ud af dropdown boksne - hver af de 3 bokse har deres efet felt i databasen. og denne excludering af stadenr skal være tværgående imellem de 3 bokse.
tabel: main felter: AutoID, StadeNr, StadeNr_1, StadeNr_2, StadeAntal beskr: dette er hovedtabellen og indeholder en del mere fleter, som ikke er relevante i denne sammenhæng. i disse 3 felter skriver jeg det valgte stadenr fra dropdown boksene. Der er kun tal i de dropdown bokse, hvis feltet StadeAntal = 1 så er første boks udfyld, = 2 så er to af boksene og slut, = 3 så er alle tre bokse udfyldt
tabel: Stadenr Felter: AutoID, Stadenr_tal Beskr: denne tabel indeholder kun de mulige stadenr - i dette tilfælde 1 - 50
i de tre dropdown bokse vis indholdet af tabel Stadenr. men jeg vil gerne have sxkluderet dem som allerede er valgt og som står i tabel main i feltet StadeNr/StadeNr_1 og StadeNr_2.
Kan godt forstå hvis ud er forvirret, jeg har svært ved at forklare mig.
som bestillingen JESPER WERGE inde på linket, der er 2 af de 3 bokse udfyldt, hvis du klikker på den 3 boks står der kun 0 i den, da boksen ovenfor "Antal bestilte stader" = 2. (også en dorpdown)
lige nu viser begge bokse alle tal fra 1 - 50 og der er SELECTED på de tal som er valgt. (når main.StadeNr = Stadenr.Stadernr_tal så er det tal SELECTED)
Istedet for at alle 1 - 50 tal er i boksene var det menningen at kun de tal som ikke er valgt skal stå. (det skulle forhindre at stade nr. 4 ikke bliver valgt 2 gange på samme dato)
hmm, jeg mener ikke man kan lave subselects i Access. Så bliver du nok nød til at først at trække alle reservere paldser ud fra StadeNr, StadeNr_1, StadeNr_2 i main tabellen. henter du Stadenr_tal fra Stadenr (behøver de at have en tabel, hvis der altid er 50 pladser?) når du skriver de 50 pladser ud, tjekker du samtidig om pladsen er taget i den første forspørgsel
jo jeg kan godt følge dig - samme tanke har jeg haft. jeg har forsøgt at trække data fra begge tabeller i 2 arrays og så sammenligne dem. Men jeg er ikke stærk nok i arrays til at få det til at virke. grunden til at stadenr er i en tabel er at det kan variere med antalet, så for at holde styr på det har jeg lavet det i en tabel.
<% Dim strOptStadeNr Set rs = Conn.execute("SELECT StadeNr, StadeNr_1, StadeNr_2 FROM main WHERE dato = 'den aktuelle dato'") strOptStadeNr = "," do until rs.eof or rs.bof strOptStadeNr = strOptStadeNr & rs("StadeNr") &","& rs("StadeNr_1") &","& rs("StadeNr_2") &"," rs.movenext loop %>
<select size="1" name="txtStadeNr"> <option value="0">0</option> <% Dim sel_1 Dim strRSStadeNr
strRSStadeNr = strStadeNr
SET oRS3= oDB.execute("SELECT AutoID,Stadenr_tal FROM Stadenr") Do While Not oRS3.EOF If inStr(strOptStadeNr,","&oRS3("Stadenr_tal")&",") = 0 Then If strRSStadeNr = oRS3("StadeNr_tal") Then sel_1="selected" else sel_1="" end if %> <option value="<%= oRS3("Stadenr_tal") %>" <%= Sel_1%>><%= oRS3("Stadenr_tal") %></option> <% End if oRS3.MoveNext Loop %> </select>
laver du en streng hvor du lægger alle de valgte stadeNr fra de tre felter ned i og så matcher dem med udtrækket fra den tabel med de alle stadenr_tal - er det rigtigt forstået?
håber du har tid til at forklare kort hvad du gør.
Men tusind tak for din hjælp - der er rart at man kan få lidt hjælp - når man selv er tungnem hehe.
det er lige det jeg gør, så du har forstået det rigtigt, alternativt skulle alle valgte pladser lægges i et array, der så skulle gennemløbes for hver af de 50 pladser.
jeg har lige en ting jeg bliver nød til at spørge om. den løsning du har lavet gør præcist det jeg efterspurgte - dog er jeg løbet ind i et mindre problem som jeg vil høre om du kan hjælpe med, hvis ja er det med nye points
når dropdownen ekskludere de valgte tagerden selvfølgelig også den som er valgt for den gældene post, hvilket betyder at min select aldrig har noget at selecte for tallet er jo taget væk i sammenligningen af strengen og feltet :o)
kan jeg i strengen sige at den ikke skal medtage strStadeNr, strStadeNr_1 og strStadeNr_2
tja enkelt kan det gøres - endnu engang tusind tak
Synes godt om
Ny brugerNybegynder
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.