Hej Server.HTMLencod är att rekomendera: Hej och tack för att du försöker hjälpa mig :-) Som du lyckades lista ut själv så är det det tomma värdena, null, vilket ger felmeddelande till Server.HTMLEncode(). Detta beror på att den förväntar sig en sträng. Jättetack för förklaringen Access databas motor heter JET.Uppdatera stora fält(PM) i databasen från formulär
Jag har ett problem som jag undrar någon skulle vilja hjälpa mig att lösa. Jag har en accessdatabas som jag håller på och gör ett webformulär till så att jag kan uppdatera databasen över internet. Jag får upp alla fält som jag vill och de poster som innehåller något finns där. Dock har jag ett fält som kan innehålla tusentals tecken, (biografier) och dessa (fältet "historia") får jag bara upp typ den första raden i ett sådant fält där man kan ändra, sedan kommer resten av texten liksom utanför och man kan inte uppdatera det. Jag har försökt att lägga in "textarea" istället men det funkar inte alls. Kan man inte uppdatera stora fältmängder?
Så här ser koden ut som visar upp mina fält:
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/sys/db1.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM tabellen WHERE ID = " & Trim(Request.QueryString("adressID")) & " "
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>
<form method="POST" action="andra3.asp">
<tr><td><input type="hidden" name="AD" value="<% =Request.QueryString("adressID") %>"></td></tr>
<tr><td>Förnamn:<br><input type="text" size="30" name="fnamn" value="<% =RecSet("fnamn") %>"></td></tr>
<tr><td>Efternamn:<br><input type="text" size="30" name="enamn" value="<% =RecSet("enamn") %>"></td></tr>
<tr><td>Historia:<br><input type="text" size="50" name="historia" value="<% =RecSet("historia") %>"></td></tr>
<tr><td><input type="submit" value="Uppdatera"></td></tr>
</form>
<% RecSet.Close
Connect.Close %>
<tr><td>Redigera annan post!</td></tr>
Skulle bli jättetacksam för svar om någon har något ?
mvh NinaSv: Uppdatera stora fält(PM) i databasen från formulär
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/sys/db1.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM tabellen WHERE ID = " & CLng(Request.QueryString("adressID"))
RecSet.Open Visa, Connect
%>
<form method="POST" action="andra3.asp">
<tr><td><input type="hidden" name="AD" value="<%=Request.QueryString("adressID") %>"></td></tr>
<tr><td>Förnamn:<br><input type="text" size="30" name="fnamn" value="<%=Server.HTMLEncode(RecSet("fnamn")) %>"/></td></tr>
<tr><td>Efternamn:<br><input type="text" size="30" name="enamn" value="<% =Server.HTMLEncode(RecSet("enamn")) %>"/></td></tr>
<tr><td>Historia:<br><textarea size="50" name="historia">
<% =Server.HTMLEncode(RecSet("historia")) %></textarea></td></tr>
<tr><td><input type="submit" value="Uppdatera"/></td></tr>
</form>
<%
RecSet.Close
Connect.Close
%>
<tr><td>Redigera annan post!</td></tr>
Sedan undrar jag varför du inte använder JET drivrutinen för Access?
Sv:Uppdatera stora fält(PM) i databasen från formulär
Nu när jag ändrat till din kod så får jag:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'HTMLEncode'
/nina/historia/andra2.asp, line 26
På rad 26 står:<tr><td>Yrke:<br><input type="text" size="30" name="yrke4" value="<% =Server.HTMLEncode(RecSet("yrke4")) %>"></td></tr>
Det är olika rader som visar fel beroende på vilka personer man klickar på. På de raderna, som här rad 26, är tom i databasen, vilken det skall vara. Verkar som den inte får upp allt om inte alla poster är ifyllda?
Koden är ju mycket längre än den jag visade här igår, jag tog ju bara ett litet exempel.
Lika bra att visa upp hela koden:
<table align="center" border="1" width="450" class="vtext">
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" class="rubrik">Redigera person!</td></tr>
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db1.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM tabellen WHERE ID = " & CLng(Request.QueryString("adressID"))
RecSet.Open Visa, Connect
%>
<form method="POST" action="andra3.asp">
<tr><td><input type="hidden" name="AD" value="<% =Request.QueryString("adressID") %>"></td></tr>
<tr><td>Förnamn:<br><input type="text" size="30" name="fnamn" value="<% =Server.HTMLEncode(RecSet("fnamn")) %>"></td></tr>
<tr><td>Efternamn:<br><input type="text" size="30" name="enamn" value="<% =Server.HTMLEncode(RecSet("enamn")) %>"></td></tr>
<tr><td>Yrke:<br><input type="text" size="30" name="yrke" value="<% =Server.HTMLEncode(RecSet("yrke")) %>"></td></tr>
<tr><td>Yrke:<br><input type="text" size="30" name="yrke1" value="<% =Server.HTMLEncode(RecSet("yrke1")) %>"></td></tr>
<tr><td>Yrke (lång text):<br><input type="text" size="60" name="yrke2" value="<% =Server.HTMLEncode(RecSet("yrke2")) %>"></td></tr>
<tr><td>Yrke:<br><input type="text" size="30" name="yrke3" value="<% =Server.HTMLEncode(RecSet("yrke3")) %>"></td></tr>
<tr><td>Yrke:<br><input type="text" size="30" name="yrke4" value="<% =Server.HTMLEncode(RecSet("yrke4")) %>"></td></tr>
<tr><td>Yrke:<br><input type="text" size="30" name="yrke5" value="<% =Server.HTMLEncode(RecSet("yrke5")) %>"></td></tr>
<tr><td>Foto:<br><input type="text" size="30" name="foto" value="<% =Server.HTMLEncode(RecSet("foto")) %>"></td></tr>
<tr><td>Född (1701):<br><input type="text" size="30" name="fodd" value="<% =Server.HTMLEncode(RecSet("fodd")) %>"></td></tr>
<tr><td>Död (1754):<br><input type="text" size="30" name="dod" value="<% =Server.HTMLEncode(RecSet("dod")) %>"></td></tr>
<tr><td>Ålder (65 år):<br><input type="text" size="30" name="alder" value="<% =Server.HTMLEncode(RecSet("alder")) %>"></td></tr>
<tr><td>Kort (1=ja, 2=nej):<br><input type="text" size="30" name="kort" value="<% =Server.HTMLEncode(RecSet("kort")) %>"></td></tr>
<tr><td>Kön (k=kvinna):<br><input type="text" size="30" name="kon" value="<% =Server.HTMLEncode(RecSet("kon")) %>"></td></tr>
<tr><td>Inlagd:<br><input type="text" size="30" name="inlagd" value="<% =Server.HTMLEncode(RecSet("inlagd")) %>"></td></tr>
<tr><td>Ändrad:<br><input type="text" size="30" name="andrad" value="<% =Server.HTMLEncode(RecSet("andrad")) %>"></td></tr>
<tr><td>Nation (sv=svensk):<br><input type="text" size="30" name="nation" value="<% =Server.HTMLEncode(RecSet("nation")) %>"></td></tr>
<tr><td>Gravplats:<br><input type="text" size="30" name="gravplats" value="<% =Server.HTMLEncode(RecSet("gravplats")) %>"></td></tr>
<tr><td>Källor:<br><input type="text" size="30" name="kallor" value="<% =Server.HTMLEncode(RecSet("kallor")) %>"></td></tr>
<tr><td>Smeknamn:<br><input type="text" size="30" name="smeknamn" value="<% =Server.HTMLEncode(RecSet("smeknamn")) %>"></td></tr>
<tr><td>Historia:<br><textarea name="historia"><% =Server.HTMLEncode(RecSet("historia")) %></textarea></td></tr>
<tr><td><input type="submit" value="Uppdatera"></td></tr>
</form>
<% RecSet.Close
Connect.Close %>
<tr><td>Redigera annan post!</td></tr>
</table>
Sen har jag inte en aning om vad JET är för något.
Jag är ingen programmerare utan skriver biografier om historiska personer.
Detta vill jag ha på en hemsida och jag gör så gott jag kan.
/Nina
PS. om jag tar bort alla rader den klagar på (som är tomma i db:n) så visas det upp klokt :-)
Men hur gör man då för att han inte skall bry sig om att det finns tomma fält i db:n?
Jag kom på det, jag skrev <% =Server.HTMLEncode("" & RecSet("historia")) %>
Sv: Uppdatera stora fält(PM) i databasen från formulär
För att en funktion skall kuna ta emot Null värden måste parametern vara av typen variant.
Om du använder &-operatorn så tvingar du en implecit konvertering av resultatet till en sträng.
Den tekniska förklaringen till din lösning. ;)Sv:Uppdatera stora fält(PM) i databasen från formulär
Men vad var det där JET?Sv: Uppdatera stora fält(PM) i databasen från formulär
Följande rad:
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/sys/db1.mdb")
Använder du ODBC drivrutinen för Access. Vilket man kan säga är JETS ODBC drivrutin.
Din connection tillhöra Microsoft ActiveX Data Objects(ADO) vilket är ett bibliotek för att använda OLEDB providers, databasdrivrutiner, från VB/VBA, etc.
Man kan jämföra ODBC drivrutiner och OLEDB providers. Det gör ungefär samma sak. Ger ett gemensamt gränssnitt mot olika datakällor. Där ODBC är äldst och skapades för databaser medan OLEDB providers även skall stödja andra datakällor så som Exchange, filsystem, active directory, osv.
Om du använder en ODBC drivrutin tillsammans med ADO så använder du en OLEDB till ODBC provider mellan.
ASP->ADO->OLEDB provider för ODBC->JET ODBC drivrutin->Databasfil
Vilket du slipper om du använder JET drivrutinen:
ASP->ADO->OLEDB provider för JET->Databasfil
Microsofts strategi att använda OLEDB.
Om du istället vill använda Jet's OLEDB provider, skriver du:
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/sys/db1.mdb")
Så det är inte så stor skillnad i koden.
Däremot har det konsekvenser för olika operatiorer. T.ex. om du använder LIKE i SQL frågor så använder ODBC drivrutinen:
* Valfritt antal tecken
_ Ett tecken
som joker tecken. Medan OLEDB providern använder:
% Valfritt antal tecken
? Ett tecken
Viktigast är att vara konsekvent i din projekt. MEn du kan stegvis gå över till OLEDB providern. KAn underlätta för dig att byta till andra databasmotorer senare, så som MS SQL Server, mm.