Avatar billede killer_r Nybegynder
13. august 2004 - 19:53 Der er 10 kommentarer og
1 løsning

multiple-step operation generated errors

Jeg har et forum hvor jeg får denne fejl når jeg vil indsætte et nyt indlæg:

Microsoft curser engine error 80040e21
multiple-step operation generated errors. Check each status value.
line 312

Koden omkring linje 312 ser sådan ud:

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.Open "Tavlen", Conn, 3, 3
rs.AddNew
    rs("svarid") = IntSvarid
    rs("adgang") = IntAdgang
    rs("overskrift") = StrOverskrift '<--- Linje 312
    rs("besked") = StrBesked
    rs("forfatter") = StrForfatter
    rs("MailMode") = StrMailMode
    rs("email") = StrEmail
    rs("key") = StrKey
rs.Update
NyId = rs("id")
rs.Close
Set rs = Nothing

Fejlen kommer en gang imellem og har et eller andet at gøre med overskriften... Hvis man f.eks skriver "Samfundshjælperne i aktion - redder studerende fra eksamensstress!!!" i overskriften melder den fejlen... Andre gange er der ikke noget problem...

Hvordan retter jeg fejlen?
Avatar billede eagleeye Praktikant
13. august 2004 - 23:47 #1
Fejlen kan komme hvis man forsøge at tilføje mere data end kolonnen tillader. Eksempel hvis kolonnen "overskrift" er sat til max 30 tegn og man forsøger at ligge flere end 30 tegn ind kommer fejlen.

Hvilken database bruger du?
Er det mySQL er du nok nød til at gå over til at lave en INSERT INTO sql sætning da mySQL og recordset addnew ikke spille 100%.
Avatar billede killer_r Nybegynder
14. august 2004 - 14:03 #2
Jeg bruger access....
Avatar billede killer_r Nybegynder
14. august 2004 - 14:19 #3
Jeg overvejer dog at skifte til MySQL... Men det er vist et problem med en INSERT INTO at hente det id ud som lige er blevet oprettet (vha. noget autonummerering...)
Avatar billede eagleeye Praktikant
14. august 2004 - 14:22 #4
Så prøv at tjekke det første jeg skrev, det kan stadig give fejlen.


mySQL har en inbygget funktion som kan finde det sidste tilføjet ID.

kode eksemple:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={MySql};Server=servernavn; Database=dbnavn; UID=brugernavn; PWD=password;")

'Først indsæt data
SQL = "INSERT INTO tabelNavn (kol1, kol2) VALUES('abc', 'xyz')"
Conn.Execute (SQL)

'Find sidste tilføjet ID
SQL = "SELECT last_insert_id FROM tabelNavn"
Set rs = Conn.Execute(SQL)
nytID = rs(0)

Response.Write nytID
%>
Avatar billede eagleeye Praktikant
14. august 2004 - 14:24 #5
Nogle drivere til access understytter dette styk kode som giver det sidte ID ud:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.JET.OLEDB.4.0;Date Source=" & Server.MapPath("somedir/somedb.mdb")

'Først indsæt data
SQL = "INSERT INTO tabelNavn (kol1, kol2) VALUES('abc', 'xyz')"
Conn.Execute (SQL)

'Find sidste tilføjet ID
SQL = "SELECT @@IDENTITY FROM tabelNavn"
Set RS = Conn.Execute(SQL)
nytID = RS(0)
RS.Close
response.write nytID
%>
Avatar billede killer_r Nybegynder
14. august 2004 - 14:28 #6
Jeg er også ved at kigge på det med længden af det der indsættes i databasen... Det kunne godt tænkes det giver fejlen... ;o)

Det vil sige at hvis man gør sådan i MySQL:
SQL = "INSERT INTO tabelNavn (kol1, kol2) VALUES('abc', 'xyz');SELECT last_insert_id FROM tabelNavn"
Set rs = Conn.Execute(SQL)
nytID = rs(0)

Skulle man få det nye id ud???
Avatar billede eagleeye Praktikant
14. august 2004 - 16:17 #7
Ja både og.  Så vidt jeg ved kan mySQL ikke udføre flere SQL sætninger i samme streng, det er kun MSSQL som kan det.

Du kan gøre det som vist 14/08-2004 14:22:50 og den henter det rigtige så længe man bruge samme Connection til både at indsætte og hente ID'et ud med.
Avatar billede killer_r Nybegynder
15. august 2004 - 16:10 #8
også selv om det skulle ske (dog meget usandsynligt) at en anden bruger når at oprette en ny post imellem de to database-kald... Vil den så ikke retunere den anden brugers sidst oprettede id?
Avatar billede eagleeye Praktikant
15. august 2004 - 21:15 #9
Nej, så længe man bruge samme connection til at indsætte og hente ID får man det rigtig ID på den måde.
Avatar billede killer_r Nybegynder
15. august 2004 - 21:25 #10
Cool... Som altid er du en redningsmand eagleeye!
Læg lige et svar...
Avatar billede eagleeye Praktikant
15. august 2004 - 21:30 #11
Ok :)
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

IT-JOB

KMD A/S

Projektleder

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger Entreprise Arkitekt

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen