---
title: "RIGHT OUTER JOIN, uppdatera fält"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/14241-right-outer-join-uppdatera-fält"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "evesve"
published: "2002-02-04T16:52:00.000Z"
updated: "2002-02-06T15:47:00.000Z"
replies: 22
views: 426
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/14241-right-outer-join-uppdatera-fält"
---

# RIGHT OUTER JOIN, uppdatera fält

_Sida 1 av 2._

## #1 — evesve, 2002-02-04T16:52Z

Jag har två tabeller i samma Access-bas:
Telefontabell och Intressen.
I telefontabell (Huvudtabellen) har jag bl.a. kolumnerna:
ID (Räknare) (Primärnyckel)
Enamn (Text)
Fnamn (Text)
Telefon (Text)
I Intressen har jag bl.a  kolumnerna:
Adressnr(Räknare)
ID (Tal) (Primärnyckel)
Fritidsintressen (Text)

Tabellerna är relaterade till varandra som 1:1 med kolumnerna ID.
I Tabellen Telefontabell finns fler rader (ID) med som inte finns med i Intressen.

Jag får fram rätt uppgifter med koden:

```
<%Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% Visa = "SELECT * FROM intressen RIGHT OUTER JOIN telefontabell ON telefontabell.Id = intressen.Id order by telefontabell.Enamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic 
%> 
<form method="POST" action="ASP-koder-egna?kod=a35" name="ad">
<table border="0" cellpadding="2" cellspacing="2"> 
<tr>
<td width="10"<b>Id</b></td>
<td width="10"><b>AdrNr</b></td>
<td width="100"><b>Efternamn</b></td>
<td width="100"><b>Förnamn</b></td>
<td width="100"><b>Telefon</b></td>
<td width="100<b>Intressen</b></td>
</tr>
<%Do While Not RecSet.EOF%>
<tr>
<td><% =RecSet("Id") %></td>
<td><% =RecSet("Adressnr") %></td>
<td><% =RecSet("Enamn") %></td>
<td><% =RecSet("Fnamn") %></td>
<td><% =RecSet("Telefon") %></td>
<td><input type="text" name="Fritidsintressen" value="<% =RecSet("Fritidsintressen") %>"></td>
</tr>
<% RecSet.MoveNext%> 
<%Loop 
RecSet.Close%>
<tr><TD colspan=6><input type="submit" name="knapp" class=bg5 value="Uppdatera"></TD>
</tr>
</TABLE>
```

Byter jag ut till:

```
<%Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% Visa = "SELECT * FROM telefontabellLEFT OUTER JOIN intressen ON telefontabell.Id = intressen.Id order by telefontabell.Enamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic 
%>
```

så får jag inte fram ID på dom utan Fritidsintressen, alltså kan jag inte skriva in och uppdatera som jag kunde med bara en tabell med koden:

```
<%If request.form("knapp") = "Uppdatera" Then
for i = 1 to request.form("Id").count%>
<%
sql = "update intressen set Id = '" & request.form("Id")(i) & "'" _
   & " where Id = " & request.form("Id")(i)

response.write sql
connect.execute sql,,128
next%>
```

Förstår ni problemet?
Hur gör jag?

Jag får felmeddelandet:

HTTP-fel 405
405 Ogiltig metod

Den metod som anges i begäran är inte tillåten för den resurs som begäran avser. Kontrollera att du använder rätt MIME-typ för den resurs som du frågar efter

\[Redigerat av evesve den 04 feb 2002\]

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

## #2 — jorgen, 2002-02-04T16:58Z

```
sql = "update intressen set Id = " & request.form("Id")(i) & "" _
& " where Id = " & request.form("Id")(i)
```

Dina id-kolumner var numeriska båda, därför inga '' runt värdet.

Men av detta skulle det inte bli det felmeddelandet, så där är säkert ett fel till.

mvh Jörgen :)

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

## #3 — LarsG, 2002-02-04T17:03Z

Jag förstår inte alls. Varför uppdaterar du en post till samma värde som den hade innan?

Dina frågor kommer att returnera samma resultat, enda skillnaden är att kolumnerna inte kommer i samma ordning.

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

## #4 — evesve, 2002-02-04T17:18Z

Till Jörgen: Det gjorde ingen skillnad.
Till LarsG:
Det ID som jag får fram tillhör tabellen "telefontabell".
I min enfald trodde jag att det måste finnas en rad med rätt ID för att kunna uppdatera den.
Egentligen är det koden:

