webForumDet fria alternativet

Det har kört ihop sig igen...

ASP

7 svar · 245 visningar · startad av Bire

Medlem sedan dec. 199919 074 inlägg
Frågan#1

Har lite trubbel med följande kod:

<%Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open Session("rapporter")
SQLStmt = "INSERT INTO Rapport"
SQLStmt = SQLStmt & "(INTERNKONTROLL, FORBATTRINGSFORSLAG, KUNDREKLAMATION, OVRIGT, SKRIVENAV, SKRIVENDEN, BESKRIVNING, FORSLAG, HANDLINGSPLAN, ANSVARIG, PLANERADSLUTTID, VERKLIGSLUTTID, BERAKNADKOSTNAD, VERKLIGKOSTNAD, OPPFOLJNINGSIGNATUR, UTVARDERING, KLARTDATUM, KLARTSIGNATUR)"

SQLStmt = SQLStmt & "VALUES(" & Request.Form("INTERNKONTROLL") & "," & Request.Form("FORBATTRINGSFORSLAG") & "," & Request.Form("KUNDREKLAMATION") & "," & Request.Form("OVRIGT") & "," & Request.Form("SKRIVENAV") & "," & Request.Form("SKRIVENDEN") & "," & Request.Form("BESKRIVNING") & "," & Request.Form("FORSLAG") & "," & 
Request.Form("HANDLINGSPLAN") & "," & Request.Form("ANSVARIG") & "," & Request.Form("PLANERADSLUTTID") & "," & 
Request.Form("VERKLIGSLUTTID") & "," & Request.Form("BERAKNADKOSTNAD") & "," & Request.Form("VERKLIGKOSTNAD") & "," & Request.Form("OPPFOLJNINGSIGNATUR") & "," & Request.Form("UTVARDERING") & "," & Request.Form("KLARTDATUM") & "," & Request.Form("KLARTSIGNATUR") & ")"
response.write SQLStmt
Connection.Execute(SQLStmt)
Connection.Close
%>

Detta ger följande:

(Utskriven SQLStmt)INSERT INTO Rapport(INTERNKONTROLL, FORBATTRINGSFORSLAG, KUNDREKLAMATION, OVRIGT, SKRIVENAV, SKRIVENDEN, BESKRIVNING, FORSLAG, HANDLINGSPLAN, ANSVARIG, PLANERADSLUTTID, VERKLIGSLUTTID, BERAKNADKOSTNAD, VERKLIGKOSTNAD, OPPFOLJNINGSIGNATUR, UTVARDERING, KLARTDATUM, KLARTSIGNATUR)VALUES(INTERNKONTROLL,FORBATTRINGSFORSLAG,,,TK,2001-10-13,,,,TK,2001-,2001-,,,,JA,2001-,TK)

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntax error in INSERT INTO statement.

/BPS/add.asp, line 12

Line 12 är: Connection.Execute(SQLStmt)

Jag fattar inte riktigt vad som är fel i INSERT INTO... Men jag fattar iofs aldrig vad som är fel heller ;)

[Redigerat av Bire den 13 okt 2001]

Medlem sedan dec. 2000399 inlägg
#2

Hej!

Det verkar som om du inte får tag på alla värden du behöver från den tidigare sidan. Kolla därför att du har rätt namn i dina Request.Form...

------------------
mvh André

Medlem sedan feb. 20012 412 inlägg
#3

Hej!

Som sagts ovan blir vissa fält tomma. (ange dem som null om du vill ha de tomma)

Två frågor:

Är alla fält av typen tal?

Är det access så krävs # # runt datumet eller i sql och mysql '" "' .

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

[Redigerat av jorgen den 13 okt 2001]

Medlem sedan dec. 199919 074 inlägg
#4

Vissa fält ska vara tomma, ibland.

Medlem sedan juni 200032 967 inlägg
#5

Då måste du ange null som värde eller utelämna dem i din INSERT.

Mvh,

------------------
All your base are belong to me.

Medlem sedan dec. 199919 074 inlägg
#6

Även om jag har värden överallt så blir det samma felmeddelande.

Medlem sedan dec. 200012 464 inlägg
#7

Om du vill att vissa kolumner skall vara odefinierade så får du göra

sql = "insert into t (a,b,c) values('a',null,'c')"

det går inte att utelämna värdet om kolumnnamnet finns med i kolumnlistan.

Det går också att utelämna kolumner, och då får dessa ett defaultvärde (som är null om man inte själv har definierat något annat.)

sql = "insert into t (a,c) values('a','c')"

I sql så anges alla textvärden inom ' och datumvärden inom # (gäller endast Access dock) och numeriska värden har inga avgränsare.

(slut på lektion)

Så i din kod skulle du få skriva

'för alla textfält 
if "" & Request.Form("INTERNKONTROLL") = "" then
  internkontroll = "null"
else
  internkontroll = "'" & replace(Request.Form("INTERNKONTROLL"),"'","''") & "'"
end if
'för datumfält
if Request.Form("SKRIVENDEN") = "" then
   skrivenden = "null"
else
   skrivenden = "#" & Request.Form("SKRIVENDEN") & "#"
end if
'för numeriska fält 
if Request.Form("BERAKNADKOSTNAD") = "" then
beraknadkostnad = "null"
else
beraknadkostnad = Request.Form("BERAKNADKOSTNAD")
end if
'osv

SQLStmt = "INSERT INTO Rapport"
SQLStmt = SQLStmt & "(INTERNKONTROLL, FORBATTRINGSFORSLAG, KUNDREKLAMATION, OVRIGT, SKRIVENAV, SKRIVENDEN, BESKRIVNING, FORSLAG, HANDLINGSPLAN, ANSVARIG, PLANERADSLUTTID, VERKLIGSLUTTID, BERAKNADKOSTNAD, VERKLIGKOSTNAD, OPPFOLJNINGSIGNATUR, UTVARDERING, KLARTDATUM, KLARTSIGNATUR)"
SQLStmt = SQLStmt & "VALUES(" & INTERNKONTROLL & "," & FORBATTRINGSFORSLAG & ","  
'och så vidare för alla värden
SQLStmt = SQLStmt & ")"

Anledningen till att man gör replace är för att hantera om fältet innehåller en '. I sql så får man dubbla alla apostrofer i strängar för att det skall fungera.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 13 okt 2001]

Medlem sedan dec. 199919 074 inlägg
#8

LarsG: Hmm.. Nu sätter du mig i den till synes mycket otrevliga situationen att jag måste tänka om helt :OO Haha..

Jag kollar lite på detta & återkommer nån dag närmare jul! ;)

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)