Avatar billede dramsgaard Nybegynder
06. august 2003 - 20:01 Der er 25 kommentarer og
1 løsning

tilføj flere poster samtidig

jeg har en formular med flg felter:

navn, resultat, bemaerkninger

disse felter gentager sig 5 gange

hvordan kan man tilføje alle 5 rækker på en gang til databasen, så de får hver deres post i tabellen i db'en?
Avatar billede eagleeye Praktikant
06. august 2003 - 20:07 #1
Det kan man ikke i Access der skal du lave 5 SQL sætnigner:

SQL = "INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','1')"
Conn.Execute(SQL)
SQL = "INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','2')"
Conn.Execute(SQL)
SQL = "INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','3')"
Conn.Execute(SQL)
SQL = "INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','4')"
Conn.Execute(SQL)


Med MSSQL kan man sætte ; imellem:

SQL = "INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','1');INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','2');INSERT INTO tabel (navn, resultat, bemaerkninger) VALUES ('A','B','3')"
Conn.Execute(SQL)
Avatar billede dramsgaard Nybegynder
06. august 2003 - 20:16 #2
det er en access db.
når formularen bliver submitet bliver dataerne sendt videre til en anden fil, hvor de bliver sat ind idb'en, men hvordan kan man så kende forskel på de enkelte rækker fra formularen når de skal sættes ind i db'en hvis man benytter ovenstående?
Avatar billede netro Nybegynder
06. august 2003 - 20:18 #3
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From Tabel Where ID = 0", Conn, 1, 3

For i = 1 To 5
  rs.AddNew
  rs("Navn") = Replace(Request.Form("Navn"), "'", "''")
  rs("Resultat") = Replace(Request.Form("Resultat"), "'", "''")
  rs("Bemaerkninger") = Replace(Request.Form("Bemaerkninger"), "'", "''")
  rs.Update
Next
Avatar billede eagleeye Praktikant
06. august 2003 - 20:20 #4
Du hendet værdien af form felterne med Request.Form("navnet_på_input") så du kan styre det med navnet på inputet:

navn1 = Request.Form("navn1")
navn2 = Request.Form("navn2")
..
resultat1 = Request.Form("resultat1")
resultat2 = Request.Form("resultat2")


Så kan du hende sætte det ind eller lave et loope hvis de hedder 1-5

for i = 1 to 5
  SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
  conn.Execute(SQL)
next
Avatar billede eagleeye Praktikant
06. august 2003 - 20:21 #5
hvis de hedder 1-5 ---> hvis de hedder "navn1" -> "navn5"
Avatar billede netro Nybegynder
06. august 2003 - 20:40 #6
På samme måde udskriver du formularen:

For i = 1 To 5
  Response.Write "<input type='text' name='Navn" & i & "'><br>"
Next

- og aflæser:

For i = 1 To 5
  Vaerdi = Request.Form("Navn" & i)
Next
Avatar billede netro Nybegynder
06. august 2003 - 20:41 #7
Nå, det sidste havde eagleeye allerede skrevet. Det så jeg ikke.
Avatar billede dramsgaard Nybegynder
06. august 2003 - 21:37 #8
når jeg benytter:

for i = 1 to 5
  SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
  conn.Execute(SQL)
next

så virker det, men kun hvis man udfylder alle 5 rækker. Hvis bare en række i formularen er tom får jeg:

Data type mismatch in criteria expression.

hvad kan man gøre så det ikke er nødvendigt at benytte alle 5 rækker på en gang for at det virker?
Avatar billede eagleeye Praktikant
06. august 2003 - 21:39 #9
Så kan du tjekke om der er udfyldt noget i felterne:

if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" AND Request.Form("bemaerkninger" & i) <> "" then
  ..gem
end if


Så det bliver:
for i = 1 to 5
  if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" AND Request.Form("bemaerkninger" & i) <> "" then
    SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
    conn.Execute(SQL)
  end if
next
Avatar billede dramsgaard Nybegynder
06. august 2003 - 21:53 #10
hmm ja nu behøver man ikke bruge alle 5 rækker, men databasen bliver ikke opdateret medmindre der står noget i alle felter i rækken

navn og resultat skal udfyldes, men bemærkninger er valgfrit
Avatar billede eagleeye Praktikant
06. august 2003 - 21:55 #11
Ok så fjerne du bare:  AND Request.Form("bemaerkninger" & i) <> ""  fra if sætningen så den bliver sådan her så behøves bemærkninger ikke udfyldes.

if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" then
Avatar billede dramsgaard Nybegynder
06. august 2003 - 22:04 #12
men hvis nu f.eks navn eller resultat ikke er udfyldt ville jeg gerne have at den sendte tilbage at der er fejl i indtastningerne.
ex. vha af en querystring som admin.asp?mode=fejl

hvordan kan man få det sat ind i scriptet?
Avatar billede eagleeye Praktikant
06. august 2003 - 22:10 #13
Skal den så ikke gemme noget i DB'en hvis der er et felt som ikke er udfyldt?
Avatar billede dramsgaard Nybegynder
06. august 2003 - 22:13 #14
nej ikke hvis navn eller resultat ikker er udfyldt, så skal den istedet sende brugeren tilbage til admin.asp?mode=fejl
hvor jeg så kan skrive en fejlmeddelelse
Avatar billede eagleeye Praktikant
06. august 2003 - 22:16 #15
Så må du først lave et tjek på om de alle er udfyldt rigtigt:


for i = 1 to 5
  if Request.Form("navn" & i) = "" OR Request.Form("resultat" & i) = "" then
    Response.Redirect("admin.asp?mode=fejl")
  end if
