Avatar billede hobbez Nybegynder
03. november 2002 - 01:17 Der er 27 kommentarer og
1 løsning

Recordset is read-only - ASP og MySQL !

Roder med en gæstebog, og skal skrive i en MySQL-base.

Prøver med:

----- klip -----
    Set Rs1 = Server.CreateObject("ADODB.Recordset")
    sql_str = "Select * from guestbook where gb_index is null;"
    Rs1.Open sql_str, Session("Conn1")
    Rs1.Addnew
----- klip -----

Men får fejl i linien Rs1.Addnew:

"Recordset is read-only"

Har fundet ud af, at jeg nok skal sætte en LOCK TYPE - men hvad og hvordan og hvorledes??

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 01:25 #1
Prøv med

Rs1.Open sql_str, Session("Conn1"), 1, 3


Se mere omkring rs.Open her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adoce31/html/ado30ref_28.asp
Avatar billede hobbez Nybegynder
03. november 2002 - 01:25 #2
Har prøvet med:

Rs1.Open sql_str, Session("Conn1"), 1, 3

Men får så:


ADODB.Recordset.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near '; ' at line 1

/guestbook/GuestBookSignWrite.asp, line 28

(det er linie 28 jeg har rettet).

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 01:29 #3
OK i min verden var det fremgang prøv med denne SQL:

sql_str = "Select * from guestbook where gb_index is NULL;"
Avatar billede eagleeye Praktikant
03. november 2002 - 01:30 #4
Jeg mener den er casesenativ men kan ikke helt huske det ;)
Avatar billede hobbez Nybegynder
03. november 2002 - 01:34 #5
eagleeye: Det var det også i min - derfor skrev jeg det her, for at opdage at du havde foreslået præcist det samme :o)

Men null eller NULL - det giver ingen forskel :o/

Har også prøvet med 'null' - i anførselstegn. No luck.

/Rob
Avatar billede hobbez Nybegynder
03. november 2002 - 01:36 #6
Har nu også prøvet med 'NULL' og '%NULL%' :o(

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 01:37 #7
Jeg kan ikke helt se en syntax fejl her, for man skal jo bruge is når det null man søger efter... Er kolonnenavnet skrevet rigtigt?

"Select * from guestbook where gb_index is null;"
Avatar billede hobbez Nybegynder
03. november 2002 - 01:43 #8
ja, jeg har lige triple-checket det - det hedder gb_index og står som primary key.

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 01:51 #9
Kan en primary key være Null?
Avatar billede hobbez Nybegynder
03. november 2002 - 02:00 #10
Nej, vel ikke som sådan - jeg forsøger at finde nummeret på den næste record.

Hvis jeg har 4 indlæg i min gæstebog, så bliver nummer 5 vel Null fordi den ikke findes? Går jeg ud fra?

Det er en standard gæstebog jeg har hentet på nettet, som jeg så bare forsøger at tilpasse.

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 02:03 #11
Hvis kolonnen er sat til auto increment så tæller databasen den selv en op når du ligger nye data i, og hvis du vil lave en SQL som ikke hendter et stor recordset ud når der skal nye data i kan du hendte hvor gb_inde = 0, den record vil heller ikke findes:

sql_str = "Select * from guestbook where gb_index = 0;"
Avatar billede hobbez Nybegynder
03. november 2002 - 02:13 #12
Hvis jeg kommenterer et par linier ud:

    Set Rs1 = Server.CreateObject("ADODB.Recordset")
    'sql_str = "Select * from guestbook where gb_index is NULL;"
    'Rs1.Open sql_str, Session("Conn1"), 1, 3
    Rs1.Addnew

Så får jeg:


ADODB.Recordset.1 error '800a0e78'

Invalid operation on closed object

/guestbook/GuestBookSignWrite.asp, line 29

Så på en eller anden måde skal jeg altså have fundet ud af at lave en valid SQL-sætning, bare for at få åbnet databasen?

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 02:17 #13
Hvad men den sidste jeg foreslog

    Set Rs1 = Server.CreateObject("ADODB.Recordset")
    sql_str = "Select * from guestbook where gb_index = 0;"
    Rs1.Open sql_str, Session("Conn1"), 1, 3
    Rs1.
Avatar billede eagleeye Praktikant
03. november 2002 - 02:18 #14
How Addnew er sparet væk i min sidste kommentar :)
Avatar billede eagleeye Praktikant
03. november 2002 - 02:21 #15
Hvis du bare vil åbne til databasen så kan du lave SQL sådan her:

