Avatar billede tblaster Nybegynder
08. august 2003 - 09:28 Der er 16 kommentarer og
1 løsning

Update i ms sql database vha asp

Hvordan opdater man et felt i en ms sql database vha en asp side?

Jeg har følgende so mjeg benyttede til access:
<!-- #INCLUDE FILE="dbOpen.asp" -->

<% 'Kundens id findes udfra http_host
sql= "SELECT * FROM TemaOmråde WHERE TemaOmrådeID = 1"
rs.Open Sql, Conn, 1

rs("Html") = "Test"
    rs.update
%>

<!-- #INCLUDE FILE="dbClose.asp" -->

Bruger jeg det får jeg bare:
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.

Hvad er der galt?
Avatar billede mm12010 Nybegynder
08. august 2003 - 09:31 #1
rs.addnew
rs("Html") = "Test"
rs.update
Avatar billede keysersoze Guru
08. august 2003 - 09:31 #2
jeg ville bruge;

SQL = "UPDATE temaområde SET html = 'test' WHERE Temaområdeid = 1"
Conn.Execute(SQL)

p.s. - det er en ekstrem dårlig idé at benytte danske tegn i tabel og kolonnenavne
Avatar billede mm12010 Nybegynder
08. august 2003 - 09:34 #3
enig med keysersoze :o)

set bort fra mit indlæg - jeg læste ikke helt rigtigt
Avatar billede tblaster Nybegynder
08. august 2003 - 09:35 #4
mm12010 ... din giver samme fejl

keysersoze ... din giver denne fejl:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Når jeg bruge følgende:
The connection cannot be used to perform this operation. It is either closed or invalid in this context.

Nu du skriver det der med danske tegn i tabelen ... det er der mange der siger men gør det egentlig noget. Sålænge man kalder dem i koderne så skulle det vel ikke gøre nogen forskel.
Avatar billede tblaster Nybegynder
08. august 2003 - 09:38 #5
Dette er min dbopen:

    Connection_string = "Provider=SQLOLEDB.1;Password="& cSql_Password &";Persist Security Info=True;User ID="& cSql_Login &";Initial Catalog="& cSql_Database &";Data Source="& cSql_Serverip
    Set Conn = Server.CreateObject("ADODB.Connection")
    Set RS = Server.CreateObject("ADODB.Recordset")
    Conn.Open Connection_string
Avatar billede mort-gib Nybegynder
08. august 2003 - 09:46 #6
Hej Tblaster
Du bruger en forkert cursor... du skal bruge noget i retning af "adOpenKeySet" og en lock noget i retning af "adLockOptimistic" det er hvad din provider fejl betyder :-)
Men pas på hvis du koder noget high traffic stuff da du godt kan få lidt problemer med specielt din lock hvis flere brugere prøver at tilgå det samme felt samtidig
Avatar billede tblaster Nybegynder
08. august 2003 - 09:49 #7
Nu har jeg prøvet men får denne fejl:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

Her er det jeg har bikset sammen:
rs.CursorLocation = adUseServer
rs.CursorType = adOpenKeySet
rs.LockType = adLockOptimistic

sql= "SELECT * FROM TemaOmråde WHERE TemaOmrådeID = 1"
rs.Open Sql, Conn, 1

rs("Html") = "Test"
rs.update
Avatar billede tblaster Nybegynder
08. august 2003 - 09:51 #8
Jeg har prøvet at ændre min sql og rs.open til følgende:
rs.Open "SELECT * FROM TemaOmråde WHERE TemaOmrådeID = "& Session("ID") &" ", Conn, , , adCmdText