next

'Alle felter udfyldt gem i DBen:

for i = 1 to 5
  if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" then
    SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
    conn.Execute(SQL)
  end if
next
Avatar billede dramsgaard Nybegynder
06. august 2003 - 22:32 #16
hmm ja men nu er problemet at nu skal man bruge alle 5 rækker igen, for at den ikke skal lave fejl
kan man ik lave så den går uden om de rækker hvor der slet ikke står noget?
Avatar billede eagleeye Praktikant
06. august 2003 - 22:35 #17
Ikke forstået??
Den gemmer ikke i DB'en hvis der ikke er skrevet noget i enten felterne navn elller resultat
Avatar billede dramsgaard Nybegynder
06. august 2003 - 22:43 #18
nej men i formularen er der jo 5 rækker med navn, resultat og bemærkninger.
Problemet opstår hvis man f.eks kun bruger 1 række, så vil de resterende 4 rækker have navn og resultat tom, hvilket gør at man ikke kan opdatere db'en.

Derfor ville det være godt hvis den kunne ignorere de rækker hvor der slet ikke står noget i (da disse jo ikke bruges)
Avatar billede eagleeye Praktikant
06. august 2003 - 22:47 #19
Så har jeg misforstået dig for nu syntes jeg du modsiger dig selv i forhold til kommentar 06/08-2003 22:04:15

Så ret koden tilbage til dette uden det det andet tjek:

for i = 1 to 5
  if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" then
    SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
    conn.Execute(SQL)
  end if
next
Avatar billede dramsgaard Nybegynder
06. august 2003 - 22:53 #20
nej det andet tjek er for så vidt godt nok
for hvis der er indtastet noget i navn, men ikke i resultat, så skal den ikke opdatere db, men sende brugeren tilbage (hvilket den os' gør)

men jeg vil gerne have at den ignorere de rækker hvor der slet ikke er skrevet noget, hverken i navn, resultater og bemærkninger.
For ignorer den ikke dem, bliver man nødt til at udfylde alle 5 rækker i formularen for at få den til at opdatere db'en (hvilket der ikke altid er behov for)

Håber du forstår : )
Avatar billede eagleeye Praktikant
06. august 2003 - 23:06 #21
Ja ok nu tror jeg er med, altså hvis man kun skrive rnoget i enten navn eller resultater eller bemærkninger så skal den melde fejl og hvis alle felter er tomme skal den ikke melde det som fejl.

Så prøv dette, hvor den udvide en del for at tjekke at dem som slet ikke er udfyldt er tomme.

for i = 1 to 5
  navn = Request.Form("navn" & i)
  resultat = Request.Form("resultat" & i)
  bemaerkninger = Request.Form("bemaerkninger" & i)

  if (navn <> "" AND (resultat = "" OR bemaerkninger = "")) OR _
    (resultat <> "" AND (navn = "" OR bemaerkninger = "")) OR _
    (bemaerkninger <> "" AND (navn = "" OR resultat = "")) then

    Response.Redirect("admin.asp?mode=fejl")
  end if
next

'Alle felter udfyldt gem i DBen:

for i = 1 to 5
  if Request.Form("navn" & i) <> "" AND Request.Form("resultat" & i) <> "" then
    SQL = "INSERT INTO tabel (navn, ...) VALUES ('" & Request.Form("navn" & i) & "',..)
    conn.Execute(SQL)
  end if
next
Avatar billede dramsgaard Nybegynder
06. august 2003 - 23:19 #22
ja det ser vist meget godt ud....jeg har ik testet den endnu, men laver den ik os fejl hvis feltet bemærkninger ikke er udfyldt? det felt er jo ikke påkrævet.

Jeg har os helt glemt der skulle være et felt der hedder dato!! (hvilket selvfølgelig er påkrævet ligesom navn og resultat)
Avatar billede eagleeye Praktikant
06. august 2003 - 23:43 #23
Tjekker er der fordi bemaerkninger ikke må være udfyldt alene, men det rigtig det kan fjerne i nogle af dem ;)

Så prøv sådan her:


for i = 1 to 5
  navn = Request.Form("navn" & i)
  resultat = Request.Form("resultat" & i)
  dato = Request.Form("dato" & i)
  bemaerkninger = Request.Form("bemaerkninger" & i)

  if (navn <> "" AND (resultat = "" OR dato = "")) OR _
    (resultat <> "" AND (navn = "" OR dato = "")) OR _
    (dato <> "" AND (navn = "" OR resultat = "")) OR _
    (bemaerkninger <> "" AND (dato="" OR navn = "" OR resultat = "")) then

    Response.Redirect("admin.asp?mode=fejl")
  end if
next
Avatar billede dramsgaard Nybegynder
06. august 2003 - 23:58 #24
weee nu virker det helt perfekt : )

lige et sidste spg, kan man overfører alt det her til en opdateringsfunktion på en nem måde?
Avatar billede eagleeye Praktikant
07. august 2003 - 00:05 #25
Ja det kan man. Valideringen kan være samme kode.

SQL'en skal så rettes til en UPDATE SQL og så skal du søge for at ID kommer med formen så man ved hvilken der skal opdates.

SQL = "UPDATE tabel SET navn = '" & Request.Form("navn" & i) & "', resultat = '" & Request.Form("resultat" & i)  & "', bemaerkninger = '" & Request.Form("bemaerkninger" & i) & "' WHERE id = " & Request.Form("id" & i)
Avatar billede dramsgaard Nybegynder
07. august 2003 - 00:08 #26
okay...det må jeg lige prøve at rette til i morgen

mange 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