---
title: "Databas problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/90492-databas-problem"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "M.Cheraghi"
published: "2003-11-15T17:35:21.000Z"
updated: "2003-11-18T15:01:06.000Z"
replies: 18
views: 403
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/90492-databas-problem"
---

# Databas problem

## #1 — M.Cheraghi, 2003-11-15T17:35Z

```
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM user where uname='"&user&"'"
Set RS = conn.execute(SQL)

if rs.bof and rs.eof then

RS.AddNew 

RS("uname") = user
RS("password") = password1
RS("fname") = fname
RS("sname") = sname
RS("city") = bor

RS.Update
RS.Close
Conn.Close 

else
	response.redirect("registrera2.asp?error=3")
end if

%>
```

jag får felmedelande

> Feltyp:
> ADODB.Recordset (0x800A0CB3)
> Aktuellt Recordset kan inte uppdateras. Det kan bero på en begränsning av providern eller den valda låstypen.

det finns ett bättre sätt med INSERT INTO, men jag kommer förbbannat inte ihåg hur strängen skall se ut.. nån som kan påminna mej lite

nått i denna stil

SQL = "Insert into user where username='"&username&"'"

men jag fr d inte att fungera! =/

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

## #2 — Engine^, 2003-11-15T17:48Z

När du vill uppdatera ett recordset med .Update() måste du först öppna det med [LockType](http://www.devguru.com/Technologies/ado/quickref/recordset_open.html) 2, 3 eller 4, eftersom default är adLockReadOnly (1). Exempelvis för dig så blir det

```
RS.Open strSQL, conn, , 2
```

Då kan du använda dig av .Update()

Om du istället väljer att köra med en INSERT (vilket jag rekommenderar i det här läget) kan det se ut såhär

```
SQL = "INSERT INTO user (uname, password, fname, sname, city) VALUES " & _
  "(' " & user & "'" & _
  ", '" & password1 & "'" & _
  ", '" & fname & "'" & _
  ", ''" & sname & "'" & _
  ", '" & bor & "')"

conn.Execute SQL, , 128
```

När du tilldelar dina variabler user, password1 osv, så hoppas jag att du ser till att göra en 

```
Replace([i]variabel[/i], "'", "''")
```

Så att du inte råkar ut för elakheter.

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

## #3 — @nders, 2003-11-15T17:49Z

Du kan inte öppna ett recordset på det sättet om du ska lägga till data. Du måste använda en annan cursortyp / låstyp.

Och ja, det är bättre att göra INSERT. Exempel:

```
strSQL = "INSERT INTO user (uname, password, fname, sname, city) VALUES ('" & user & "', '" & password1 & "', '" & fname &"', '" & sname & "', '" & bor & "')"
```

Du bör dock byta namn på tabellen user och fältet password, då dessa ord är reserverade av ODBC, och kan skapa felmeddelanden.

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

## #4 — Cannabis_Tomten, 2003-11-15T17:59Z

> Feltyp:
> Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
> \[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] Operationen måste använda en fråga som kan uppdateras.

```
<!--#include file="dbconn.asp" -->
<%
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM user where uname='"&username&"'"
Set RS = conn.execute(SQL)

if rs.bof and rs.eof then

SQL = "Insert Into user(uname, password, fname, sname, city) Values ('"&username& "', '"&password&"','"&fname&"','"&sname& "','"& bor &"')"
Set RS = conn.execute(SQL)

else
	response.redirect("registrera2.asp?error=3")
end if
```

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

## #5 — @nders, 2003-11-15T18:03Z

[Länk 1](http://www.webforum.nu/showthread.php?s=&postid=649856#post649856)

därmed:

[Länk 2](http://www.webforum.nu/search.php?s=&forumid=)

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

## #6 — atra, 2003-11-16T04:13Z

sorry that i am interruppting guys=)
denna kod fungerar bättre!=)

\<!-- #include file="adovbs.inc" --\>
\<% Session.LCID = 1053 %\>

\<%
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "driver={Microsoft Access Driver (\*.mdb)};dbq=" & Server.MapPath("db/db1.mdb")

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

Addera = "Select \* From medlemmar"
RecSet.Open Addera, Conn, 3, 3

	RecSet.ADDNEW

	
	RecSet("namn") = Request.Form("namn")
	RecSet("efternamn") = Request.Form("efternamn")
	RecSet("username") = Request.Form("anvandarnamn")
	RecSet("losen") = Request.Form("losen")
	RecSet("epost") = Request.Form("epost")
	RecSet("datum") = Now()
	RecSet("status") = "offline"	
	RecSet("alder") = Request.Form("alder")
	RecSet("poang") = RecSet("poang")+10
	RecSet("lan") = Request.Form("lan")
	RecSet("reggad") = Now()
	RecSet("ip") = Request.ServerVariables("REMOTE_ADDR")
	RecSet("kon") = Request.Form("kon")
	RecSet("land") = Request.Form("land")

	
	RecSet.Update
	RecSet.Close
	Conn.Close
	Set RecSet= nothing
	Set conn = nothing

	
Session("meddelande") = "Du är nu reggad! Testa o logga in!."
Response.Redirect "default.asp"

%\>

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

## #7 — atra, 2003-11-16T04:15Z

inte bara att du har valt fel sätt(enligt mig) att skriva in te databasen testa mitt så funkar d säkert!=) men sen så har du glömt att adda adovbs.inc tror ja

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

