webForumDet fria alternativet

Uppdatera databasen

48 svar · 1 088 visningar · startad av plelkes

plelkesMedlem sedan mars 2002823 inlägg
#1

Hej jag listar innehållet i en databas med koden

<%@LANGUAGE="VBSCRIPT" "%>
<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
</HEAD>
<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID, tblFluids.FluidID FROM " & _
         "tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND" & _
		 " tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
Set objRS = objConn.Execute(strSQL)
If NOT objRS.EOF Then
%>
<table width="800" border="1">
		<tr>
		   <td>&nbsp;</td>
		   <td colspan="3"><%
			                Response.Write objRS("TypeNamn")
							objRS.Close
							       %>
		    </td>
		 </tr>
  				<tr> 
    				<td><%
					      intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)
							For i = 1 To intLast
  						  Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)
							If NOT i = intType Then
    							Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
						  objRS.Close
						  End If
						  Next
								%>
				     </td>
    					<td><% strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID, f.FluidID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"
Set objRS = objConn.Execute(strSQL)
%>
<table width="400" border="1">
<form name="fylla" method="post" action="uppdatera.asp">
<%
Do While Not objRS.EOF
     Response.Write "<TR><TD><INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidID") &"""></TD>"				
     Response.Write "<TD>" & objRS("FluidNamn") & "</TD>"
	 Response.Write "<TD><INPUT NAME=""volym"" TYPE=""text""></TD></TR>"
       objRS.MoveNext
    Loop
End If
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
 %>
	</form></table>
<input type="submit" value="Lägg till Vätskebalansen">

</BODY>
</HTML>

Själva uppdateringssidan (uppdatera.asp)

<%

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")

sort = Request.Form("FluidID")
mgd = Request.Form("volym")

strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & sort & "','" & mgd & "' )"
vbalans.Execute( strSQL )
Set gbok = Nothing

    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
	Response.Redirect "knapp_i1.asp"

 %>

Men när jag trycker på knappen händer nada...
Det jag vill skall hända:

  1. på sidan knapp_i1.asp skall rutan kryssas i
  2. på sidan knapp_i1.asp skall txtrutan fyllas i
  3. tablelen tblVetskebalans skall fyllas i
  4. tillbaka till sidan knapp_i1.asp
  5. möjlighet att välja nästa vtske-sort
Jesper TMedlem sedan nov. 20017 144 inlägg
#2

Börja med att lägga submit-knappen inanför form-taggarna. ;)

plelkesMedlem sedan mars 2002823 inlägg
#3

Börja med att lägga submit-knappen inanför form-taggarna.

Nu har jag gjort detta.
Men får fel

Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

/vatskebalans/uppdatera.asp, line 11

<%

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")

sort = Request.Form("FluidID")
mgd = Request.Form("volym")

strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & sort & "','" & mgd & "' )"
	[B]Set objRS = objConn.Execute(strSQL)[/B]
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
	Response.Redirect "knapp_i1.asp"

 %>

rad 11 är fet-markerad

Jesper TMedlem sedan nov. 20017 144 inlägg
#4

Vad har du för enheter/datatyper i databasen?

plelkesMedlem sedan mars 2002823 inlägg
#5

förstår inte riktigt frågan...
Skickar därför med databasen

Jesper TMedlem sedan nov. 20017 144 inlägg
#6
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "'," & sort & "," & mgd & " )"
plelkesMedlem sedan mars 2002823 inlägg
#7

Microsoft JET Database Engine error '80040e14'

Syntax error in INSERT INTO statement.

Jesper TMedlem sedan nov. 20017 144 inlägg
#8

Passa på och ändra även dessa:

sort = cInt(Request.Form("FluidID"))
mgd = cInt(Request.Form("volym"))
Jesper TMedlem sedan nov. 20017 144 inlägg
#9

Jag ser att dina fält har samma namn, jag föreslår att du skapar någon slags loop för du kommer ju absolut att få fel om du lägger in olika värden i de olika fälten.

@ndersMedlem sedan juni 200032 969 inlägg
#10

Jesper T skrev:

Passa på och ändra även dessa:

sort = cInt(Request.Form("FluidID"))
mgd = cInt(Request.Form("volym"))

Det har en mindre betydelse, eftersom värdena ändå blir strängar när de läggs till SQL-frågan.

Har man syntaxfel i SQL-frågor finns det alltid två saker man kan göra:

  1. Se till att du inte använt något reserverat ord som tabell- eller fältnamn. Kontrollera på exempelvis http://aspfaq.com/show.asp?id=2080 .
  2. Skriv ut den färdiga SQL-frågan med response.write istället för att exekvera. Det är mycket lättare att felsöka då.

Mvh

plelkesMedlem sedan mars 2002823 inlägg
#11

Se till att du inte använt något reserverat ord som tabell- eller fältnamn. Kontrollera...

Hittar inte att jag skulle ha använt reserverat namn

Skriv ut den färdiga SQL-frågan med response.write istället för att exekvera

Menar du

Response.Write strSQL
Jesper TMedlem sedan nov. 20017 144 inlägg
#12

Japp, med ett litet tillägg.

Response.Write strSQL
Response.end
@ndersMedlem sedan juni 200032 969 inlägg
#13

plelkes skrev:

Hittar inte att jag skulle ha använt reserverat namn

Inte jag heller. Det var mest ett generellt tips, det händer alldeles för ofta att folk får massor med problem för att de använder reserverade ord som tabell- eller fältnamn.

plelkesMedlem sedan mars 2002823 inlägg
#14

Skriv ut den färdiga SQL-frågan med response.write istället för att exekvera

Menar ni att sidan bör se ut:

<%@LANGUAGE="VBSCRIPT" "%>
<%

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")

sort = cInt(Request.Form("FluidID"))
mgd = Request.Form("volym")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "'," & sort & "," & mgd & " ')"
	Response.Write strSQL
Response.end 
    objConn.Close
    Set objConn = Nothing
	Response.Redirect "knapp_i1.asp"

 %>

Om jag kryssar i och fyller i 222
så blir resultatet:

INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('11/17/2003 1:53:22 PM',0,222, , , ')

FluidID blir ju fel...

plelkesMedlem sedan mars 2002823 inlägg
#15

Försökt ändra i uppdateringssidan:

<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open

sort = cInt(Request.Form("FluidID"))
mgd = Request.Form("volym")

strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & sort & "','" & mgd & "')"

vatskeb.Execute( strSQL )
Set vatskeb = Nothing

Response.Redirect "knapp_i1.asp"

 %>

Får dock

Syntax error in INSERT INTO statement.

plelkesMedlem sedan mars 2002823 inlägg
#16

fel på kodningen av kryssruta?

Skriv ut den färdiga SQL-frågan med response.write istället för att exekvera

Nu ser jag, förutom att jag måste ändra i strSQL, även att FluidID hela tiden blir det samma och fel, nämligen 0....

Prova gärna själv :l

Kan det vara fel i kodningen av kryssrutan??

<table width="400" border="1">
<form name="fylla" method="post" action="uppdatera1.asp">
<%
Do While Not objRS.EOF
     Response.Write "<TR><TD><INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidID") &"""></TD>"				
     Response.Write "<TD>" & objRS("FluidNamn") & "</TD>"
	 Response.Write "<TD><INPUT NAME=""volym"" TYPE=""text""></TD></TR>"
       objRS.MoveNext
    Loop
