Avatar billede tdaugaard Nybegynder
13. februar 2001 - 08:38 Der er 11 kommentarer og
1 løsning

SQL: Problem med Rs.AddNew

Jeg sidder og arbejder på et system i ASP der SKAL kunne køre på både en Access DB og en MySQL kun ved at sætte en variabel til noget andet.

Jeg har brugt bl.a.

strSQL = \"SELECT * FROM questions;\"
Rs.Open strSQL, Conn, 1, 3
Rs.AddNew

strDT = GetDateTime

Rs(\"user\") = Session(\"user\")

til at tilføje noget til databasen, men her ligger problemet for jeg bruger NØJAGTIGT samme \"procedure\" i en anden fil hvor det virker fint (dog ikke samme tabel)

jeg får flg. fejl når jeg prøver at udføre ovenstående kode:

Microsoft OLE DB Provider for ODBC Drivers fejl \'80040e21\'

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

/forum/forum_save_question.asp, linje 48


Linie 48 er Rs(\"user\") = Session(\"user\") ..

ehm .. nogle bud ?
Avatar billede meelby Nybegynder
13. februar 2001 - 09:19 #1
Hej tdaugaard

Smid noget kode ind, så kan vi bedre hjælpe. Det kan jo være en fejl der ikke nødvendigt kun kommer fra linie 48 ;)
Avatar billede tdaugaard Nybegynder
13. februar 2001 - 09:22 #2
meelby:> ehm .. hvis jeg udkommentere den linie (48) så får jeg bare fejl på linie 49 (som er \"Rs(\"title\") = Post_Title) men jeg kan da godt poste noget mere kode ... you asked for it! Her er hele min forum_save_question.asp

<%    Response.Buffer = True %>
<!--#include file=\"include/inc_system.asp\" -->
<%
    If Session(\"user\") = \"\" Then Response.Redirect \"done.asp?p=default.asp\"
   
    Set Conn = Server.CreateObject(\"ADODB.Connection\")
    Conn.Open ConnectionString

    Post_CatID = Request(\"catid\")
    Post_Title = Request(\"title\")
    Post_Body = Request(\"body\")
    Post_Point = Request(\"point\")
   
    intValid = True

    If Post_Title = \"\" Then intValid = False: strMsg = \"Du skal skrive en overskrift til spørgsmålet!\"
    If Post_Body = \"\" Then intValid = False: strMsg = \"Du kan ikke oprette et tomt spørgsmål!\"
    If Post_Point = \"\" Or Not IsNumeric(Post_Point) Or InStr(Post_Point, \".\") Or InStr(Post_Point, \",\") Then intValid = False: strMsg = \"Point antallet skal være et helt tal!\"
    If IsNumeric(Post_Point) And CLng(\"0\" & Post_Point) < 0 Then intValid = False: strMsg = \"Du kan ikke afsætte mindre end 0 point til et spørgsmål!\"
    If IsNumeric(Post_Point) And CLng(\"0\" & Post_Point) > CLng(\"0\" & Session(\"point\")) Then intValid = False: strMsg = \"Du kan højst afsætte \" & Session(\"point\") & \" point til dette spørgsmål!\"
           
    strSQL = \"SELECT id FROM quest_subcats WHERE id=\" & Post_CatID & \";\"
    Set Rs = Conn.Execute(strSQL)
    If Rs.BOF Or Rs.EOF Then intValid = False: strMsg = \"Den angivne kategori eksisterer ikke!\"
           
    If Not intValid Then
%>
<!--#include file=\"include/inc_page_head.asp\" -->
<b>Der opstod en fejl under oprettelse af dit spørgsmål!</b><br>
Fejlen er: <font color=\"#800000\"><i><%=strMsg%></i></font>
<p>
Gå <a href=\"java script:history.back(-1)\">tilbage</a> og ret fejlen, og prøv igen.
<!--#include file=\"include/inc_page_foot.asp\" -->
<%
    Else
        Conn.Close
        Conn.Open ConnectionString
        Set Rs = Server.CreateObject(\"ADODB.Recordset\")

        Post_Body = Server.HTMLEncode(Post_Body)

        strSQL = \"SELECT * FROM questions;\"
        Rs.Open strSQL, Conn, 1, 3
        Rs.AddNew

        strDT = GetDateTime

        Rs(\"user\") = Session(\"user\")
        Rs(\"title\") = Post_Title
        Rs(\"cat\") = Post_CatID
        Rs(\"body\") = Post_Body
        Rs(\"active\") = 1
        Rs(\"status\") = 2
        Rs(\"datetime\") = strDT
        Rs(\"point\") = Post_Point

        Rs.Update
        Rs.Close

        strSQL = \"SELECT id FROM questions WHERE user=\'\" & Session(\"user\") & \"\' AND datetime=\" & DTUC & GetDTFromString(strDT) & DTUC & \";\"
        Set Rs = Conn.Execute(strSQL)
        strID = Rs(\"id\")

        strSQL = \"INSERT INTO quest_subscriptions (spmid, user) VALUES (\" & strID & \",\'\" & Session(\"user\") & \"\');\"
        Conn.Execute strSQL

        strSQL = \"SELECT quest_cats.name AS tname, quest_subcats.name AS sname FROM quest_cats INNER JOIN quest_subcats ON quest_cats.id=quest_subcats.parent WHERE quest_subcats.id=\" & Post_CatID & \";\"
        Set Rs = Conn.Execute(strSQL)
        strCatName = Rs(\"tname\") & \" :: \" & Rs(\"sname\")

        strText = \"Hej \" & strUser & \",\" & vbCrLf & vbCrLf
        strText = strText & Session(\"user\") & \" har oprettet spørgsmålet:\" & vbCrLf & vbCrLf
        strText = strText & \"Overskrift: \" & Post_Title & vbCrLf
        strText = strText & \"Kategori: \" & strCatName & vbCrLf
        strText = strText & \"Point: \" & Post_Point & vbCrLf
       
        Set JMail = Server.CreateObject(\"JMail.SMTPMail\")
            JMail.ServerAddress = Site_SMTPServer
            JMail.Sender = Site_SenderMail
            JMail.SenderName = Site_SenderName
            JMail.Subject = \"Tilmelding: Bekræftelse\"
            JMail.Body = strText
            JMail.AddRecipient Form_Email
            JMail.Priority = 1

            \'JMail.Execute
        Set JMail = Nothing

        \'Response.Redirect \"done.asp?p=forum_spm.asp?id=\" & strID
    End If

    Set Rs = Nothing
    Conn.Close: Set Conn = Nothing
%>
Avatar billede erikjacobsen Ekspert
13. februar 2001 - 09:55 #3
Jeg har ikke læst din kode igennem, td, men min erfaring med ASP og MySql giver
netop et problem i den sammenhæng. Laver du en select fra MySQl,
for at lave et recordsæt, med henblik på opdatering, tror ASP at felterne
har den præcise længde, som de \"tilfældige\" felter du fik fat i. Og ASP kan så
ikke gøre dem længere. Løsningen for mig (øh, min studerende) var udelukkende
at bruge INSERT og UPDATE.
Avatar billede tdaugaard Nybegynder
13. februar 2001 - 13:04 #4
e.j.:> *hulk hulk snøft* TIS! .. der er lidt .. ehm .. ØV for jeg HAR haft det kørende med INSERT og UPDATE\'s men der gik det også galt for mySQL\'en :-(
det er bare underligt når det virker et andet sted .. men hvad .. det er bare surt -(
Avatar billede erikjacobsen Ekspert
13. februar 2001 - 13:19 #5
Tjah, du skal vel bare have

  if saaerdetaccess then
    sql=\"insert med én syntaks\"
  else
    sql=\"insert med en anden syntaks\"
  end if

eller hvad?
Avatar billede tdaugaard Nybegynder
13. februar 2001 - 13:25 #6
e.j.:> *suk* tjaae .. det er nok det eneste der er at gøre :-(
Avatar billede sone Nybegynder
13. februar 2001 - 14:16 #7
Brug SQL (INSERT INTO ....) så kan du vel bruge samme syntaks for begge ??
Avatar billede tdaugaard Nybegynder
13. februar 2001 - 14:18 #8
sone:> nemlig ikke .. jeg får fejl på enten den ene eller den anden DB..

e.j.:> laver du lige et svar ?
Avatar billede erikjacobsen Ekspert
13. februar 2001 - 14:19 #9
Jah, men ligefrem 38 p - er det ikke for meget ??
Avatar billede sone Nybegynder
13. februar 2001 - 14:22 #10
...hvad er forskellen i syntax ?
Avatar billede erikjacobsen Ekspert
13. februar 2001 - 14:26 #11
Man kunne forestille sig noget med datoer - der er vist forskel
Avatar billede tdaugaard Nybegynder
13. februar 2001 - 15:39 #12
e.j.:> 38pts? nææ .. nu er det jo ikke ligefrem fordi jeg _mangler_ point ..
Og ja, der er forskel på syntaxen med datoer mht. Access vs. MySQL.

Access skal have #(dato)# mens MySQL skal have \'(dato)\', UDOVER det skal MySQL serveren have et andet datoformat end \"now()\" har jeg fundet ud af  .. jeg har sku en 2-3 forskellige dato behandlingsfunktioner for at de virker ordentligt.. (det drejer sig om mit eksperten wannabe forum http://www.eksperten.dk/spm/49625)
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