connection.execute("INSERT INTO ordre ([kunde,dato]) VALUES ("& id & ", #" & toSqlDate(dato()) &"#)"); res = connection.execute("SELECT id FROM ordre WHERE kunde='& id &' ORDER BY id DESC");
Har ændret lidt i det så linj:en er flg: connection.execute("INSERT INTO ordre (kunde,dato) VALUES ("+ id + ", #" + showDate(new Date()) +"#)");
og har included dato.js som ser således ud:
<% function showDate(){ dt = new Date(); //gets today's date right now (to the millisecond) month = dt.getMonth()+1; day = dt.getDate(); year = dt.getFullYear();
Dvs. return skal sættes ind så det bliver: <% function showDate(){ dt = new Date(); //gets today's date right now (to the millisecond) month = dt.getMonth()+1; day = dt.getDate(); year = dt.getFullYear(); return dt;
Ja, det vil i det mindste returnere den dato du får skabt med new Date(), men de andre ting du gør har ikke nogen effekt, med mindre du har nogle globale variable som hedder, month, day og year...
<% function showDate(){ dt = new Date(); //gets today's date right now (to the millisecond) month = dt.getMonth()+1; day = dt.getDate(); year = dt.getFullYear(); return year + '-' + month + '-' + day; }
Ja, hvis din egen giver lidt problemer (pga. formatet kan tolkes forskelligt alt efter hvilket land du er i og hvilken landekode din side er sat til at benytte), så kan du jo prøve den jeg foreslog i post 16/01-2006 13:38:11...
Hvis du bruger din egen showDate fra 16/01-2006 13:38:17, så skal du lige undlade at lægge 1 til month 2 gange... det kan resultere i en ugyldig dato (da måned kan blive 13)...
Faktisk så vil jeg anbefale dig at bruge min version af showDate, da dn egen har flere fejl (med mindre du har funktioner som hedder day, month og year).
Ja, indtil videre er det de første 3 linier der er interessante (da siden stopper efter Response.End(). Det er bare for at se hvilken SQL der kommer ud af det...
Det er hvis du bruger din egen version af showDate. Jeg er ret overbevist om at hvis du bruger den version jeg har flikket sammen, så kommer det ikke til at se sådan ud...
Jeps, så begynder det at ligne noget. Det der mangler er en værdi i den variabel der hedder id. Som du kan se er den første værdi tom i VALUES-listen og det må den ikke være. Derfor skal du sikre dig at den variabel der hedder id har en gyldig værdi (dvs. en der stemmer ovenens med den type som feltet kunde har i databasen...
// registrer ordren Application.Lock(); connection.execute = "INSERT INTO ordre (kunde,dato) VALUES ("+ id + ", #" + showDate() + "#)"; res = connection.execute("SELECT id FROM ordre WHERE kunde='+ id +' ORDER BY id DESC"); ordrenummer = res.Fields("id"); Application.Unlock();
Ok, hvordan kommer den over i variablen, for der er tydeligvis noget galt med det udtræk (måske antager du der returneres en række hvor der ikke gør eller sådan noget). Prøv at vise den kode hvor denne værdi tildeles...
OK = 0; FORKERT_KODEORD = 1; KUNDE_EKSISTERER = 2;
con = createDatabaseConnection();
// kontroller først, om kunden er logget ind id = -1; if (Request.Cookies("kundeid") != "") { id = opdaterKunde(Request.Cookies("kundeid")); } else { id = tilfojKunde(); }
// registrer ordren Application.Lock(); connection.execute = "INSERT INTO ordre (kunde,dato) VALUES ("+ id + ", #" + showDate() + "#)"; res = connection.execute("SELECT id FROM Ordre WHERE kunde='+ id +' ORDER BY id DESC"); ordrenummer = res.Fields("id"); Application.Unlock();
function tilfojKunde(id) { // kontroller, at de to kodeord er ens if (!strcmp(Request.Form("kodeord1"),Request.Form("kodeord2"))) { printResult(FORKERT_KODEORD); }
// kontroller, at der ikke allerede eksisterer en kunde med den email-adresse res = connection.execute("SELECT id FROM kunde WHERE email='" + Request.Form("Email") + "'"); if (!res.EOF) { // kunden eksisterer printResult(KUNDE_EKSISTERER); }
Der er et par fejl i rutinen tilfojKunde. Dels bliver den INSERT du har lavet ikke udført, dels mangler der en apostrof efter adressefeltet. Prøv evt. denne version i stedet:
function tilfojKunde(id) { // kontroller, at de to kodeord er ens if (!strcmp(Request.Form("kodeord1"),Request.Form("kodeord2"))) { printResult(FORKERT_KODEORD); }
// kontroller, at der ikke allerede eksisterer en kunde med den email-adresse res = connection.execute("SELECT id FROM kunde WHERE email='" + Request.Form("Email") + "'"); if (!res.EOF) { // kunden eksisterer printResult(KUNDE_EKSISTERER); }
res = connection.execute("SELECT @@IDENTITY AS id"); return res.Fields("id"); }
Desuden vil jeg til hver en tid anbefale at du benytter SELECT @@IDENTITY til at finde den række du lige har oprettet, da den er mere sikker (og generisk) end alle mulige andre metoder der selecter på de data man lige har indsat.
1. Hvilken af de mindst 2 linier med connection.execute(sql) er der tale om?
2. Hvordan ser SQL-sætningen ud (benyt tricket med Response.Write + Response.End)?
3. Hvad ligger der i den cookie du bruger til at afgøre om der skal opdateres eller oprettes en kunde?
Jeg kan stadig finde flere syntaktiske fejl i koden, så det er interessant at vide lidt mere hvilken vej igennem koden du kører i øjeblikket. Hvis du er mere specifik med hvor i koden fejlen opstår, kan jeg hurtigere hjælpe dig med at rette fejlen... :)
Fint nok, men vi kunne (og kan stadig) godt have fundet en løsning på din udfordring, der er bare lige nogle steder i din kode som skal ændres lidt for at det kommer til at spille... så umulig er koden jo heller ikke ;-)
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.