```
sql = "update intressen set Fritidsintressen = '" & request.form("Fritidsintressen ")(i) & "'" _
   & " where Id = " & request.form("Id")(i)
```

som jag vill få in.

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

## #5 — LarsG, 2002-02-04T17:42Z

Om du lägger till ett hidden fält som heter ID och ändrar select-satsen något

```
<%Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% Visa = "SELECT adressnr,Enamn,Fnamn,Telefon,fritidsintressen,telefontabell.id " & _
" FROM intressen RIGHT OUTER JOIN telefontabell ON telefontabell.Id = intressen.Id order by telefontabell.Enamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic 
%> 
<form method="POST" action="ASP-koder-egna?kod=a35" name="ad">
<table border="0" cellpadding="2" cellspacing="2"> 
<tr>
<td width="10"<b>Id</b></td>
<td width="10"><b>AdrNr</b></td>
<td width="100"><b>Efternamn</b></td>
<td width="100"><b>Förnamn</b></td>
<td width="100"><b>Telefon</b></td>
<td width="100<b>Intressen</b></td>
</tr>
<%Do While Not RecSet.EOF%>
<tr>
<td><% =RecSet("Id") %></td>
<td><% =RecSet("Adressnr") %></td>
<td><% =RecSet("Enamn") %></td>
<td><% =RecSet("Fnamn") %></td>
<td><% =RecSet("Telefon") %></td>
<td><input type="text" name="Fritidsintressen" value="<% =RecSet("Fritidsintressen") %>"></td>
</tr>
<input type="hidden" name="id" value="<%=recset("id")%>">
<% RecSet.MoveNext%> 
<%Loop 
RecSet.Close%>
<tr><TD colspan=6><input type="submit" name="knapp" class=bg5 value="Uppdatera"></TD>
</tr>
</TABLE>
```

så kan du göra så här 

```
<%If request.form("knapp") = "Uppdatera" Then
for i = 1 to request.form("Id").count%>
<%
intressen = "'" & replace(request.form("Fritidsintressen")(i),"'","''") & "'"
id = request.form("Id")(i)
sql = "update intressen set fritidsintressen = " & intressen _
& " where Id = " & id
'response.write sql
connect.execute sql,rows,128
if rows = 0 then
   sql = "insert into intressen(id,fritidsintressen) values(" & id & _
 ",'" & intressen & ")"
   connect.execute sql,,128
end if
next%>
```

dvs, man försöker uppdatera, men om det inte fanns någon rad som uppdaterades så gör man insert istället.

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

## #6 — evesve, 2002-02-04T18:45Z

Jo, det där med hidden fält ID borde jag begripit.
Men tyvärr, samma felmeddelande när jag trycker på knappen uppdatera.
\===================
HTTP-fel 405
405 Ogiltig metod

Den metod som anges i begäran är inte tillåten för den resurs som begäran avser. Kontrollera att du använder rätt MIME-typ för den resurs som du frågar efter.

Kontakta serverns administratör om det här problemet kvarstår.
\=====================
Kan det ha med PWS, ASP 2 att göra?
(Att jag är lite omodern?)

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

## #7 — LarsG, 2002-02-04T18:56Z

Jo, det där HTTP felet har ju inget att göra med databasfrågorna. 
Tyvärr så är det inget som jag är insatt i, men det låter mer som ett problem med konfiguration av PWS eller så.

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

## #8 — evesve, 2002-02-04T19:17Z

Testade att lägga upp det på en annan server.
Där kom jag lite längre.
Fick felmeddelande:
\================
Microsoft VBScript runtime error '800a01a8' 

Object required: 'Provider=Microsoft.J' 

/svenssons/test/a36.asp, line 23
\==============
vilket är:

```
connect.execute sql,rows,128
```

\=========== <http://www.websamba.com/svenssons/test/a36.asp> 

\[Redigerat av evesve den 04 feb 2002\]

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

## #9 — jorgen, 2002-02-04T19:22Z

Hej, hur ser din databaskoppling ut?

mvh Jörgen :)

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

## #10 — evesve, 2002-02-04T19:37Z

Nu är isberget brutet, jag får reaktion med vettigt felmeddelande.
\============
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14' 

