webForumDet fria alternativet

Kolla om posten finns i db - validera formulär.

ASP

18 svar · 314 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Nu kollar jag först om en post finns i databasen:

	SQL="SELECT fld_mt_name FROM tbl_movie_title WHERE fld_mt_name ='"& fld_mt_name &"'"
	objRS.open SQL,objConn
	if objRS.eof then

Men nu har jag tänkt lägga till en koll på totalt 4 formulärfältsvariationer, hur implenterar jag det?

jag har typ:

om fnBiroll = objRS("fld_p_firstname") och lnBiroll = objRS("fld_p_lastname") så ska det vara kört! (Med att gå vidare i scriptet och lägga till poster i databasen.)

Jag har fn 4 liknande test jag måste göra (olika formulärfält, typ fnBiroll o lnBiroll)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 22 dec 2001]

Medlem sedan mars 20015 287 inlägg
#2

Kör nu så här:

	Set objRS =Server.CreateObject("ADODB.Recordset")
	Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db4.mdb")

	SQL="SELECT fld_mt_name FROM tbl_movie_title WHERE fld_mt_name ='"& fld_mt_name &"'"
	objRS.open SQL,objConn
	if objRS.eof then

Sen har jag tänkt mig något liknande, men hur får jag ihop det? (princip)

SQL = "select fld_p_lastname, fld_p_firstname FROM  tbl_person WHERE fld_p_lastname='" & lastname & "' AND fld_p_firstname='" & firstnam & "'"
Do Until RS.EOF
fld_p_fn= RS("fld_p_firstname")
fld_p_ln= RS("fld_p_lastname")
If fnHuvudroll = fld_p_fn AND lnHuvudroll = fld_p_ln OR
If fnBiroll = fld_p_fn AND lnBIroll = fld_p_ln 
' och två "lika" rader till
then
' skriv att posten redan finns
	End If
	RS.MoveNext
	Loop 
' gå vidare och lägg till posten

Fullt medveten om at det inte fungerar att skriva så här, men hur gör jag?

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 22 dec 2001]

Medlem sedan mars 20015 287 inlägg
#3

glöm det...
problemet löst.

[Redigerat av solbulle den 22 dec 2001]

Medlem sedan mars 20015 287 inlägg
#4

Argh..

Gubbar & Gummor, Hjälp!
Hur gör jag en smidigre funktion av detta, i alla fall något som uppnår samma resultat med mindre kod.
Vill alltså kolla om mina variabelvärden (för & efternamn) redan finns i databasen. Är nu uppe i 12 av dessa if-satser, känns ganska fel.

	Do Until RS.EOF

fld_p_fn= LCase(RS("fld_p_firstname"))
fld_p_ln= LCase(RS("fld_p_lastname"))

If LCase(fnHuvudroll) = fld_p_fn AND LCase(lnHuvudroll) = fld_p_ln then
testvar = "ZZZ"
vilkenvar ="huvudroll"
else 
If LCase(fnBiroll) = fld_p_fn AND LCase(lnBiroll) = fld_p_ln then
testvar = "zzz"
vilkenvar ="biroll"
else 
If LCase(fnProducent) = fld_p_fn AND LCase(lnProducent) = fld_p_ln then
testvar = "zzz"
vilkenvar ="producent"
else 
If LCase(fnRegi) = fld_p_fn AND LCase(lnRegi) = fld_p_ln then
vilkenvar ="Regi"
testvar = "zzz"

Exit Do
else
testvar = "XXX"

end if
end if
end if
end if

	RS.MoveNext
	Loop

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 03 jan 2002]

Medlem sedan mars 20002 836 inlägg
#5

Vad är det du vill få fram? huvudsyftet med koden?

Att lägga till, att söka efter person etc.?

cya,
PatrikB - som e lite trött just nu ....

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

Medlem sedan mars 20015 287 inlägg
#6

Jag har ett formulär där man ska skriva in personer som sen ska lagras i en databas. Jag vill med denna kod kolla så att de ej redan finns i databasen.
variabeln vilkenvar har jag med för att kunna peka på var det blev fel.
testvar har jag använt som kvitto på om någon fanns el inte.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 03 jan 2002]

Medlem sedan mars 20002 836 inlägg
#7

När du skickar formuläret:

Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "select fld_p_lastname, fld_p_firstname FROM tbl_person WHERE fld_p_lastname='" & lastname & "' AND fld_p_firstname='" & firstnam & "'"

RS.Open SQL, Conn, 3, 3

If objRS.EOF
'## -- lägg till person --
.AddNew
RS("fld_p_firstname") = firstname
RS("fld_p_lastname") = lastname
.Update
Else
'## -- gör vad du ska ompersonen redan finns
End If

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

Medlem sedan mars 20015 287 inlägg
#8

