---
title: "Läsa tomma fält"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/88014-läsa-tomma-fält"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Fireh"
published: "2003-10-08T18:00:38.000Z"
updated: "2003-10-08T19:18:37.000Z"
replies: 14
views: 304
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/databaser-sql/88014-läsa-tomma-fält"
---

# Läsa tomma fält

## #1 — Fireh, 2003-10-08T18:00Z

Om jag försöker läsa data ur ett fält som råkar vara tomt, så skiter sig allt. Ska det vara så?

Om jag t.ex. kör följande:

```
Text = rs("Text")
```

Så får jag följande:

> Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
> En OLE DB-åtgärd i flera steg genererade fel. Kontrollera alla OLE DB-statusvärden som finns tillgängliga. Inget arbete utfördes.

Om jag istället kör följande:

```
If rs("Text") = "First" Then
```

Så får jag följande:

> (0x80020009)
> Undantag inträffade.

Detta händer bara om Text-fältet är helt tomt. Står det något i det, så fungerar det bra.

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

## #2 — @nders, 2003-10-08T18:03Z

Det brukar fungera lite knasigt när det är null (inte riktigt tomt alltså ;) ). Prova om detta fungerar:

```
Text = "" & rs("Text")
```

Mvh

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

## #3 — Fireh, 2003-10-08T18:08Z

Det framgick inte av första, men när jag inte fick det att funka med bara If-satsen, så testade jag att först plocka in värdet i en variabel för att sedan köra If-satsen.

När jag bara körde If-satsen, så blev det undantagsfelet. När jag först läste in i variabel, så fick jag det andra felet.

Nu verkar det gå att läsa in i variabeln när jag testar med det du skrev, däremot kommer samma fel när den kör "If Text = "First" Then" som tidigare, dvs undantag....

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

## #4 — @nders, 2003-10-08T18:10Z

Menar du alltså att följande ger ett felmeddelande på raden med if-satsen :q

```
Text = "" & rs("Text")
If Text = "First" Then
```

Ytterst märkligt.

Mvh

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

## #5 — Fireh, 2003-10-08T18:14Z

```
If rs("Text") = "First" Then
```

Resulterade i "Undantag inträffade"

```
Text = rs("Text")
If Text = "First" Then
```

Resulterade i "En OLE DB-åtgärd i flera steg genererade fel..."

```
Text = "" & rs("Text")
If Text = "First" Then
```

Resulterade i "Undantag inträffade". Dvs samma som när jag bara körde med IF-sats. Därför gissade jag att det If-satsen som genererade felet.

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

## #6 — @nders, 2003-10-08T18:17Z

Har du lust att visa lite mer kod?

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

## #7 — Fireh, 2003-10-08T18:20Z

```
Admin_text = "" & rs("Admin_text")
If Admin_text = "First" Then
  Response.Redirect("crew/first.asp")
Else
  Response.Redirect("crew/")
End if
```

Den säger dessutom kontroll.asp, line 28, som är raden med If-satsen.

Fältets info i tabellen: 
\-------------------------------
Namn: Admin_text 
Typ: Text 
Längd/Värden: 
Attribut: 
Null: Not null (har testat med null också) 
Standard: 
Extra:

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

## #8 — Fireh, 2003-10-08T18:23Z



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

## #9 — @nders, 2003-10-08T18:24Z

Sa du not null?
Senast jag kollade betyder det att fältet i tabellen inte tillåter null, och då borde inte problemet vara nullrelaterat...

Kan du visa koden innan rad 28 också?

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

## #10 — Fireh, 2003-10-08T18:32Z

Jag har som sagt testat med Null = Null också, men det gav ingen skillnad.

```
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"

User = Request.Form("User")
Pass = Request.Form("Pass")
IP = Request.ServerVariables("REMOTE_ADDR")

SET rs=db.Execute("SELECT * FROM Users WHERE Nick LIKE '" & User & "'")

If not rs.eof and rs("Pass") = Pass Then
    Uppdate= "UPDATE Users SET 'zzzzzz' WHERE ID=" & ID
    db.Execute Uppdate

    Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
    db.Execute Add

    Admin_text = "" & rs("Admin_text")
    If Admin_text = "First" Then
      Response.Redirect("crew/first.asp")
    Else
      Response.Redirect("crew/")
    End if
End if
```

Har tagit bort några saker, som Session samt vilken data som uppdateras. Uppdateringen i Users samt tillägget i Login fungerar dock.Och om jag plockar bort hela If-satsen, så går allt jättebra. Samt även om det råkar stå något i Admin_text-fältet.

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

## #11 — @nders, 2003-10-08T18:38Z

1) Varför använder du LIKE utan wildcards? Använd = om du inte ska göra en sökning.
2) Lägg in lösenord i WHERE-satsen i SQL-frågan, det är dumt att ha det utanför.
3) Replace:a en apostrof till två i den data som du ska använda i SQL-frågan.