End If
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
 %><input type="submit" value="Lägg till Vätskebalansen">

	</form></table>
@ndersMedlem sedan juni 200032 969 inlägg
#17

Dina checkboxar heter leggatill, men du anger namnet FluidID när du ska hämta värdena med request.

Men, jag förstår inte riktigt hur dina requests kan fungera överhuvudtaget, då du har flera värden som tillhör varje fältnamn i formuläret, eftersom fälten finns flera gånger. Hur vet asp-koden vilket av värdena som kommer som den skall använda? Det är även anledningen till alla extra kommatecken du noterar på slutet av din SQL-fråga.

När det gäller uppdatering / insättning av flera olika poster samtidigt, tycker jag nog att det är bäst att alla formulärfält har olika namn, så man kan avgöra vilka värden som hör till samma post. Jag brukar låta alla fält sluta på något lämpligt räknarvärde.

Jag ska se om jag kan få ihop ett fungerande exempel.

Mvh

@ndersMedlem sedan juni 200032 969 inlägg
#18

När du loopar ut formuläret:

Do While Not objRS.EOF
     Response.Write "<TR><TD><INPUT NAME=""leggatill" & objRS("FluidID") & """ TYPE=""checkbox"" VALUE="""& objRS("FluidID") &"""></TD>"		
     Response.Write "<TD>" & objRS("FluidNamn") & "</TD>"
     Response.Write "<TD><INPUT NAME=""volym" & objRS("FluidID") & """ TYPE=""text""></TD></TR>"
     objRS.MoveNext
