Avatar billede rane Nybegynder
03. november 2006 - 22:26 Der er 40 kommentarer og
2 løsninger

Gem flere records i db (loop)

Jeg er lidt lost i, hvordan man tilføjer 20 forskellige records på samme tid til en Access database.

Der er 20 <input> felter der hver især har en dato som name, eks. 22-12-2006.  Problemet er at disse datoer er blevet genereret dynamisk. Der er dog et mønster, da datoerne er lig med alle hverdage-datoer i en 4 ugers periode.

Hvordan kan man tilføje disse til db..?
Avatar billede cpufan Juniormester
03. november 2006 - 23:44 #1
hvad hedder de 20 inputfelter?

eller har du andre input felter?
og hvad hedder din sendknap?
Avatar billede cpufan Juniormester
03. november 2006 - 23:48 #2
evt. sådan:

for each navn in request.form
if isdate(request.form(navn)) then
sql = "insert into tabel (kolonnenavn1) Values('"&request.form(navn)&"')
conn.execute(sql)
end if
next
Avatar billede rane Nybegynder
04. november 2006 - 08:16 #3
Alle felterne har en dato som navn ala:

06-11-2006
07-11-2006
08-11-2006
09-11-2006
10-11-2006
13-11-2006  (bemærk vi springer weekend-dagene over)

Disse navne-datoer kører så over en 4 ugers periode hvor jeg har både start- og slutugenummeret i variabler...det er bare det med at springe weekend-dage over der er det egentlige problem.

Formen indeholder iøvrigt flere input-elementer (4-5 stk), dog er de hidden og kommer efter de 20 input-datofelter.
Avatar billede thesurfer Nybegynder
06. november 2006 - 00:10 #4
1) "Der er 20 <input> felter der hver især har en dato som name, eks. 22-12-2006": Feltnavne i HTML må ikke starte med et tag

2) "isdate(request.form(navn))": Her checkes der på værdien af feltet, og ikke navnet på feltet, som er "navn": isdate(navn)

Men jeg ville nok beholde #2, dvs isdate(request.form(navn), og bruge:

<input type="text" name="d22-12-2006" value="22-12-2006">

"text" kan erstattes af f.eks. "hidden" eller ander gyldige attributter..
Avatar billede rane Nybegynder
06. november 2006 - 07:01 #5
thesurfer, eh? feltnavne i html...tag?

kan godt se pkt. 2, men så har jeg jo 2 <input> felter til hver af de 20 linjer..hvordan kan jeg adskile dem så jeg både kan hive datoen ud samt det tekst man egentlig skal skrive i feltet?
Avatar billede thesurfer Nybegynder
06. november 2006 - 14:25 #6
rane> Jeg forstår ikke helt "thesurfer, eh? feltnavne i html...tag?"-delen.. :-)

Et input-element har visse attributter:
name: identificerer elementet
value: elementets værdi

I dit spørgsmål skriver du:

"Der er 20 <input> felter der hver især har en dato som name, eks. 22-12-2006."

Her gik jeg ud fra, at du skrev "22-12-2006" i "name"-attributten og ikke i value-attributten, og værdien bør være..

Som jeg forstod dig: <input type="text" name="22-12-2006">

Som det bør være: <input type="text" name="navnet-paa-dette-feltet" value="22-12-2006">

Så kunne man f.eks. bruge Request.Form("navnet-paa-dette-feltet") for at aflæse værdien..
Avatar billede rane Nybegynder
06. november 2006 - 17:31 #7
ja så mener vi det samme. :) men hvordan får jeg så alle 40 (!) værdier ud?
Avatar billede thesurfer Nybegynder
06. november 2006 - 17:45 #8
Du bruger koden fra 03/11-2006 23:48:53

Eksempel:

for each felt in request.form
  response.write "Feltet '" & felt & "' har værdien: '" & request.form(felt) & "'<br>"
next
Avatar billede rane Nybegynder
06. november 2006 - 17:48 #9
jeg forstod bare ikke helt det med d'et foran datoen?
Avatar billede thesurfer Nybegynder
06. november 2006 - 17:49 #10
Komplet eksempel:

<form name="minform" action="udskriv.asp" method="post">
Indtast fornavn: <input type="text" name="fornavn" value="Hans"><br>
Indtast efternavn: <input type="text name="efternavn" value="Hansen"><br>

<input type="submit" name="submit" value="Send">
</form>

filen udskriv.asp:
<%
' Koden skal KUN afvikles, hvis formen submittes:
if request.servervariables("request_method") = "POST" then


for each felt in request.form
  response.write "Feltet '" & felt & "' har værdien: '" & request.form(felt) & "'<br>"
next

end
%>

Når du klikker på "Send", skulle den gerne skrive:

fornavn: Hans
efternavn: Hansen
submit: Send
Avatar billede thesurfer Nybegynder
06. november 2006 - 17:50 #11
Ang "jeg forstod bare ikke helt det med d'et foran datoen?":

Det er fordi du havde selve datoen i name-attributten.