```
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"

User = Replace(Request.Form("User"), "'", "''")
Pass = Replace(Request.Form("Pass"), "'", "''")
IP = Request.ServerVariables("REMOTE_ADDR")

SET rs=db.Execute("SELECT * FROM Users WHERE Nick = '" & User & "' AND Pass = '" & Pass & "'")

If not rs.eof Then
    Uppdate= "UPDATE Users SET 'zzzzzz' WHERE ID=" & ID
    db.Execute Uppdate

    Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
    db.Execute Add

    Admin_text = "" & rs("Admin_text")
    If Admin_text = "First" Then
      Response.Redirect("crew/first.asp")
    Else
      Response.Redirect("crew/")
    End if
End if
```

Nu kanske inte dessa kodförbättringar hjälper dig med just detta problem, men...

Det **bör** fungera. Jag kan inte förstå hur det kan paja på den if-satsen.

Mvh

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

## #12 — Fireh, 2003-10-08T18:55Z

1) Bara blev så  ;)

2) Mjo... men... när det är så att man försöker logga in med rätt användarnamn, dock fel lösenord, så ska det skrivas användarens ID i Login-tabellen (om man nu byter Nick). Som det är i din WHERE-sats så hamnar man direkt i Else även om användarnamnet var rätt, men då får jag inget ID på användaren. Därför har jag valt att först lokalisera användaren och sedan kontrollera lösenordet. Det finns alltså mer saker efter i koden, det är egentligen Else där som koden slutar.

3) Nu förekommer det dock inga apostrofer i vare sig användarnamn eller lösenord, så det borde inte ställa till något. Kan ju lägga in det ändå.

4) Jag vet, det borde inte paja... men det gör det... Nu har jag dock ändrat Null = Null igen och sett till att lägga in ett standardvärde (NULL) så att det aldrig är tomt. Då fungerar det ju...

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

## #13 — @nders, 2003-10-08T18:59Z

2) OK, men då får du inte kolla både eof och lösenordet i samma if-sats. Det är dömt att gå åt pipan.

3) Om man fyller i en apostrof i endera fältet i inloggningsformuläret så kommer det gå åt pipan.

4) Vad menar du med tomt egentligen?
Det som brukar vara problemet är null, inte tom sträng. Jag är inte helt med när det är problem.

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

## #14 — Fireh, 2003-10-08T19:10Z

2) Sorry, jag råkade fixa för mycked i koden jag la in.... eof och pass kontrolleras inte i samma if-sats... var bara mest smidigt att sätta ihop dom när ja skulle få in det här...

3) Det vet jag... 

4) Ja du.... jag har jobbat med access-databaser tidigare. Där gick det alldeles utmärkt att läsa ur ett fält, även om det inte stod något där. Men när jag nu kör samma sak mot en SQL-databas så blir det fel. Det felet kom i mina Session-inställningar också, men där löste jag det så att det fältet alltid hade standardvärde 0 när det inte var uppdaterat. Jag vet inte vad Null = Null och Null = Not null för för skillnad i en SQL-databas.

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

## #15 — Fireh, 2003-10-08T19:18Z

Här har du hela koden med två av dina ändringar.
Blir dock fortfarande "Undantag inträffade, line 27:

```
<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "DSN=mysql_crew"

User = Replace(Request.Form("User"), "'", "''")
Pass = Replace(Request.Form("Pass"), "'", "''")
IP = Request.ServerVariables("REMOTE_ADDR")

SET rs=db.Execute("SELECT * FROM Users WHERE Nick = '" & User & "'")

If not rs.eof Then
  ID = rs("ID")
  If rs("Pass") = Pass Then
    Session("Antal") = rs("Antal") + 1
    Session("Go") = 1
    Session("Namn") = rs("Fnamn") & " " & rs("Enamn")
    Session("Senast") = rs("Senast")
    Session("ID") = rs("ID")
    Senast = Date & " kl " & Time

    Uppdate= "UPDATE Users SET Antal='" & Session("Antal") & "', Senast='" & Senast & "' WHERE ID=" & ID
    db.Execute Uppdate

    Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Ja')"
    db.Execute Add

    If rs("Admin_text") = "First" Then
      Response.Redirect("crew/first.asp")
    Else
      Response.Redirect("crew/")
    End if
  Else
    Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',"&ID&",'"&IP&"','"&Date&"','"&Time&"','Nej')"
    db.Execute Add

    Session("Meddelande") = "<b>Fel användarnamn<br>och/eller lösenord!</b>"
    Response.Redirect("start.asp")
  End if
Else
  If User <> "" Then
    Add = "INSERT INTO Login (User, UserID, IP, Datum, Tid, Lyckat) VALUES ('"&User&"',0,'"&IP&"','"&Date&"','"&Time&"','Nej')"
    db.Execute Add
  End if
  
  Session("Meddelande") = "<b>Fel användarnamn<br>och/eller lösenord!</b>"
  Response.Redirect("start.asp")
End if
%>
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/88014-läsa-tomma-fält