\[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] Syntaxfel (operator saknas) i frågeuttrycket '''Bilar')'. 

/asp/a36.asp, rad 28
\==============
För att förklara närmare så är 
Rad 1: Gemensamt ID i båda tabellerna
Rad 2: Inget ID i tabellen Intressen
Rad 3: Gemensamt ID

"Bilar" är det jag skrivit in i textfältet "Fritidsintressen"

Felet kommer alitså på rad tre (efter byte från update till insert?)

Jag kör med enkel databaskoppling:

```
Set Connect = Server.CreateObject("ADODB.Connection")
'HEMMA
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\inetpub\wwwroot\db\telefon.mdb" 
'WEBSAMBA
Connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/svenssons/db/Telefon.mdb")
```

\[Redigerat av evesve den 04 feb 2002\]

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

## #11 — LarsG, 2002-02-04T19:42Z

Mitt fel förstås, det är en ' för mycket vid insert.

```
sql = "insert into intressen(id,fritidsintressen) values(" & id & _
"," & intressen & ")"
```

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

## #12 — evesve, 2002-02-04T19:53Z

Det var väl en för mycket även på raden:

```
intressen = "'" & replace(request.form("Fritidsintressen")(i),"'","'") & "'"
```

Men på den raden får jag:
\=========
Indexet ligger utanför intervallet 

/asp/a36.asp, rad 22 

Ett matrisindex ligger utanför intervallet. 
\===========

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

## #13 — LarsG, 2002-02-04T20:16Z

Nej, tanken är att man ersätter alla ' med '' annars så blir det fel i sql-satsen.

Kan du lägga ut lite utskrifter så man ser vad som händer.

```
<%If request.form("knapp") = "Uppdatera" Then
response.write "Antal id " & request.form("Id").count & "<br>"
response.write "Antal intressen " & request.form("fritidsintressen").count & "<br>"

for i = 1 to request.form("Id").count%>
<%
intressen = "'" & replace(request.form("Fritidsintressen")(i),"'","''") & "'"
id = request.form("Id")(i)
sql = "update intressen set fritidsintressen = " & intressen _
& " where Id = " & id
'response.write sql
connect.execute sql,rows,128
if rows = 0 then
sql = "insert into intressen(id,fritidsintressen) values(" & id & _
",'" & intressen & ")"
connect.execute sql,,128
end if
next%>
```

Om du lämnar något fritidsintresse tomt så blir det nog olika många värden i fälten vilket skulle orsaka det fel som du får.

För att hantera det så får du nog använda en annan strategi, t.ex att du namnger fälten olika t.ex. att du har en räknare som du lägger till efter namnet

```
i = 1
do until recset.eof
%>
<td><input type="text" name="Fritidsintressen_<%=i%>" value="<% =RecSet("Fritidsintressen") %>"></td>
<input type="hidden" name="id_<%=i%>" value="<%=recset("id")%>">
<%
i = i + 1
recset.movenext
loop
%>
<input type="hidden" name="antal" value="<% =i-1%>">
```

Sen på andra sidan

```
<%If request.form("knapp") = "Uppdatera" Then
for i = 1 to request.form("antal")%>
<%
intressen = "'" & replace(request.form("Fritidsintressen_" & i),"'","''") & "'"
id = request.form("Id" & i)
sql = "update intressen set fritidsintressen = " & intressen _
& " where Id = " & id
'response.write sql
connect.execute sql,rows,128
if rows = 0 then
sql = "insert into intressen(id,fritidsintressen) values(" & id & _
",'" & intressen & ")"
connect.execute sql,,128
end if
next%>
```

Det kan säkert finnas något smärre fel i ovanstående men principen, principen alltså.

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

## #14 — evesve, 2002-02-04T21:17Z

Dom ligger på: <http://www.websamba.com/svenssons/test/a36a.asp> 
och <http://www.websamba.com/svenssons/test/a36b.asp>

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

## #15 — evesve, 2002-02-05T16:37Z

Nu är segern nära!
LarsG:s nästan ursprungliga förslag har jag nu fått att fungera på egen dator!

```
<% Option Explicit %>
<html>

<head>
<title>(Type a title for your page here)</title>
<meta name="GENERATOR" content="Arachnophilia 4.0">
<meta name="FORMATTER" content="Arachnophilia 4.0">
</head>

<body bgcolor="#ffff80" text="#ff0000" link="#0000ff" vlink="#800080" alink="#ff0000">
<!-- #include file="adovbs.inc" -->
<!-- #include file="grund.inc" -->			

<!-- #include file="strConnect_telefon.asp" -->
<%
Dim Connect, Recset, Visa, i, intressen, id, sql, rows, LaddaOm%>
<%If request.form("knapp") = "Uppdatera" Then
for i = 1 to request.form("Id").count%>
<%
intressen = "'" & replace(request.form("Fritidsintressen")(i),"'","''") & "'"
id = request.form("Id")(i)
sql = "update intressen set fritidsintressen = " & intressen _
& " where Id = " & id
connect.execute sql,rows,128
if rows = 0 then
sql = "insert into intressen(id,fritidsintressen) values(" & id & _
"," & intressen & ")"

connect.execute sql,,128
end if
next
end if
%>

<%Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% Visa = "SELECT adressnr,Enamn,Fnamn,Telefon,fritidsintressen,telefontabell.id " & _
" FROM intressen RIGHT OUTER JOIN telefontabell ON telefontabell.Id = intressen.Id order by telefontabell.Enamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic 
%> 
<form method="POST" action="a36.asp" name="ad">
<table border="0" cellpadding="2" cellspacing="2"> 
<tr>
<td width="10"><b>Id</b></td>
<td width="10"><b>AdrNr</b></td>
<td width="100"><b>Efternamn</b></td>
<td width="100"><b>Förnamn</b></td>
<td width="100"><b>Telefon</b></td>
<td width="100"><b>Intressen</b></td>
</tr>
<%Do While Not RecSet.EOF%>
<tr>
<td><% =RecSet("Id") %></td>
<td><% =RecSet("Adressnr") %></td>
<td><% =RecSet("Enamn") %></td>
<td><% =RecSet("Fnamn") %></td>
<td><% =RecSet("Telefon") %></td>
<td><input type="text" name="Fritidsintressen" value="<% =RecSet("Fritidsintressen") %>"></td>
</tr>
<input type="hidden" name="id" value="<%=recset("id")%>">
<% RecSet.MoveNext%> 
<%Loop 
RecSet.Close%>
<tr><TD colspan=6><input type="submit" name="knapp" value="Uppdatera"></TD>
</tr>
</TABLE>
</body>
</html>
```

Däremot får jag ett felmeddelande på webSamba-servern på raden:

```
connect.execute sql,rows,128
```

Kan det ha med mitt inloggnings-script att göra?
Tackar i alla fall för all hjälp så länge! <http://www.websamba.com/svenssons/test/a36.asp>

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

## #16 — evesve, 2002-02-05T16:40Z

Felmeddelandet:
Object required: 'Provider=Microsoft.J'

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

## #17 — LarsG, 2002-02-05T17:19Z

Jag ser inte att du skapar någon connection. Är det någon kod som inte är med?

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

## #18 — evesve, 2002-02-05T18:10Z

Jo den ligger i:

```
<!-- #include file="strConnect_telefon.asp" -->
```

och ser ut:

```
Set Connect = Server.CreateObject("ADODB.Connection")
'HEMMA
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\inetpub\wwwroot\db\telefon.mdb" 
'WEBSAMBA
Connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/svenssons/db/Telefon.mdb")
```

\[Redigerat av evesve den 05 feb 2002\]

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

## #19 — solbulle, 2002-02-05T21:08Z

Kanske så här:

```
Set Connect = Server.CreateObject("ADODB.Connection")
'HEMMA
'strConnString  "driver={Microsoft Access Driver (*.mdb)};dbq=d:\inetpub\wwwroot\db\telefon.mdb" 
'WEBSAMBA
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/svenssons/db/Telefon.mdb") 

Connect.Open strConnString
```

Sen så får du utkommentera den koppling du inte använder, fast det enklaste vore väl att lägga databasen i en mappstruktur som ser ut som den du har på websamba, då klarar du dig med den undre koppligen bara.

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

## #20 — evesve, 2002-02-05T22:38Z

Den varianten fungerade på websamba, men inte hemma. Men där funkar det ju ändå!
Det "hänger sig" efter första SUBMIT, men laddar jag om sidan så är den uppdaterad. Sen när rader har "eget" ID funkar det bra
Försökte varianten

```
connect.execute sql,,128
end if
next
Response.redirekt "a36.asp"
end if
%>
```

Då får jag svaret: "Objektet stöder inte Response.Redirekt...."
Varför fattar jag inte men jag är nog för trött nu!

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/14241-right-outer-join-uppdatera-fält  
Nästa sida: https://www.webforum.nu/amne/asp/14241-right-outer-join-uppdatera-fält/page2.md