Name-attributten må ikke starte med et tal.. så derfor indsatte jeg et bogstav..
Avatar billede thesurfer Nybegynder
06. november 2006 - 17:50 #12
Jeg tror at det er nemmere, hvis du viser os den kode du har nu..
Avatar billede rane Nybegynder
06. november 2006 - 19:14 #13
Jeg forstår godt hvordan den submitter osv.  Men i og med, at jeg skal gemme både dato+værdien af indtastningen i en database, så kan jeg ikke indsætte eks. d22-12-2006 i et datofelt i databasen. Ergo må "d" tegnet fjernes inden insert. Kan man så bare skrive:

for each navn in request.form
if isdate(request.form(navn)) then

nytnavn = Replace(navn, "d", "")
sql = "insert into tabel (dato, beskrivelse) Values('" & nytnavn & "', '" & request.form(navn) & "')
conn.execute(sql)
end if
next

??
Avatar billede thesurfer Nybegynder
06. november 2006 - 19:38 #14
Så skal du fjerne "d", inden du sammenligner:

for each navn in request.form
  dato = replace(request.form(navn))
  if IsDate(dato) then
      sql = "insert into tabel (dato, beskrivelse) Values('" & dato & "', '" & request.form(navn) & "')
      conn.execute(sql)
  end if
next

Men er feltet "dato" i din database, ikke af typen dato? Som det er nu i din SQL streng, er det af typen "tekst"..
Avatar billede thesurfer Nybegynder
06. november 2006 - 19:39 #15
Rettelse:

Så skal du fjerne "d", inden du sammenligner:

for each navn in request.form
  dato = replace(request.form(navn), "d", "")
  if IsDate(dato) then
      sql = "insert into tabel (dato, beskrivelse) Values('" & dato & "', '" & request.form(navn) & "')
      conn.execute(sql)
  end if
next

Men er feltet "dato" i din database, ikke af typen dato? Som det er nu i din SQL streng, er det af typen "tekst"..
Avatar billede thesurfer Nybegynder
06. november 2006 - 19:40 #16
Rettelse igen! :-)
Det er jo name-attributten der indeholder "d22-10-2006"..
Derfor er det "navn" der skal replaces, og ikke request.form(navn)


Så skal du fjerne "d", inden du sammenligner:

for each navn in request.form
  dato = replace(navn, "d", "")
  if IsDate(dato) then
      sql = "insert into tabel (dato, beskrivelse) Values('" & dato & "', '" & request.form(navn) & "')
      conn.execute(sql)
  end if
next

Men er feltet "dato" i din database, ikke af typen dato? Som det er nu i din SQL streng, er det af typen "tekst"..
Avatar billede rane Nybegynder
06. november 2006 - 20:12 #17
jojo, feltet er "dato".  der skal vel bare # rundt omkring datoen i insert linjen :)
Avatar billede thesurfer Nybegynder
06. november 2006 - 20:15 #18
Yep.. # i stedet for '.. :-)
Avatar billede rane Nybegynder
06. november 2006 - 20:25 #19
problem:

jeg har nogen hidden-felter i samme formular, der tilfældigvis indeholder et "d" tegn i deres navnefelter. dette bliver nu fjernet i replace linjen.

desuden så har jeg lige prøvet at udskrive alle dato-værdier der bliver submittet....de kommer IKKE i rigtig dato-rækkefølge men nærmere således:

27-11-2006
28-11-2006
05-12-2006
submit (submitknappen pludselig)
29-11-2006
01-12-2006
hovesie (mangler d 2 steder)
13-12-2006
20-12-2006
Avatar billede thesurfer Nybegynder
06. november 2006 - 20:29 #20
Når man laver en "for each element in samling", bliver de ikke sorteret..
De bliver aflæst i den rækkefølge de bliver sendt..

Dvs, oppe fra og ned (går jeg ud fra)..

Hvis de skal sorteres, skal du
- lave en for-each der henter alle felterne
- sorterer den nye samling
- lave en loop (for-next eller for-each) der gemme værdierne i databasen
Avatar billede rane Nybegynder
06. november 2006 - 20:33 #21
den tager dem tilfældigt så, fordi rækkefølgen på siden er den rigtige dato-rækkefølge.
Avatar billede thesurfer Nybegynder
06. november 2006 - 20:39 #22
Angående problemet med "d" i dine hidden felter:

Det behøver ikke at være "d" foran dine datoer.. du kan f.eks. bruge "a", "b", "c" eller et hvilken som helst andet bogstav..
Avatar billede thesurfer Nybegynder
06. november 2006 - 20:40 #23
Ang rækkefølgen: Der bliver jeg lige nødt til at lave en test..

Indtil nu har jeg altid troet at den tog dem oppefra og ned.. dvs, samme rækkefølge som i formen..

Jeg bliver nødt til at lave en test, når jeg får tid lige om lidt..
Avatar billede rane Nybegynder
06. november 2006 - 20:56 #24
hm...jeg kan godt nok ikke få udskrevet noget som helst efgter isdato-funktionen bliver kaldt.....kan fint udskrive alle inputfelterne før den linje...men den genkender tilsyneladende ikke feltnavnene som datoer??
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:01 #25
Ahh..

Man skal højst sandsynligt konvertere dem til dato med CDate:

If IsDate(CDate(dato)) then

CDate:

Da http://www.w3schools.com/vbscript/func_cdate.asp åbenbart er nede (fejl på siden), kan du se en cachede version:

http://72.14.209.104/search?q=cache%3Ahttp%3A%2F%2Fwww.w3schools.com%2Fvbscript%2Ffunc_cdate.asp
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:02 #26
Hmm..

Det skal nok bare se sådan ud:

if IsDate("#" & dato & "#") then

jvf IsDate: http://www.w3schools.com/vbscript/func_isdate.asp
Avatar billede rane Nybegynder
06. november 2006 - 21:13 #27
jep så virker det næsten!!  datoformatet er seføli kaget nu, så den bytter om på måned og dag...grrr

plus at jeg meget gerne skulle ha den rækkefølge fikset :/
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:21 #28
Jeg har lige lavet testen..

Hvis submit-knappen hedder "submit" (dvs, name="submit"), så vil submit knappen komme ind på 3 pladsen..

Hvis man sætter noget foran "submit", f.eks. name="xsubmit", kommer den i bunde, og rækkefølgen er iorden..
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:24 #29
Datoformat ændres typisk, når det er en engelsk-sproget database..

Du kan selv styre udskriften (som er det vigtigste) med følgende:

function FixDato(dato)
dag = day(dato)
maaned = month(dato)
aar = year(dato)

dato = dag & "/" & maaned & "/" & aar
FixDato = dato
end function

Så kaldes den med: <% response.write FixDato(rs("dato")) %>
Avatar billede rane Nybegynder
06. november 2006 - 21:27 #30
min rækkefølge ser sådan ud, heheheh:

27-11-2006
ugeper
28-11-2006
05-12-2006
submit
29-11-2006
01-12-2006
13-12-2006
20-12-2006
mainpage
30-11-2006
04-12-2006
06-12-2006
18-12-2006
07-12-2006
11-12-2006
08-12-2006
12-12-2006
firmatype
ugenummerstart
14-12-2006
19-12-2006
15-12-2006
22-12-2006
firma
21-12-2006
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:27 #31
Har du fået fixet det med de manglende "d"'er fra 06/11-2006 20:25:34?
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:28 #32
Huh? :)

Hvad er "ugeper, mainpage, firmatype, ugenummerstart og firma" for nogle elementer?
Avatar billede rane Nybegynder
06. november 2006 - 21:33 #33
hidden input-felter jeg også skal have sat ind i databasen. jeg omdøbte dem bare så de ikke indeholdt et "d" :)

prøvede lige din dato-funktion...den bytter stadig om på det, når den indsætter...grr
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:47 #34
Som jeg skrev i 06/11-2006 21:24:47:

"Du kan selv styre udskriften (som er det vigtigste)"

Det er lige meget hvordan det ser ud, når det er i databasen.

Så det er lige meget hvordan det ser du, når den indsætter..

Så længe at det ser rigtigt ud, datoen udskrives til "skærmen"..
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:48 #35
Flyt alle dine hidden-flester til sidst i formen, og kald dem alle "x" + det rigtige navn..

eksempel: xugepar, xmainpage, xfirmatype

osv..

Hvordan bliver rækkefølgen så?
Avatar billede rane Nybegynder
06. november 2006 - 21:49 #36
ok så mangler jeg bare den skide dato. har lavet access databasen i en dansk access-version og databasen ligger på concor.dk's server...er det noget med en session lcid?
Avatar billede thesurfer Nybegynder
06. november 2006 - 21:59 #37
Ok.. lyt godt til mig:

Det er lige meget hvordan dataene ser ud i database :-)

Det eneste der er vigtigt, er udskriften :-)

Og når du skal sortere osv.. men lige nu har du vel ikke brug for at ændre dato-formatet i databasen.. vel?
Avatar billede rane Nybegynder
06. november 2006 - 22:24 #38
tror sgu det er sent, begynder at blive forvirret nu heheh.

selvom jeg sætter x foran alle hidden felter, dukker de op indimellem. Også vildt at de resterende dato-inputs heller ikke holder rækkefølgen. 

men jeg kan måske godt leve med det...har bare brug for at finde ugenummeret på de enkelte datoer (skal bruge det i databasen).

altså eksempelvis en datotiluge(dato) funktion der finder ugenummeret (eks. 50)
Avatar billede thesurfer Nybegynder
06. november 2006 - 22:39 #39
Der kan du vist bare bruge DatePart:

response.write DatePart("ww", dato)

måske skal du også angive hvilken dag er den først, og hvilken uge er den første..

DatePart: http://www.w3schools.com/vbscript/func_datepart.asp
Avatar billede thesurfer Nybegynder
06. november 2006 - 22:52 #40
Jeg smider lige et svar.. jeg smutter lige om lidt..
Avatar billede rane Nybegynder
07. november 2006 - 09:20 #41
Det funker bare nu!  Har givet begge point, men flest til thesurfer...det virkede mest logisk efter alt det han har lavet :)
Avatar billede rane Nybegynder
07. november 2006 - 09:29 #42
Takker til begge :)
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