---
title: "Några invändningar mot den?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/90597-några-invändningar-mot-den"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "medialabs"
published: "2003-11-17T10:00:11.000Z"
updated: "2003-11-18T22:08:07.000Z"
replies: 31
views: 1032
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/90597-några-invändningar-mot-den"
---

# Några invändningar mot den?

_Sida 1 av 2._

## #1 — medialabs, 2003-11-17T10:00Z

df

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

## #2 — Engine^, 2003-11-17T10:10Z

Den första loopen går att snabba upp lite grand

```
Addera = "Select 1 From tbluppgifter WHERE username = '" & Replace(Request.Form("username"), "'", "''") & "'"
RecSetREG.Open Addera, ConnectREG, 3, 3

If Not RecSetREG.EOF Then
  Session("meddelande") = " Detta användarnamn va upptaget, var vänlig och välj ett annat."

  RecSetREG.Close
  Set RecSetREG = Nothing

  Response.Redirect "/Plus/bli_medlem.asp"
End If

RecSetREG.Close
```

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

## #3 — medialabs, 2003-11-17T10:54Z

Undrar lite om ReplikeringsID i access, vad vinner man på att använda den som ID, istället för att få 1,2,3 osv..

Ex.
{E17FC3B1-BFE1-460F-8FB0-E4EB56BE1B48}

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

## #4 — Engine^, 2003-11-17T11:01Z

Det kan vara bra om du använder databasreplikering och synkroniserar, men annars så tror jag inte att man har någon nytta av det.

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

## #5 — OveRRidE, 2003-11-17T11:07Z

- Du har inte en enda Dim i hela koden. Option Explicit saknas också.
- Sålänge du inte *måste* eller har bra anledning till att  köra .open med de där konstanterna, och vill ha prestanda, så rekommenderar jag .execute(dinSQL),,128 på connection-objectet istället, då slipper du dessutom att skapa (eller få tillbaks) ett recordset.
- Använd While...Wend istället för Do Until, det skall vara en aning snabbare.

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

## #6 — Engine^, 2003-11-17T11:26Z

> **OveRRidE skrev:**
>
> - Du har inte en enda Dim i hela koden. Option Explicit saknas också.
> - Sålänge du inte *måste* eller har bra anledning till att  köra .open med de där konstanterna, och vill ha prestanda, så rekommenderar jag .execute(dinSQL),,128 på connection-objectet istället, då slipper du dessutom att skapa (eller få tillbaks) ett recordset.
> - Använd While...Wend istället för Do Until, det skall vara en aning snabbare.

- Är inte alla variabler i VBScript av typen Variant? Hjälper det något om man använder Dim?
- Hmm... är det inte så att Connection.Execute implicit skapar ett recordset? Det hade jag för mig ivarjefall.
- All prestandaförtjänst är bra :) Oavsett om man använder While...Wend eller Do Until...Loop, så tjänar man betydligt mer på att referera till kolumner i ett recordset i en loop med ett index. Ex.: Recordset(*i*) istället för Recordset("kolumnnamn")

Med det sagt kan jag ju bidra med ett kodexempel också...

```
<%
Option Explicit
Response.Buffer = True

Function FixInject(strSource)
  FixInject = Replace(strSource, "'", "''")
End Function

Dim Addera, ConnectREG, lngRA, strConn

Set ConnectREG = Server.CreateObject("ADODB.Connection")
strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=g:\hom\plus.mdb;"

Addera = "UPDATE tbluppgifter SET username = username WHERE username = '" & FixInject(Request.Form("username")) & "'"

ConnectREG.Open strConn
ConnectREG.Execute Addera, lngRA, 128
ConnectREG.Close

If lngRA > 0 Then
  Session("meddelande") = " Detta användarnamn va upptaget, var vänlig och välj ett annat."

  Set ConnectREG = Nothing

  Response.Redirect "/Plus/bli_medlem.asp"
End If

Addera = "INSERT INTO tbluppgifter (username, password, regIP, lastIP, fname, lname, authkey, reggad) VALUES " & _
  "('" & FixInject(Request.Form("username")) & "'" & _
  ", '" & FixInject(Request.Form("password")) & "'" & _
  ", '" & FixInject(Request.Form("regIP")) & "'" & _
  ", '" & FixInject(Request.Form("LastIP")) & "'" & _
  ", '" & FixInject(Request.Form("fname")) & "'" & _
  ", '" & FixInject(Request.Form("lname")) & "'" & _
  ", '" & FixInject(Request.Form("authkey")) & "'" & _
  ", #" & Now() & "#)"

ConnectREG.Open strConn
ConnectREG.Execute Addera, , 128
ConnectREG.Close
Set ConnectReg = Nothing
```

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

