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)
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?
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
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.
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 *=-
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. :(
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
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 *=-
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 *=-
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