Får inte till det med resten av mitt script.
Skulle nog föredra i dagsläget att ha en funktion som bara kolla om det är ok att lägga in och är det det så fortsätter sidan att rulla.
Å inte klarar jag av att göra det med ovanstående heller. :(

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20015 287 inlägg
#9

Glöm det, det fungerar, hade glömt att "Dimma" en variabel... suck.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20002 836 inlägg
#10

Vore trevligt om du visade lite kod på hur du fick det att fungera eftersom det säkert kommer flera med samma problem.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

Medlem sedan mars 20015 287 inlägg
#11

Ursäkta mig, det är klart att jag ska göra det.

Mitt problem med din ursprungliga kod är att jag inte ännu har en del andra variabler som är beroende av dessa(?)
Annars hade det nog i sig fungerat bra.

En följdfråga, är det bra att öppna o stänga databasen så här för varje gång jag kallar på funktionen el. kan man lägga öppnandet o stängandet utanför?


Dim testvar

KOLLAFILM fnHuvudroll,lnHuvudroll

'osv med flera kallande av funktionen.

Function KOLLAFILM(str1,lastnamea)

	Set RS =Server.CreateObject("ADODB.Recordset")
	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("dbfilm.mdb")

SQL = "select fld_p_lastname, fld_p_firstname FROM tbl_person WHERE fld_p_lastname='" & lastnamea & "' AND fld_p_firstname='" & firstnamea & "'"

	Conn.Execute(SQL)
	RS.Open SQL, Conn, 3, 3

If RS.EOF THEN

testvar = "XXX" 
Else
testvar = "ZZZ"
End If

	RS.close
	set RS = nothing
	Conn.Close
	set Conn = nothing

End Function

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20002 836 inlägg
#12

Om du behöver information från databasen mer än en ggn så skulle jag öppna databasen utanför funktionen och "passa in" conn-objectet i funktionen, dvs, låta funktionen endast skapa och returnera ett recordset.

Onödigt att öppna och stänga databasen flera ggr under exekveringen av scriptet.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

[Redigerat av PatrikB den 03 jan 2002]

Medlem sedan mars 20015 287 inlägg
#13

Jo, men hur gör jag då det?

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20015 287 inlägg
#14

Ingen som vet hur jag flyttar ut databasöppningen utanför min funktion.
Och gör som PatrikB skriver med connobjektet(?)

Kanske även gärna ett bra exempel på att ha databaskopplingen i en separat funktion?
Har sökt men inte hittat ngt jag tycker fungerar här.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20002 836 inlägg
#15

OK,
Här kommer det lite kod. Du får modifiera så att det funkar för dig som du vill ha det ....

Dim objDB, objRSfilm
Dim strConnString, strFirstName, strLastName

strFirstName = "Patrik"
strLastName = "Berggren"

strConnString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("dbfilm.mdb")

Set objDB = GetConn(strConnString)

Response.Write KOLLAFILM(strFirstName, strLastName, objDB)

objDB.Close
set objDB = Nothing

'## -- funktioner --

'## -- skapar och returnerar ett connection object --
Function GetConn(ByVal sConnString)
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open sConnString
Set GetConn = objConn
End Function

'## -- kolla film --
Function KOLLAFILM(firstnamea,lastnamea, oConn)
Dim SQL
Dim objConn, objRS
Dim testvar

SQL = "select fld_p_lastname, fld_p_firstname FROM tbl_person WHERE fld_p_lastname='" & lastnamea & "' AND fld_p_firstname='" & firstnamea & "'"

Set objRs = oConn.Execute(SQL)

If RS.EOF THEN
	testvar = "XXX" 
Else
	testvar = "ZZZ"
End If

set RS = nothing

KOLLAFILM = testvar
End Function

något sådant .....

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

[Redigerat av PatrikB den 04 jan 2002]

Medlem sedan mars 20015 287 inlägg
#16

YES! Det fungerade, tackar ödmjukast.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20015 287 inlägg
#17

Jaha, börjar bli gråhårig, det vill inte.
Jag kan ju inte köra detta "flera" gånger.
Om jag först kör en test som faller ut ok, posten finns i db blir min variabel testvar = ZZZ, men kör jag den en gång till och personen inte finns blir den ju XXX. Då faller ju det ttidigare resultatet (givetvis...) bort.
Hur gör jag för att om testvar någonsin är ZZZ skall sidan inte fortsätta?

Min tanke först var ju att kolla om testvar = XXX och i så fall fortsätta med databaasinläggning osv.

Kör nu som nedan:

'======================================================
'### KOLLAR OM PERSONERNA REDAN FINNS I DATABASEN.

Set objDB = GetConn(strConnString)

testvar = KOLLAFILM("firstnameHuvudroll", "lastnameHuvudroll", objDB)
testvar = KOLLAFILM("firstnameBiroll", "lastnameBiroll", objDB)

objDB.Close
set objDB = Nothing

'======================================================
'## -- funktioner --

'## -- skapar och returnerar ett connection object --
Function GetConn(ByVal sConnString)
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open sConnString
Set GetConn = objConn
End Function

'## -- kolla film --

Function KOLLAFILM(firstnamea, lastnamea, oConn)
Dim SQL
Dim objConn, objRS

'### --- ny m Request.Form ---

SQL = "select fld_p_lastname, fld_p_firstname FROM tbl_person WHERE fld_p_lastname='" & Request.Form("" & lastnamea & "") & "' AND fld_p_firstname='" & Request.Form("" & firstnamea & "") & "'"

Set objRs = oConn.Execute(SQL)

'vilkenvar = ?

If objRs.EOF THEN
testvar = "XXX" 
Else testvar ="ZZZ"
End If
set objRs = nothing

KOLLAFILM = testvar
End Function

'======================================================
'### OM PERSONEN INTE FINNS SÅ KÖRS SIDAN VIDARE HÄR,
'### ANNARS HOPPAR DEN TILL ELSE-SATSEN I SLUTET AV SIDAN.

If testvar = "XXX" then

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan mars 20002 836 inlägg
#18
strHuvudRoll = KOLLAFILM("firstnameHuvudroll", "lastnameHuvudroll", objDB)
strBiRoll = KOLLAFILM("firstnameBiroll", "lastnameBiroll", objDB)

så har du resultaten i 2 olika variabler som sedan kan valideras på var för sig.

If-satsten får du ju oxå lov att ändra så att den passar de nya variablerna.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

[Redigerat av PatrikB den 07 jan 2002]

Medlem sedan mars 20015 287 inlägg
#19

Ja du, det är inte lätt naär man har huvudet under armen, tack.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)