## #7 — @nders, 2003-11-17T11:30Z

> **Engine^ skrev:**
>
> Hmm... är det inte så att Connection.Execute implicit skapar ett recordset? Det hade jag för mig ivarjefall.

Jo, det stämmer. Så länge man inte slänger med 128 (konstantens namn är adExecuteNoRecords) när man exekverar sin SQL-fråga, enligt OveRRidEs förslag ovan.

**red:** fan ta överridaren för blandningen av gemener och versaler. ;)

Mvh

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

## #8 — Engine^, 2003-11-17T11:33Z

> **@nders skrev:**
>
> Så länge man inte slänger med 128 (konstantens namn är adExecuteNoRecords) när man exekverar sin SQL-fråga, enligt OveRRiDes förslag ovan.

Jag kom på det när jag knapprade ner mitt kodförslag :) Ibland hänger man inte med sig själv i sina egna svängar ens en gång ;)

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

## #9 — OveRRidE, 2003-11-17T12:04Z

> **Motorn skrev:**
>
> Är inte alla variabler i VBScript av typen Variant? Hjälper det något om man använder Dim?

Det stämmer, då det egentligen inte finns några datatyper i VBScript, utan precis som du säger; varianter. 

Jag har dock en förnimmelse av att Dim ger en prestandaökning, men jag kan dock ha fel. I vilket fall som helst; Option Explicit, som tvingar Dim på alla variablar, ger ju dock fördelar i din felsökning och det nu skulle vara så att du namnger något fel. På det viset vinner man nog i tid på att använda det.

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

## #10 — medialabs, 2003-11-17T14:32Z

Engine^:

Så det fungerar bättre med det kodförslaget som du skrev nyss? Då tar jag och använder mig av den i fortsättningen :)

Om ni andra inte har nått att tillägga  ;)

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

## #11 — Engine^, 2003-11-17T14:45Z

Ur prestandasynpunkt kan man säga att det fungerar bättre. Men om man inte riktigt förstår koden, så fungerar det nog faktiskt sämre... :)

Jag skulle ha skrivit på det sättet från början, eftersom jag kodar efter den stilen :)

Hoppas det fungerar bra för dig också. :bire

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

## #12 — Sebbe, 2003-11-17T14:55Z

En liten fråga bara: varför öppnar och stänger du connection-objectet två gånger? :q

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

## #13 — Engine^, 2003-11-17T15:05Z

> **Sebbe skrev:**
>
> En liten fråga bara: varför öppnar och stänger du connection-objectet två gånger? :q

För att vara säker på att det är stängt i händelse av att namnet var upptaget och det sker en Response.Redirect.

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

## #14 — Sebbe, 2003-11-17T15:08Z

Jo, men är det inte bara att lägga .Close i If-satsen också?
Då behöver du ju inte öppna objektet igen, eftersom att om det stängdes så skickades användaren iväg till en annan sida.

Eller? :q

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

## #15 — Engine^, 2003-11-17T15:16Z

Sant. Det är en bättre lösning att flytta in den första ConnectREG.Close till If-satsen. Då slipper man en smula overhead för att anropa Close, Open i onödan :)

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

## #16 — Nickemannen, 2003-11-17T15:26Z

Skippa Sessionen är ju också ett tips sätt en querystring med ett nummer vilket felmeddelande och ha en sträng med en array där det finns olika felmeddelanden i filen som den skickas vidare till.

Server.CreateObject("ADODB.Recordset")
När man skapar objektet borde väl det ta upp minne :S. Så är det inte bättre att skippa det ?

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

