Hvordan "fejler" den? Hvad sker der? Hvad sker der ikke? Hvad forventede du at der skulle ske? Får du en fejlbesked? Hvilken?
Hvis databasen opføre sig underligt, skyldes det i 9 ud af 10 tilfælde at din SQL-sætning indeholder noget andet end du tror. Det er derfor altid en god ide at starte med at udskrive den før at man forsøger at udføre den:
1. der er som sådan ikke nogen fejl, men alligevel.
error '80020009' /orderbekraftelse_mail.asp, line 138
det er alt hvad jeg får. så jeg kan ikke give dig mere at arbejde med.
2. der sker det at jeg ikke kommer videre.
3. det er skal ske er at når man har accepteret sin order skal man klikke på en knap som udløser at der bliver sendt en mail og dataerne fra tabellen shop_varekurv skal overføres til tabellen shop_order og så skal man sendes videre til selv orderbekrætelsen på hjemmesiden.
Ok og tak. Grunden til at jeg gerne ville vide det, er at fejlen bl.a. kan opstå i forbindelse med at man har brugt TEXT- eller BLOB-lignenede typer. Dette er ikke tilfældet her.
Et andet sted jeg har set det gå galt et par gange (men ikke altid) er når man tilgår det samme felt i et recordset 2 gange i træk:
<% sql = "SELECR demoFelt FROM demoTabel" Set rs = Conn.Execute(sql)
While Not rs.EoF ' 1. gang går det godt ... Response.Write rs("demoFelt") & "<br>" ' Feltet udskrives
' ... men 2. gang fejler det ganske mystisk Response.Write rs("demoFelt") & "<br>" ' Feltet udskrives ikke
rs.MoveNext WEnd %>
Jeg ved ikke om det er noget sådant der gør sig gældende i dit tilfælde, men det kunne godt tænkes. Du bruger vel værdierne fra dine Record-, Record2- og Record3-recordset til andet end kun at lave den SQL-sætning som det fejler i?
Løsningen ud af det ovenstående eksempel, er normalt at gemme værdien i en variabel og så udskrive denne i stedet:
<% sql = "SELECR demoFelt FROM demoTabel" Set rs = Conn.Execute(sql)
Jeg bruger mine recordsets til første og fremmest til at hive data ud af min database og i samme omgang at hive mere data ud. Dernæstskal de dataer udskrives på siden og i en mail.
Men det der fejler er når jeg skal skrive de samme dataer ind i min order-tabel som skal gemme alle ordrene.
Men har jeg forstået dig korrekt så vil du mene jeg skal gemme alle mine recordsets i variabler og udskrive dem?
textMsg = textMsg & "Tak for bestilling fra min webbutik" & vbCrLf & vbCrLf & vbCrLf textMsg = textMsg & "Jeg sender nu en ordrebekræftelse, svarer ordren i emailen ikke til det du har bestilt," & vbCrLf & vbCrLf textMsg = textMsg & "så kontakt mig hurtigst muligt via emailen i bunden." & vbCrLf & vbCrLf textMsg = textMsg & "Ordrens indhold :" & vbCrLf & vbCrLf & vbCrLf textMsg = textMsg & "Antal # Model Pris/stk. I alt" & vbCrLf & vbCrLf textMsg = textMsg & "------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf
htmlMsg = htmlMsg & "Tak for bestilling fra min webbutik<br><br>" htmlMsg = htmlMsg & "Jeg sender nu en ordrebekræftelse, svarer ordren i emailen ikke til det du har bestilt,<br>" htmlMsg = htmlMsg & "så kontakt mig hurtigst muligt via emailen i bunden.<br><br>" htmlMsg = htmlMsg & "Ordrens indhold :<br>" htmlMsg = htmlMsg & "<table align=center border=1 style=width: 450px; height: *;>" htmlMsg = htmlMsg & "<tr>" htmlMsg = htmlMsg & "<td width=45px align=center>Antal</td><br>" htmlMsg = htmlMsg & "<td width=95px align=center>#</td>" htmlMsg = htmlMsg & "<td width=120px align=center>Model</td>" htmlMsg = htmlMsg & "<td width=60px align=center>Størrelse</td>" htmlMsg = htmlMsg & "<td width=70px align=center>Pris pr. stk.</td>" htmlMsg = htmlMsg & "<td width=60px align=center>I alt</td>" htmlMsg = htmlMsg & "</tr>"
varetotalen=0 sql="SELECT * FROM shop_varekurv WHERE sessionsid='"&session.sessionid&"'" set Record = rs.Execute(sql) do while not Record.eof sql="SELECT * FROM shop_varer WHERE vareid='"&Record("vareid")&"'" set Record2 = rs.Execute(sql) x=1 varetotal=Record("antal")*Record2("pris") varetotalen=varetotalen+varetotal
Prøv at downloade følgenede zip-fil, unzip og kig på chapter15, som er en simpel webshop, der bare skal finjuseres lidt til dit behov. Så vidt jeg kan se bruger du ikke sessioner til at gemme data og du bruger heller ikke to tabeller fra din database på samme tid. Jeg synes at du burde overveje at gøre koden lidt mere overskuelig for dg selv. Jeg skal nok hjælpe dig i gennem.
Jeg har det lidt svært med den måde hvor du bruger din Record2:
Du definere den inden i din Do-While løkke:
do while not Record.eof sql = "SELECT * FROM shop_varer WHERE vareid='"&Record("vareid")&"'" set Record2 = rs.Execute(sql)
...
Record.movenext loop
- og så forsøger du at bruge den udenfor løkken, meget længere nede i koden. Da Do-While løkken køre en gang pr. række i Record, kan jeg ikke rigtigt se hvad Record2(...) forventes at være når løkken er kørt færdig? Kan du forklare mig hvad pointen er bag denne konstruktion?
Et relateret spørgsmål: Du fortæller at du ikke får fejl når du "... undlader alle record kald, i den del der skal skrive data i shop_order ...". Sker det også:
1) hvis du *kun* undlader Record2? 2) Eller skal både Record2 og 3 undlades før der ikke er fejl? 3) Eller skal Record *også* undlades?
sql = "SELECT * FROM shop_kunder WHERE kundeID = "&session("brugerid")&" " set Record3 = rs.Execute(sql)
Derefter har du en loop som løber igennem samtlige rækker i Record:
do while not Record.eof sql = "SELECT * FROM shop_varer WHERE vareid='"&Record("vareid")&"'" set Record2 = rs.Execute(sql)
Record.movenext loop
Men så er Record jo ved EoF (den er "løbet ud over enden") når loop'en afsluttes, og det vil derfor fejle hvis du efterfølgende forsøger at bruge den igen. Og det gør du jo i din SQL.
(PS: Det ser nu stadig underligt ud den måde du bruger din Record2.)
Det afhænger jo af hvad det egentlig er du ønsker? Du looper igennem samtlige rækkre i Record. Og først *efter* at du er løbe igennem dem forsøger du at gøre noget med data ... det giver ikke helt mening.
Skal du ikke heller lave noget med dine data i Record *mens* at du løber igennem rækkerne?
Jeg ved ikke hvad du mener med lappeløsning ... du har/havde lavet en løsning som ikke virker. Uden dog at have kigget din kode *meget* grundigt igennem, vil jeg gætte på at du bare skulle have flyttet din sidse sql-sætning indenfor i loopen i stedet for at have den til sidst.
Men nu har du jo fået det til at virke på anden vis, og det er jo lige så godt. :^)
Lad os derfor ligge på dit sidset problem: Hvad mener du med at "konvertere money"?
Problemet med pris er, når jeg udskriver pris på siden kommer det frem sådan her 19,95 når jeg skal skrive det ind i databasen skal det være 19.95. Kan du forstå hvad jeg mener?
Dek kan komme hvor som helst fra: Som følge af at den er skrevet direkte ind i koden (som i eksemplet), som resultat af en udregning, eller den kan komme fra et databaseudtræk.
det var så lidt, der kommer mok MEGET :( snart et nyt spørgsmål hvor du kan få nogle point.
Synes godt om
Ny brugerNybegynder
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.