sql_str = "Select * from guestbook;"

Men så hendter du alle poster i databasen..Derfor ville det være smart hvis det virkede med WHERE gb_index = 0; i SQL'en:

sql_str = "Select * from guestbook where gb_index = 0;"
Avatar billede hobbez Nybegynder
03. november 2002 - 02:22 #16
eagleeye: Sorry - den har jeg prøvet - ingen ændring.

Har også prøvet med 1 (har lagt en record i databasen), men lige lidt hjalp det :o(

/Rob
Avatar billede hobbez Nybegynder
03. november 2002 - 02:24 #17
sql_str = "Select * from guestbook;"

giver stadig


ADODB.Recordset.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near '; ' at line 1


/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 02:25 #18
??det forstår jeg ikke...Prøv at skrive:

sql_str = "SELECT * FROM guestbook WHERE gb_index = 0;"

Og hvis guestbook har store bogstaver så ændre det i SQL sådan at tabel og kolonnenavn er skrevt 100% ens eks: Guestbook
Avatar billede eagleeye Praktikant
03. november 2002 - 02:28 #19
Eller fjerne ; ?
Avatar billede hobbez Nybegynder
03. november 2002 - 02:29 #20
Ingen ændring :o(

/Rob
Avatar billede hobbez Nybegynder
03. november 2002 - 02:30 #21
Jeg kan godt LÆSE i gæstebogen:

<%Set Rs1 = Server.CreateObject("ADODB.Recordset")
sql_str = "Select * from guestbook order by gb_index desc;"
Rs1.Open sql_str, Session("Conn1")

Funker helt som ventet !!
Avatar billede eagleeye Praktikant
03. november 2002 - 02:36 #22
Det forstår jeg simpelthen ikke... Har du prøvet dette:

    Set Rs1 = Server.CreateObject("ADODB.Recordset")
    sql_str = "Select * from guestbook;"
    Rs1.Open sql_str, Session("Conn1"), 1, 3
    Rs1.Addnew
Avatar billede hobbez Nybegynder
03. november 2002 - 02:38 #23
Ja.

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 02:45 #24
hvad hvis du prøv og ændre det til:

Rs1.Open sql_str, Session("Conn1"), 2, 3

Rs1.Open sql_str, Session("Conn1"), 1, 2
Avatar billede hobbez Nybegynder
03. november 2002 - 02:47 #25
Ingen ændring - samme fejl.

Kan der være for mange sessions åbne mod databasen - efter al min test?

/Rob
Avatar billede eagleeye Praktikant
03. november 2002 - 02:55 #26
tja... det tror jeg nu ikke...

Så må du lave en SQL som indsætter data i databasen:

SQL = "INSERT INTO guestbook (navn, besked) VALUES ('" & request.form("navn") & "', '" & request.form("besked") & "');"
Session("Conn1").Execute (SQL)

jeg ved ikke om man kan lave Session("Conn1").Execute

Eller så kan man skrive:

rs1.Open SQL, Session("Conn1")
Avatar billede eagleeye Praktikant
03. november 2002 - 02:56 #27
Jeg smutter i seng nu..
Avatar billede hobbez Nybegynder
03. november 2002 - 03:55 #28
Fandt fejlen:

sql_str = "Select * from guestbook where gb_index is NULL;"

Skulle hedde

'sql_str = "Select * from guestbook where gb_index is NULL"

Altså var det bare den lille ";" som ikke skulle bruges.

Simpelt, ikke?? :o(

Tak for hjælpen alligevel :o)

/Rob
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