## #17 — Engine^, 2003-11-17T15:34Z

> **Nickemannen skrev:**
>
> Skippa Sessionen är ju också ett tips sätt en querystring med ett nummer vilket felmeddelande och ha en sträng med en array där det finns olika felmeddelanden i filen som den skickas vidare till.

Det kan ju vara att föredra. Exempel kan man ju skicka tillbaka esmg=1 och sedan hantera det med

```
intError = Request.QueryString("emsg")

Select Case intError
  Case 1
    Response.Write "Namnet var upptaget. Välj ett annat."
End Select
```

> **Nickemannen skrev:**
>
> Server.CreateObject("ADODB.Recordset")
> När man skapar objektet borde väl det ta upp minne :S. Så är det inte bättre att skippa det ?

Det är ju redan gjort... tittade du på fel kod kanske? ;)

Vi tar koden igen...

```
<%
Option Explicit
Response.Buffer = True

Function FixInject(strSource)
  FixInject = Replace(strSource, "'", "''")
End Function

Dim Addera, ConnectREG, lngRA, strConn

Set ConnectREG = Server.CreateObject("ADODB.Connection")
strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=g:\hom\plus.mdb;"

Addera = "UPDATE tbluppgifter SET username = username WHERE username = '" & FixInject(Request.Form("username")) & "'"

ConnectREG.Open strConn
ConnectREG.Execute Addera, lngRA, 128

If lngRA > 0 Then
  Session("meddelande") = " Detta användarnamn va upptaget, var vänlig och välj ett annat."

  ConnectREG.Close
  Set ConnectREG = Nothing

  Response.Redirect "/Plus/bli_medlem.asp"
  [blue]'Response.Redirect "/plus/bli_medlem.asp&emsg=1" 'En annan metod, som kan vara trevlig[/blue]
End If

Addera = "INSERT INTO tbluppgifter (username, password, regIP, lastIP, fname, lname, authkey, reggad) VALUES " & _
  "('" & FixInject(Request.Form("username")) & "'" & _
  ", '" & FixInject(Request.Form("password")) & "'" & _
  ", '" & FixInject(Request.Form("regIP")) & "'" & _
  ", '" & FixInject(Request.Form("LastIP")) & "'" & _
  ", '" & FixInject(Request.Form("fname")) & "'" & _
  ", '" & FixInject(Request.Form("lname")) & "'" & _
  ", '" & FixInject(Request.Form("authkey")) & "'" & _
  ", #" & Now() & "#)"

ConnectREG.Open strConn
ConnectREG.Execute Addera, , 128
ConnectREG.Close
Set ConnectReg = Nothing
```

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

## #18 — medialabs, 2003-11-17T15:36Z

Jag får fel på: 

rad: ConnectREG.Execute Addera, , 128

Microsoft JET Database Engine fel '80040e14' 

Syntaxfel i INSERT INTO-uttryck.

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

## #19 — Engine^, 2003-11-17T15:42Z

Ok. Det är ett fel i frågan... skriv ut frågan, så är det enklare att se vart jag har gjort en miss någonstans.

```
Response.Write Addera
```

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

## #20 — medialabs, 2003-11-17T15:47Z

> **Engine^ skrev:**
>
> Ok. Det är ett fel i frågan... skriv ut frågan, så är det enklare att se vart jag har gjort en miss någonstans.
>
> ```
> Response.Write Addera
> ```

Satte den ovan för Addera = "INSERT INTO tbluppgifter (username,......

då blev det:

UPDATE tbluppgifter SET username = username WHERE username = 'testuser'

och om jag sätter den under Addera = "INSERT INTO...

blev det:
INSERT INTO tbluppgifter (username, password, regIP, lastIP, fname, lname, authkey, reggad) VALUES ('tesuser', '12345', 'testa', 'skriva', 'hej', 'jag', 'ska', #2003-11-17 16:49:24#)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/90597-några-invändningar-mot-den  
Nästa sida: https://www.webforum.nu/amne/asp/90597-några-invändningar-mot-den/page2.md
