webForumDet fria alternativet

Select som känner av om post redan finns?

ASP

11 svar · 284 visningar · startad av brw

Medlem sedan juli 2000619 inlägg
Frågan#1

Jag har gjort en liten kodsnutt som är som följer:

<%
reasoncode=Request.Form("reasoncode")

If len(trim(reasoncode))> 0 then
	reasoncode= "%" & reasoncode & "%"
End If

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb" 

	Set RecSet = Server.CreateObject("ADODB.Recordset")

   SQLStmt = "SELECT * FROM reason WHERE reasoncode = reasoncode order by reasoncode"

	Set visa = Connect.Execute(SQLStmt)

 If EOF then

   Addera = "SELECT * FROM reason"

   RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

	RecSet.AddNew

	RecSet("reasoncode") = Request.Form("reasoncode")	
	RecSet("reasone") = Request.Form("reasone")	
	RecSet("reasons") = Request.Form("reasons")	
	RecSet("datereg") = Request.Form("datereg")
	RecSet("regger") = Request.Form("regger")	
	

	RecSet.Update
	RecSet.Close
	Connect.Close 

else

Response.Write "Posten existerar redan"
end if
%>

Jag vill alltså att den ska kolla om reasoncode redan finns reggat.. om inte så ska den regga den nya posten.

Koden som jag har nu fungerar inte.

Kanske finns det något enklare sätt att lösa det?

/brw

Medlem sedan dec. 19996 721 inlägg
#2

3 fel.

If len(trim(reasoncode))> 0 then
reasoncode= "%" & reasoncode & "%"
End If

...men vad händer om reasoncode är tom?

SQLStmt = "SELECT * FROM reason WHERE reasoncode = reasoncode order by reasoncode"

Du måste stoppa in variabeln reasoncode i SQL-satsen

if EOF

ska vara if visa.EOF

Dessutom är det mycket bättre att använda en INSERT-sats, i stället för AddNew.

Medlem sedan juli 2000619 inlägg
#3

Hur jag ska formulera det då? om fältet är tomt och om det redan finns...

Om det är tomt så ska den skriva ut tex.
Inget värde angavs eller något sånt och om det redan finns så skall den skriva att värdet är upptaget el. liknande.

Har du lust att hjälpa mig med koden? =)

/brw

Medlem sedan juli 2000836 inlägg
#4

Skulle inte detta kunna gå?

<%
reasoncode=Request.Form("reasoncode")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb" 

Set RecSet = Server.CreateObject("ADODB.Recordset")

SQLStmt = "SELECT * FROM reason WHERE reasoncode = reasoncode order by reasoncode"

RecSet.Open SQLStmt, Connect, adOpenStatic, adLockOptimistic

X =FALSE
Do Until X = TRUE OR RecSet.EOF 

If len(trim(RecSet("reasoncode"))) > 0 Then
X = TRUE
Exit Do
End If 

RecSet.MoveNext 

Loop 

If X = TRUE then

Response.Write "Posten existerar redan"

RecSet.Close
Connect.Close 

Else

RecSet.Close
Connect.Close 

Addera = "SELECT * FROM reason"

RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

RecSet.AddNew

RecSet("reasoncode") = Request.Form("reasoncode") 
RecSet("reasone") = Request.Form("reasone") 
RecSet("reasons") = Request.Form("reasons") 
RecSet("datereg") = Request.Form("datereg")
RecSet("regger") = Request.Form("regger") 

RecSet.Update
RecSet.Close
Connect.Close 

end if
%>

------------------
Ignorance is a bliss!

Medlem sedan dec. 19996 721 inlägg
#5

Nej. Fel 1 och 2 kvarstår. Onödigt att loopa över RecSet.

<%
reasoncode=Request.Form("reasoncode")
If len(trim(reasoncode))> 0 then
reasoncode= "%" & reasoncode & "%"

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb" 

Set RecSet = Server.CreateObject("ADODB.Recordset")

SQLStmt = "SELECT * FROM reason WHERE reasoncode = " & reasoncode

Set visa = Connect.Execute(SQLStmt)

If visa.EOF then

SQLstmt="INSERT INTO reason (reasoncode,reasone,reasons,datereg,regger) VALUES ('" & reasoncode & "','" & Request.Form("reasone") & "','" & Request.Form("reasons") & "','" & Request.Form("datereg") & "','" & Request.Form("regger") & "'"

Connect.Execute(SQLstmt)
else
Response.Write "Posten existerar redan"
end if

Connect.Close 

else

Response.Write "Inget värde angavs"

End If

%>

------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB

Medlem sedan juli 2000619 inlägg
#6

hmmm fungerar inte..
den visar iaf. att inget värde angavs om jag inte gör det ... men anger jag ett värde som jag vet inte finns så skriver den iaf. ut att det redan existerar och addar det inte i databasen och om jag skriver ett som redan existerar blir det likadant?

/brw

Medlem sedan dec. 19996 721 inlägg
#7

Ta bort

If len(trim(reasoncode))> 0 then
reasoncode= "%" & reasoncode & "%"

Det är ju inte en LIKE-sökning.

Vad är det för datatyper på fälten?

------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB

Medlem sedan juli 2000619 inlägg
#8

Hmm jag får det inte att funka... koden ser ut så här nu:

<%
reasoncode = Request.Form("reasoncode")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb" 

Set RecSet = Server.CreateObject("ADODB.Recordset")

SQLStmt = "SELECT * FROM reason WHERE reasoncode = reasoncode"

Set visa = Connect.Execute(SQLStmt)

If visa.EOF then

SQLstmt="INSERT INTO reason (reasoncode,reasone,reasons,datereg,regger) VALUES ('" & reasoncode & "','" & Request.Form("reasone") & "','" & Request.Form("reasons") & "','" & Request.Form("datereg") & "','" & Request.Form("regger") & "'"

Connect.Execute(SQLstmt)
else
Response.Write "Posten existerar redan"
end if

Connect.Close 

else

Response.Write "Inget värde angavs"

End If

%>

Det är vanliga textfält i databasen. utom ID då förstås

Medlem sedan dec. 19996 721 inlägg
#9

Läs igenom mina inlägg! Du har fortfarande ingen variebel i select-satsen. :)

Medlem sedan juli 2000619 inlägg
#10

Jag får det inte att fungera... vad saknas?

Det blir följande fel:

Syntaxfel

addreasoninsert.asp, rad 27

else
^

Medlem sedan dec. 19996 721 inlägg
#11

Hur ser koden ut nu?

------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB

Medlem sedan juli 2000619 inlägg
#12

Såhär ser den ut nu:


<%
reasoncode = Request.Form("reasoncode")
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb" 

Set RecSet = Server.CreateObject("ADODB.Recordset")

SQLStmt = "SELECT * FROM reason WHERE reasoncode = reasoncode"

Set visa = Connect.Execute(SQLStmt)

If visa.EOF then

SQLstmt="INSERT INTO reason (reasoncode,reasone,reasons,datereg,regger) VALUES ('" & reasoncode & "','" & Request.Form("reasone") & "','" & Request.Form("reasons") & "','" & Request.Form("datereg") & "','" & Request.Form("regger") & "'"

Connect.Execute(SQLstmt)
else
Response.Write "Posten existerar redan"
end if

Connect.Close 

else

Response.Write "Inget värde angavs"

End If

%>

/brw

325 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
156 ms — deklarationer (db)
0 ms — hämta statistik (cache)
166 ms — hämta tråd, inlägg och bilagor (db)
154 ms — ändringar (db)