---
title: "Kolla om posten finns i db - validera formulär."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/13605-kolla-om-posten-finns-i-db-validera-formulär"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "solbulle"
published: "2001-12-21T23:28:00.000Z"
updated: "2002-01-07T12:21:00.000Z"
replies: 18
views: 347
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/13605-kolla-om-posten-finns-i-db-validera-formulär"
---

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

## #1 — solbulle, 2001-12-21T23:28Z

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)

Permalänk: https://www.webforum.nu/p/13605

## #2 — solbulle, 2001-12-22T09:36Z

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?

Permalänk: https://www.webforum.nu/p/303096

## #3 — solbulle, 2001-12-22T16:54Z

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

\[Redigerat av solbulle den 22 dec 2001\]

Permalänk: https://www.webforum.nu/p/303097

## #4 — solbulle, 2002-01-03T02:46Z

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
```

Permalänk: https://www.webforum.nu/p/303098

## #5 — PatrikB, 2002-01-03T07:27Z

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 ....

Permalänk: https://www.webforum.nu/p/303099

## #6 — solbulle, 2002-01-03T11:05Z

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.

Permalänk: https://www.webforum.nu/p/303100

## #7 — PatrikB, 2002-01-03T11:33Z

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

Permalänk: https://www.webforum.nu/p/303101

## #8 — solbulle, 2002-01-03T12:44Z

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. :(

Permalänk: https://www.webforum.nu/p/303102

## #9 — solbulle, 2002-01-03T13:01Z

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

Permalänk: https://www.webforum.nu/p/303103

## #10 — PatrikB, 2002-01-03T15:13Z

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

Permalänk: https://www.webforum.nu/p/303104

## #11 — solbulle, 2002-01-03T16:25Z

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
```

Permalänk: https://www.webforum.nu/p/303105

## #12 — PatrikB, 2002-01-03T18:12Z

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

Permalänk: https://www.webforum.nu/p/303106

## #13 — solbulle, 2002-01-03T19:57Z

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

Permalänk: https://www.webforum.nu/p/303107

## #14 — solbulle, 2002-01-04T14:19Z

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.

Permalänk: https://www.webforum.nu/p/303108

## #15 — PatrikB, 2002-01-04T14:36Z

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

Permalänk: https://www.webforum.nu/p/303109

## #16 — solbulle, 2002-01-04T15:40Z

YES! Det fungerade, tackar ödmjukast.

Permalänk: https://www.webforum.nu/p/303110

## #17 — solbulle, 2002-01-07T09:48Z

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
```

Permalänk: https://www.webforum.nu/p/303111

## #18 — PatrikB, 2002-01-07T11:48Z

```
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

Permalänk: https://www.webforum.nu/p/303112

## #19 — solbulle, 2002-01-07T12:21Z

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

Permalänk: https://www.webforum.nu/p/303113

---

Tråden på webben: https://www.webforum.nu/amne/asp/13605-kolla-om-posten-finns-i-db-validera-formulär