Men får derved bare samme fejl :-(
Avatar billede mort-gib Nybegynder
08. august 2003 - 09:52 #9
rs.CursorLocation = adUseServer
rs.CursorType = adOpenKeySet
rs.LockType = adLockOptimistic

sql= "SELECT * FROM TemaOmråde WHERE TemaOmrådeID = 1"
rs.Open Sql, Conn, 1
If not rs.Eof Then
  rs("Html") = "Test"
else
rs.AddNew
  rs("Html") = "Test"
End If
rs.update

Det ser ud til at du ikke får det rs tilbage som du beder om..

prøv evt
while not rs.eof
response.Write rs("html")
rs.MoveNext
Wend
Avatar billede tblaster Nybegynder
08. august 2003 - 09:56 #10
Ligemeget hvilken af de 2 jeg prøver får jeg stadig samme fejl.
Avatar billede keysersoze Guru
08. august 2003 - 09:59 #11
hvilken felttype er temaområdeid?

hvor opstår fejlen - altså hvilken linie?
Avatar billede tblaster Nybegynder
08. august 2003 - 10:02 #12
Text ...

Den opstår i denne:
rs.CursorLocation = adUseServer

Jeg har prøvet med denne:
sql= "SELECT * FROM TemaOmråde WHERE TemaOmrådeID = 1"
rs.Open SQL, Conn

If not rs.EOF then
Conn.execute("UPDATE TemaOmråde SET Html = '"&replace(Test, "'", "''")&"'")
End If

Og den kommer da lidt længere. Den laver ingen fejl men sletter alt der er i alle Html felterne og replacer ikke kun det ene felt hvor TemaOmråde = 1.
Avatar billede mort-gib Nybegynder
08. august 2003 - 10:02 #13
Nr to er bare en lille test som sikrer at du har fået et recset. Hvis du får en fejl allerede der så har du andre mere alvorlige fejl.
Jeg vill personligt give tabellen og felterne engelske navne som keysersoze også siger...
og prøv at kigge her

The Recordset's Open Method
the ADO Recordset's Open method accepts the following parameters:

objRS.Open source, connection, [cursortype], [locktype], [options]

where the [ ] indicates optional parameters.

Source: is an SQL Statement, a variable containing an SQL statement, the name of table within the database or the name of a stored procedure. If you are passing an SQL statement, a tablename or the name of a stored procedure the source must be enclosed in " marks.

Connection: is a valid ADO Connection String or a variable containing a connection string. You can also pass in a valid existing ADO Connection object. If you are passing in a connection string you need to enclose it in " marks.

CursorType:can be one: adOpenForwardOnly (default), adOpenStatic, adOpenDynamic, adOpenKeyset

LockType: can be one of: adLockReadOnly (default), adLockOptimistic, adLockPessimistic, adLockBatchOptimistic

Options can be any valid options. By far the most commonly passed in is an option to indicate the type of Source you are using eg adCmdText (for an SQL Statement), adCmdTable (if you want ADO to construct an SQL statement to get all the rows in a table), adCmdTableDirect (if you want to directly retrieve all the rows in a table - from ADO 2.5 onwards) or adCmdStoredProc (if you are accessing a stored procedure). If you do not specify the type of source then adCmdUnknown is used as the default.

Example of the correct use of the Recordset's Open method would be:

strSQL = "SELECT field1, field2 FROM table1"
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb"
objRS.Open strSQL, strConnect, adOpenForwardOnly, adLockReadOnly, adCmdText

Det er bare et eksempel jeg fandt... men det dækker vist godt
Avatar billede tblaster Nybegynder
08. august 2003 - 10:04 #14
Conn.execute("UPDATE TemaOmråde SET Html = 'Test'") ... men den skriver det stadig til alle og ikke kun den ene!
Avatar billede tblaster Nybegynder
08. august 2003 - 10:06 #15
Smid et svar mort-gib ...

tak for hjælpen!
Avatar billede mort-gib Nybegynder
08. august 2003 - 10:09 #16
Det var så lidt :-)
Avatar billede powell Nybegynder
11. oktober 2003 - 19:07 #17
tblaster: Den skriver til alle felterne i din database da du ikke har sat en begrænsning på. Som f.eks:

UPDATE TemaOmråder SET Html = 'Test' WHERE *statement*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester