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.
<%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
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)
<%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.
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?)
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å.
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:
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?)
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å.
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.
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!
266 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a