Loop

När du ska göra insert:

Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open

For each formObj in Request.Form
     If left(Request.Form(formObj),9) = "leggatill" Then
            lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
            strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "')"
            vatskeb.Execute strSQL, , 128
     End if
Next
            
vatskeb.close
Set vatskeb = Nothing

Response.Redirect "knapp_i1.asp"

Något sådant hade jag försökt mig på i alla fall.

Mvh

plelkesMedlem sedan mars 2002823 inlägg
#19

Tack @nders för ditt hjälp :bire
MEN

  1. varför lägger du till objRS("FluidID") i INPUT NAME?

  2. vad betyder

    If left(Request.Form(formObj),9) = "leggatill"
    

    på svenska?

  3. i

    lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
    

    ersätter du leggatill med tomrum. Rätt? Vad är tanken bakom detta?

  4. vad betyder 128?

plelkesMedlem sedan mars 2002823 inlägg
#20

tyvärr så fungerar ej koden jag fick av @nders, eller så fattar jag fel :x
Det som inte funkar är att det skrivs inget till databasen

prova gärna själv

knapp_i3.asp

<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID, tblFluids.FluidID FROM " & _
         "tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND" & _
		 " tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
Set objRS = objConn.Execute(strSQL)
If NOT objRS.EOF Then
%>
<table width="800" border="1">
		<tr>
		   <td>&nbsp;</td>
		   <td colspan="3"><%
			                Response.Write objRS("TypeNamn")
							objRS.Close
							       %>
		    </td>
		 </tr>
  				<tr> 
    				<td><%
					      intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)
							For i = 1 To intLast
  						  Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)
							If NOT i = intType Then
    							Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
						  objRS.Close
						  End If
						  Next
								%>
				     </td>
    					<td><% strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID, f.FluidID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"
Set objRS = objConn.Execute(strSQL)
%>
<table width="400" border="1">
<form name="fylla" method="post" action="uppdatera2.asp">
<%
Do While Not objRS.EOF
     Response.Write "<TR><TD><INPUT NAME=""leggatill" & objRS("FluidID") & """ TYPE=""checkbox"" VALUE="""& objRS("FluidID") &"""></TD>"		
     Response.Write "<TD>" & objRS("FluidNamn") & "</TD>"
     Response.Write "<TD><INPUT NAME=""volym" & objRS("FluidID") & """ TYPE=""text""></TD></TR>"
     objRS.MoveNext
Loop
End If
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing
 %><input type="submit" value="Lägg till Vätskebalansen">

	</form></table>

<br><br>
<br>
<a href="http://www12.brinkster.com/vatskebalans/tblvetskebalans.asp">Lista tblV&auml;tskebalans inneh&aring;ll</a>

uppdatera2.asp

<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open

For each formObj in Request.Form
     If left(Request.Form(formObj),9) = "leggatill" Then
            lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
            strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "')"
            vatskeb.Execute strSQL, , 128
     End if
Next
            
vatskeb.close
Set vatskeb = Nothing

Response.Redirect "knapp_i3.asp"

 %>
143 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)