Avatar billede natsprinter Nybegynder
17. september 2007 - 14:02 Der er 12 kommentarer og
1 løsning

Strenge i SQL konverteres til 0 (tal) Hvad gør jeg forkert - ASP

Jeg har følgende helt simple SQL sætning:

sql = "insert into blog_sub (id, blogID, tekst, godkendt, dato) values ("
sql = sql & "id = NULL, "
sql = sql & "blogID = "&request.Form("id")&", "
sql = sql & "tekst = '"& request.Form("tekst")&"', "
sql = sql & "godkendt = 'JEPS', "
sql = sql & "dato = '"&dagsDato&"')"
conn.execute(sql)


Det genererer en sql-sætning der ser således ud:

insert into blog_sub (id, blogID, tekst, godkendt, dato) values (id = NULL, blogID = 4, tekst = 'Dette er en test', godkendt = 'JEPS', dato = '17-09-2007')

Jeg får ingen fejl fra MySql, og når jeg sætter denne sql ind i PhpMyadmin - så fungerer det fint. Når jeg gør det fra nettet, så indsætter der et 0 i alle felter. Kun id bliver opdateret som den skal.

Jeg har adskellige andre tabeller kørende, og det virker fint, kun denne driller - hvad kan det skyldes.

Webhotellet ligger hos One.
Avatar billede michael_stim Ekspert
17. september 2007 - 14:06 #1
Er id autonumering eller primärnögle eller lign.?
Avatar billede fennec Nybegynder
17. september 2007 - 14:06 #2
Hvis SQL'en virkelige kommer til at se ud som du skriver skal systemet virke. Mit bud er at 2 ting kan skyldes problemet:

1. Din sql ser ikke ud som du skriver. Er den udskrevet via response.write??
...
sql = sql & "dato = '"&dagsDato&"')"
response.write "SQL: "& sql
conn.execute(sql)

2. Hvis ID er et autonummer felt, er det ikke nødvendigt at tage den med på indsættelsen:
sql = "insert into blog_sub (blogID, tekst, godkendt, dato) values ("
sql = sql & "blogID = "&request.Form("id")&", "
sql = sql & "tekst = '"& request.Form("tekst")&"', "
sql = sql & "godkendt = 'JEPS', "
sql = sql & "dato = '"&dagsDato&"')"
Avatar billede fsconsult.dk Nybegynder
17. september 2007 - 14:08 #3
det er ikke noget simpelt, som at tekst og godkendt er defineret som tal i MySQL ??
Avatar billede natsprinter Nybegynder
17. september 2007 - 14:18 #4
Ja - id er autonumerering:

SQL output er udskrevet med response.write
Avatar billede fennec Nybegynder
17. september 2007 - 14:34 #5
Og den kan du klip/klistre ind i PhpMyadmin og køre uden problemer??

Det burde være fysisk umulig. Virker det i PhpMyadmin skal det også virke via conn.execute... Det er den samme forspørgsel der sendes til MySQL og skal derfor også virke begge veje.
Avatar billede michael_stim Ekspert
17. september 2007 - 14:36 #6
Men som fennec har påpeget, du skal ikke have id med.
Avatar billede natsprinter Nybegynder
17. september 2007 - 14:46 #7
Nu kommer det mærkelige. MySql laver følgende sql:

INSERT INTO `blog_sub` (`id`, `blogID`, `tekst`, `godkendt`, `dato`) VALUES (NULL, '2', 'fff', 'nej', '17-09-2007'), (NULL, '', '', 'nej', '');

Altså ligges denne streng til:
(NULL, '', '', 'nej', '');

Det afstedkomme at der oprettes to nye poster, men de bliver da oprettet. Fjerner jeg denne del af strengen:
(NULL, '', '', 'nej', '');

Så er det samme problem som før - Jeg må ha lavet et eller andet helt galt?
Avatar billede fennec Nybegynder
17. september 2007 - 15:01 #8
Den skal jeg lige have en gang til...
Hvor kom "(NULL, '', '', 'nej', '');" fra?? Er det noget du har sat på eller hvad?
Avatar billede natsprinter Nybegynder
17. september 2007 - 15:08 #9
Nu er det jo sådan at det man først bliver blind på er øjnene: Min opbygning af sql er jo syntax til UPDATE

Dette virker:

sql = "insert into blog_sub (blogID, tekst, dato) values ("
sql = sql & "'"&int(request.Form("id"))&"', "
sql = sql & "'"& request.Form("tekst")&"', "
sql = sql & "'"&dagsDato&"')"
conn.execute(sql)

Hold da op, hvor var jeg længe om at opdage det :-D

Smid nogle svar så i kan få lidt point for jeres tid !!
Avatar billede michael_stim Ekspert
17. september 2007 - 15:11 #10
UPDATE ser nu sådan her ud:
UPDATE tabel SET felt1=value1, felt2=value2 WHERE et eller andet.
Ingen point til mig.
Avatar billede fennec Nybegynder
17. september 2007 - 15:31 #11
Enig med michael_stim. Intet af det du har vis er i nærheden af en update syntax :o)
Men koden du viser, nævnte jeg i første post, så jeg tillader mig at smide et svar.

.o) <-- One Eyed Jack
Avatar billede fennec Nybegynder
17. september 2007 - 15:33 #12
Avatar billede natsprinter Nybegynder
17. september 2007 - 16:33 #13
Jo det der er til update.

FORKERT:
sql = "insert into blog_sub (blogID, tekst, godkendt, dato) values ("
sql = sql & "blogID = "&request.Form("id")&", "
sql = sql & "tekst = '"& request.Form("tekst")&"', "
sql = sql & "godkendt = 'JEPS', "
sql = sql & "dato = '"&dagsDato&"')"

RIGTIG:
sql = "update blog_sub set "
sql = sql & "blogID = "&request.Form("id")&", "
sql = sql & "tekst = '"& request.Form("tekst")&"', "
sql = sql & "godkendt = 'JEPS', "
sql = sql & "dato = '"&dagsDato&"')"

Det er galt i forhold til INSERT er jo at man sætter feltnavnet = nyVærdi ved UPDATE, det gør man ikke ved INSERT.

Tak for jeres input.
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
Computerworld tilbyder specialiserede kurser i database-management

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