---
title: "Ändra kodstruktur"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/178119-ändra-kodstruktur"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "dareknowak"
published: "2009-04-19T11:33:42.000Z"
updated: "2009-04-21T15:28:15.000Z"
replies: 30
views: 1367
page: 1
pages: 2
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/178119-ändra-kodstruktur"
---

# Ändra kodstruktur

_Sida 1 av 2._

## #1 — dareknowak, 2009-04-19T11:33Z

Tänkte förenkla min kodstruktur lite men har nu fastnat.

Men hur förenklar man detta?

```
Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.RecordSet")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath

SQL = "SELECT * FROM tabell"
objConn.Execute SQL
objRS.Open SQL, objConn, adOpenStatic, adLockOptimistic

objRS.AddNew

objRS("user") = strUser

objRS.Update
objRS.Close
objConn.Close
```

Testade med detta men funkade inte och fick error

```
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
set objRS=objConn.execute("SELECT * FROM tabell",adOpenStatic, adLockOptimistic)

objRS.AddNew

objRS("user") = strUser

objRS.Update
objRS.Close
objConn.Close
```

Felmeddelande:
"ADODB.Connection fel '800a0bb9'

Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.

/test/index.asp, rad 14"

Rad 14: "set objRS=objConn.execute("SELECT \* FROM tabell",adOpenStatic, adLockOptimistic)"

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

## #2 — voigtann1, 2009-04-19T11:38Z

set objRS=objConn.execute("SELECT \* FROM tabell")

Men du borde verkligen inte använda dig av något av dessa, använd en SQL INSERT INTO istället för det du försöker göra nu.

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

## #3 — dareknowak, 2009-04-19T13:59Z

> **[voigtann1 skrev:](https://www.webforum.nu/p/1464958)**
>
> set objRS=objConn.execute("SELECT \* FROM tabell")
>
> Men du borde verkligen inte använda dig av något av dessa, använd en SQL INSERT INTO istället för det du försöker göra nu.

Använder jag mig av den så får jag fram följande felmeddelande:
"ADODB.Recordset fel '800a0cb3'

Aktuellt Recordset kan inte uppdateras. Det kan bero på en begränsning av providern eller den valda låstypen.

/nowakit/kundvagn.asp, rad 16"

Rad 16: "objRS.AddNew"

Vad är det egentligen för skillnad att använda SELECT och lägga in information med objrs("test") = värde än att använda INSERT INTO och lägga in det direkt i sql satsen?

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

## #4 — Biasse, 2009-04-19T14:12Z

```
Set objConn = Server.CreateObject("ADODB.Connection") 
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath

objConn.Execute("INSERT INTO tabell (user) Values('"& strUser &"')")

objConn.Close : Set objConn = nothing
```

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

## #5 — dareknowak, 2009-04-19T14:14Z

> **[Biasse skrev:](https://www.webforum.nu/p/1464973)**
>
> ```
> Set objConn = Server.CreateObject("ADODB.Connection") 
> objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath
> 
> objConn.Execute("INSERT INTO tabell (user) Values('"& strUser &"')")
> 
> objConn.Close : Set objConn = nothing
> ```

Jo jag vet hur man gör men menade på vad det är för skillnad rent tekniskt?

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

## #6 — voigtann1, 2009-04-19T14:25Z

Att du använder ett Recordset för att uppdatera, medans med Connection ojbektet så kör du en riktigt SQL insert.

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

## #7 — Ledel, 2009-04-19T14:36Z

**SELECT \* FROM tabell** hämtar ALLT från tabell, och du behöver inte detta till något. Att köra en INSERT TO blir därmed enormt mycket bättre sett till prestandan, då du inte skapar några onödiga objekt som du inte behöver.

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

## #8 — dareknowak, 2009-04-19T15:33Z

Men INSERT TO kan inte användas i det här sammanhanget? Då måste jag använda mig av ett recordset?

```
strUser = objRS("user")
If objRS("user") = strUser Then
objRS("antal") = objRS("antal") +1
End If
```

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

## #9 — Ledel, 2009-04-19T15:44Z

Något i stil med "UPDATE tabell SET antal = antal + 1 WHERE user = '" & strUser "'" borde fungera!

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

## #10 — Fredde Mannen, 2009-04-19T15:50Z

```
strUser = objRS("user")
If objRS("user") = strUser Then
objRS("antal") = objRS("antal") +1
End If
```

Det där ser ut som en UPDATE. 

Det finns tre grundkommandon i SQL. 
1 ) INSERT INTO table, vilket lägger in en ny post med data i en tabell.
2 ) UPDATE table , vilket uppdaterar en befintlig post med ny data.
3 ) SELECT , vilket hämtar rader med data från en tabell baserad på vilkor. 

