webForumDet fria alternativet

Loopa en SQL INSERT

7 svar · 269 visningar · startad av CatZ

CatZMedlem sedan jan. 20022 341 inlägg
#1

Jag har precis skapat ett flersidors formulär som jag sedan ska sätta in i databasen i två olika tabeller med 2 olika SQL satser. Nu dök det givetvis upp lite problem. Det finns två varianter som jag kan se, den första insert:en fungerar fint. Det är nästa del som är lite vajsing med.'

		Dim rs2, SQL2, KrID
		Dim i, Antal
		
		Set rs2 = dbCom.Execute("Select @@identity")
		KrID = rs2(0)
		Antal = request("Antal")
		For i = 1 to Antal
			SQL2 = "INSERT INTO krSpel (dagarID, tid, KrID)" & _
			" VALUES(" & SQLEncode(Request.Form("dagarID")) & ", " & _
			" '" & SQLEncode(Request.Form("tid")) & "', " & _
			" " & SQLEncode(KrID) & ")"
			'dbCom.Execute SQL2,,128
			response.write SQL2
		Next

Så ser den ut i nuvarande form, men jag undrar om man kan göra på det viset? dagarID och tid är ju i nuvarande form 2 arrayer som håller informationen från select="dagarID" och text="tid". Ska jag splitta upp den arrayen först och sedan göra insert?

Alternativ 2 vore ju om man döper om arrayerna med siffror efteråt redan i formuläret så att det inte blir en array utan får ett helt eget dagarID1 osv och sedan loopar SQL frågan och anger plus på någe sätt... problemet då, jag vet inte hur man gör det? :(

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Jag skulle nog aldrig lagra flera värden i en kolumn, så jag tycker att du skall dela upp det i olika poster.

CatZMedlem sedan jan. 20022 341 inlägg
#3

Kan man "plussa" på i SQL satsen på samma sätt som i en loop när man skriver namnet ?

		Dim rs2, SQL2, KrID
		Dim i, Antal, oka
		Dim dagarID, tid
		
		Set rs2 = dbCom.Execute("Select @@identity")
		KrID = rs2(0)
		Antal = request("Antal")
		oka = 1
		For i = 1 to Antal
			dagarID = Request.Form("dagarID") & oka
			tid = Request.Form("tid") & oka
			SQL2 = "INSERT INTO krSpel (dagarID, tid, KrID)" & _
			" VALUES(" & SQLEncode(dagarID) & ", " & _
			" '" & SQLEncode(tid) & "', " & _
			" " & SQLEncode(KrID) & ")"
			'dbCom.Execute SQL2,,128
			response.write SQL2
		oka = oka + 1
		Next

Utskriften blir nu :

INSERT INTO krSpel (dagarID, tid, KrID)
VALUES(1, '1', 0)

INSERT INTO krSpel (dagarID, tid, KrID)
VALUES(2, '2', 0)

INSERT INTO krSpel (dagarID, tid, KrID)
VALUES(3, '3', 0)

Bara själva ÖKA delen med siffran kommer med :/

CatZMedlem sedan jan. 20022 341 inlägg
#4

löste problemet

Jesper TMedlem sedan nov. 20017 058 inlägg
#5

CatZ skrev:

löste problemet

Det är alltid bra att delge lösningarna, så kan fler få nytta av dem. :)

CatZMedlem sedan jan. 20022 341 inlägg
#6

CatZ skrev:

En sann mästare lär aldrig ut alla sina hemligheter, då skulle han snart inte vara en sann mästare längre

Ska posta hela lösningen imorgon, orkar inte nu :P

Jesper TMedlem sedan nov. 20017 058 inlägg
#7

Bra :)

CatZMedlem sedan jan. 20022 341 inlägg
#8

Ångrade mig Första delen här är ju då formuläret, Request("Antal") är från formulärfältet antal där de får ange hur många spelkvällar de vill ha med. Fungerar utmärkt för mina enkla ändamål. Ska finputsa lite och deklarera mera :)

<%
dim item, Antal, i, oka
  for each item in Request.Form
    response.write "<input type='hidden' name='" & item & "' value='" & Request(item) & "'>"
  next
Antal = Request("Antal")
oka = 1
For i = 1 to Antal
%>	
<tr class="td2"> 
<td>Spelkv&auml;ll</td>
<td>
<select name="dagarID<%=oka%>">
<option value="">.: V&auml;lj Dag :.</option>
<option value="2">M&aring;ndag</option>
<option value="3">Tisdagar</option>
<option value="4">Onsdagar</option>
<option value="5">Torsdagar</option>
<option value="6">Fredagar</option>
<option value="7">L&ouml;rdag</option>
<option value="1">S&ouml;ndag</option>
</select>
Tid: <input name="tid<%=oka%>" type="text" size="7" maxlength="5">
</td>
</tr>
<%		oka = oka + 1
Next

%>

detta avslutas ju då med en submit och inleds med <form>
Nästa del är egentligen samma sak jag markerar den intressanta delen met fet stil. Eftersom jag gör insert i 2 olika tabeller måste jag ju hämta id från första insert:en

		If Request("KrPostnr") = "" Then
<%		NyttPostnr = "NULL"
Else
NyttPostnr = Request("KrPostnr")
End If
If Request("KrMpnID") = "" Then
NyttMpnID = "NULL"
Else
NyttMpnID = Request("KrMpnID")
End If		
SQL = "INSERT INTO krInfo (KrLan, KrNamn, KrGata, KrPostnr, KrStad, KrTele, KrLank, KrMpnID, KrEpost, KrSommar)" & _
    " VALUES('" & SQLEncode(Request("KrLan")) & "', " & _
    " '" & SQLEncode(Request("KrNamn")) & "', " & _
    " '" & SQLEncode(Request("KrGata")) & "', " & _
    " " & SQLEncode(NyttPostnr) & ", " & _
    " '" & SQLEncode(Request.Form("KrStad")) & "', " & _
    " '" & SQLEncode(Request.Form("KrTele")) & "', " & _
    " '" & SQLEncode(Request.Form("KrLank")) & "', " & _
    " " & SQLEncode(NyttMpnID) & ", " & _
    " '" & SQLEncode(Request.Form("KrEpost")) & "', " & _
    " '" & SQLEncode(Request.Form("KrSommar")) & "')"				
dbCom.Execute SQL,,128
[b]Set rs2 = dbCom.Execute("Select @@identity")

KrID = rs2(0)
Antal = request("Antal")
oka = 1
For i = 1 to Antal
  dagarID = Request.Form("dagarID" & oka) 
  tid = Request.Form("tid" & oka) 
  SQL2 = "INSERT INTO krSpel (dagarID, tid, KrID)" & _
	" VALUES(" & SQLEncode(dagarID) & ", " & _
	" '" & SQLEncode(tid) & "', " & _
	" " & SQLEncode(KrID) & ")"
  dbCom.Execute SQL2,,128
oka = oka + 1
Next[/b]
rs2.Close
Set rs2 = Nothing
dbCom.Close
Set dbCom = Nothing
%>
126 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
123 ms — hämta tråd, inlägg och bilagor (db)