## #8 — Peeer, 2003-11-16T09:29Z

Lägger man in data direkt med en insert så behövs inget recordset skapas. Därför behöver du inte heller inkludera adovbs.inc.

Jag skulle definitivt köra på Engine^ och @nders kod.

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

## #9 — @nders, 2003-11-16T09:31Z

Tilläggas bör, att man behöver *aldrig* inkludera adovbs.inc. Antingen använder man konstanternas värden direkt i koden, eller så definierar man de få konstanter man verkligen använder direkt i koden.

Det finns ingen anledning att inkludera en mastodontfil helt i onödan.

Mvh

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

## #10 — Melea, 2003-11-16T09:33Z

Jao, kör **Engine^** och **@nders** kod, den är 10 ggr snabbare :h

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

## #11 — Wickmark, 2003-11-16T11:00Z

> **Melea skrev:**
>
> Jao, kör **Engine^** och **@nders** kod, den är 10 ggr snabbare :h

Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.

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

## #12 — Sebbe, 2003-11-16T11:02Z

> **Wickmark skrev:**
>
> Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.

Eller så byter du ut alla ' så att det blir två stycken istället (' ').

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

## #13 — Wickmark, 2003-11-16T11:11Z

> **Sebbe skrev:**
>
> > **Wickmark skrev:**
> >
> > Men då måste du radera alla enkla citattecken ( ' ), annars crashar skriptet.
>
> Eller så byter du ut alla ' så att det blir två stycken istället (' ').

Japp, men risken är (om man skriver på engelska) att orden ser lite konstiga ut. 

exempel
don't -\> don''t
it's -\> it''s
that's -\> that''s
eller svenska namn som:
Kalle's -\> Kalle''s
Sebastian's -\> Sebastian''s

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

## #14 — Peeer, 2003-11-16T11:32Z

Nopp!
Att du skriver 2st ' gör bara så att inte sql-frågan ska krascha (sql-injections), dock lagras det bara 1 ' i databasen. Om du istället kör på din varitan (och plockar bort ') då blir en del ord lite konstiga ja.

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

## #15 — atra, 2003-11-16T14:58Z

men i aspsidan's forum så står det att man måste adda adovbs.inc

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

## #16 — atra, 2003-11-16T14:59Z

iförsig använd @nders kod den såg faktiskt lite bättre ut!=)

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

## #17 — atra, 2003-11-16T15:02Z

men vad menar ni med att koden kommer att krascha???

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

## #18 — Macce, 2003-11-16T15:19Z

atra\> ett apostroftecken betyder att det du ska lägga in i dbn slutar där... då kommer IIS försöka tolka resten av strängen som en sql-anrop vilket naturligtvis ger ett fel...

kör funktionen nedan innan du lagrar i db...

```
Function FixForDb(ByVal strData)
	IF NOT Len(Trim(strData))<1 Then 
	strData	=  Replace(strData,"'","''")
	strData	=  Replace(strData & " ","|","")
	END IF
	FixForDb  = strData
 End Function
```

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

## #19 — atra, 2003-11-18T15:01Z

aha oki tack för hjälpen då vet vi!=)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/90492-databas-problem