Kan väl säga så, det är lite skillnad på ADORecordset objekt insättning och connection objekt insättning. 

Connection objektet är snabbare och kräver mindre resurser av servern, medans recordset objektet är mer resurskrävande.

Connection objektet är vanligtvis det man brukar föredra.  Dock är det i slutändan upp till var och en vad man väljer. 

Mycket beror också på hur pass mycket belastning scripten har. :)

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

## #11 — dareknowak, 2009-04-19T16:18Z

Okej, skulle det vara bättre att göra såhär?

```
If objRS("user") = strUser Then
sqlupdate
Else
sqlinsertto
End If
```

I detta läge måste jag ju skapa ett recordset i vilket fall och kanske lika bra att updatera direkt via det?

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

## #12 — dareknowak, 2009-04-19T17:56Z

varför går det inte köra den if satsen bara för objrs("user") är tom? (När tabellen i databasen är tömd)
Hur löser man det?

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

## #13 — voigtann1, 2009-04-19T18:31Z

```
If objRS.EOF
'INSERT
Else
'UPDATE
End If
```

Om en SQL inte retunera någon data så har den inte några fält att arbeta med. så du får använda dig av End Of File (EOF) för att se om den innehåller någon data efter SQL frågan.

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

## #14 — dareknowak, 2009-04-19T19:02Z

Så det ska alltså bli såhär då?

```
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath

Set objRS=objConn.execute("SELECT * FROM [tabell] WHERE user = '" & strUser & "' AND usertype = '" & strUsertype & "'")

If objRS.EOF Then
objConn.Execute("INSERT INTO tabell (user,usertype,antal) Values('"& strUser &"','"& strUsertype &"','"& strAntal &"')")
Else
objConn.Execute("UPDATE tabell SET antal = antal + 1 WHERE user = '" & strUser & "'")
End If

objRS.Close
objConn.Close
```

Blir det då inte lättare och mindre prestanda krävande att göra detta direkt med ett recordset?

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

## #15 — dareknowak, 2009-04-20T19:25Z

Ett ja eller nej skulle sitta fint? :)

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

## #16 — voigtann1, 2009-04-20T19:47Z

Set objRS=objConn.execute("SELECT \* FROM \[tabell\] WHERE user = '" & strUser & "' AND usertype = '" & strUsertype & "'")

Om du inte skall använda recordsetet mer än att se att användaren finns så behöver du inte hämta ut all data med \*, räcker med exempelvis användarnamn eller select 1 .... för att retunera 1(och inte EOF).

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

## #17 — dareknowak, 2009-04-20T22:10Z

Men för att få svar på min huvudsakliga fråga så kan vi ta ett annat exempel hur får man detta 

```
SQL = "DELETE FROM tabell WHERE user = '" & strUser "'"
   objConn.Execute SQL,,128
```

till denna formen

```
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'")
```

Hur man alltså får in ",,128" i sql satsen?

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

## #18 — Ledel, 2009-04-20T22:40Z

Gissning, men:

```
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'",,128)
```

borde fungera.

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

## #19 — dareknowak, 2009-04-21T08:55Z

> **[Ledel skrev:](https://www.webforum.nu/p/1465159)**
>
> Gissning, men:
>
>
> ```
> objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'",,128)
> ```
>
> 
> borde fungera.

Japp det trodde jag osså men då får jag felmeddelande:

Kompileringsfel i Microsoft VBScript fel '800a0414'

Det går inte att använda parenteser när en Sub anropas.

/test/index.asp, rad 29

objConn.execute("DELETE FROM tabell WHERE user = '" & strUser & "'",,128)

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

## #20 — @nders, 2009-04-21T09:05Z

Bort med parenteserna. Maken till tydligt felmeddelande... ;)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/178119-ändra-kodstruktur  
Nästa sida: https://www.webforum.nu/amne/asp/178119-ändra-kodstruktur/page2.md
