Avatar billede foxwell Nybegynder
27. juli 2002 - 13:36 Der er 31 kommentarer og
1 løsning

problemer med SQL INSERT

Hej Eksperter,

jeg har nogle problemer med den følgende SQL insert. Der indsættes fra ColdFusion til Access, men jeg får hele tiden at vide at der er følgende fejl:

Error Executing Database Query. 
[MERANT][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. 

her er min SQL sætning...

<CFQUERY DATASOURCE="fymas">
INSERT INTO maskiner(saelgerID,oprettetDato,firma,arbejdsplads,kundeNr,postNr,by,telefon,masKode,fabrikat,type,serieNr,timetaeller,aar,kundeMaskinNr,motorFab,motorTyp,chassisSN,chassisTimer,indregNr,kranKapTons,cpss,foererhus,aircon,dozerblad,monobom,tredeltbom,gravearm,hammerhydr,grabhydr,slangebrudsvbom,slangebrudsvarm,ripper,daekdim,daekforh,daekforv,daekbagh,daekbagv,daekmidh,daekmidv,baandbredde,baand,undervogn,skovl1,skovl2,skovl3,skovl4,skovl41,rabatskovl,rskovlkipbar,hurtigskift,kroghoejde,arbejdshoejde,platform,kurvarm,bomlaengdeM,bomlaengdeKg,krogetons,swingaway,flyjib,antalspil,lmi,bogies,stoetteben,kranmotorfab,kranmotortyp,akslera,akslerb,akslerc,akslerafstand,skovltaender,pbbomskovl,motorstand,transmission,kroejekrans,converter,bremser,styretoejpivot,turbo,elsystem,dozerbladstand,batteri,olieikoeler,vandiolie,frostvaeske,vaskes,farve,maling,revner,svejsninger,maskinjournal,ceeuo,tolvmdrrap,datosidstsynet,epa,vaegt,www,oevrigtudstyr,bemaerkint,bemaerkextda,bemaerkexten)
VALUES(#session.adminID#,#now()#,'#firma#','#arbejdsplads#',#kundeNr#,'#postNr#','#by#','#telefon#','#masKode#','#fabrikat#','#type#','#serieNr#',#timetaeller#,#aar#,'#kundeMaskinNr#','#motorFab#','#motorTyp#','#chassisSN#',#chassisTimer#,'#indregNr#',#kranKapTons#,'#cpss#','#foererhus#','#aircon#','#dozerblad#','#monobom#','#tredeltbom#',#gravearm#,'#hammerhydr#','#grabhydr#','#slangebrudsvbom#','#slangebrudsvarm#','#ripper#','#daekdim#',#daekforh#,#daekforv#,#daekbagh#,#daekbagv#,#daekmidh#,#daekmidv#,#baandbredde#,'#baand#',#undervogn#,#skovl1#,#skovl2#,#skovl3#,#skovl4#,'#skovl41#',#rabatskovl#,#rskovlkipbar#,'#hurtigskift#',#kroghoejde#,#arbejdshoejde#,#platform#,#kurvarm#,#bomlaengdeM#,#bomlaengdeKg#,#krogetons#,#swingaway#,#flyjib#,#antalspil#,'#lmi#','#bogies#','#stoetteben#','#kranmotorfab#','#kranmotortyp#',#akslera#,#akslerb#,#akslerc#,#akslerafstand#,'#skovltaender#','#pbbomskovl#','#motorstand#','#transmission#','#kroejekrans#','#converter#','#bremser#','#styretoejpivot#','#turbo#','#elsystem#','#dozerbladstand#','#batteri#','#olieikoeler#','#vandiolie#','#frostvaeske#','#vaskes#','#farve#','#maling#','#revner#','#svejsninger#','#maskinjournal#',#ceeuo#,#tolvmdrrap#,#datosidstsynet#,'#epa#','#vaegt#','#www#','#oevrigtudstyr#','#bemaerkint#','#bemaerkextda#','#bemaerkexten#')

</CFQUERY>
Avatar billede foxwell Nybegynder
27. juli 2002 - 13:37 #1
er der nogen som kan se fejlen? =) jeg ved godt den er lang, men har ikke rigtigt andre muligheder...

/foxwell
Avatar billede terry Ekspert
27. juli 2002 - 13:57 #2
foxwell is this a joke?
I have an idea that there are MANY errors! What are all th # for?

I suggest that you have a variable name for example sSQL and put the sql into this variable. Then just before you execute teh SQL copy and paste it into Access and see what you get out of it!
Avatar billede md_craig Nybegynder
27. juli 2002 - 13:58 #3
prøv at udskrive din SQL inden du exekvere den... det kan være den er lidt næmere at finde en fejl i end den der... LOL.... (Shit der er meget....)
Avatar billede foxwell Nybegynder
27. juli 2002 - 14:04 #4
terry > the # denote ColdFusion variables, so they aren't errors...

md > har prøvet at kigge det hele igennem, kan ikke se nogen problemer... alle ikke-numeriske værdier er 'omringede således', numeriske værdier er ikke, og numeriske. alfanumeriske og boolean felter er alle defineret rigtigt i databasen...
Avatar billede foxwell Nybegynder
27. juli 2002 - 14:08 #5
terry > and no, it's not a joke...
Avatar billede terry Ekspert
27. juli 2002 - 14:28 #6
OK I know nothing about ColdFusion but I will give an example as it would be done in VB and you can maybe get an idea as to what the problem could be.

"INSERT INTO maskiner (saelgerID,oprettetDato,firma) VALUES(" & #session.adminID# & "," & #now()# & ",'" & #firma# "')"

I have just taken the first three fields.
You can see that the SQL is INSIDE a string which starts with "
and there is another " just after VALUES(
This is because it is necessary to convert your ColdFusion variables to ACTUAL values and this is done be putting the variables OUTSIDE the string and concatenating them to the string. This is what the & is doing.
I dont know if it is the same in ColdFusion but it does look strange to me!
Avatar billede md_craig Nybegynder
27. juli 2002 - 14:28 #7
har du kigget efter fo stave/trykfej i denne del...

(saelgerID,oprettetDato,firma,arbejdsplads,kundeNr,postNr,by,telefon,masKode,fabrikat,type,serieNr,timetaeller,aar,kundeMaskinNr,motorFab,motorTyp,chassisSN,chassisTimer,indregNr,kranKapTons,cpss,foererhus,aircon,dozerblad,monobom,tredeltbom,gravearm,hammerhydr,grabhydr,slangebrudsvbom,slangebrudsvarm,ripper,daekdim,daekforh,daekforv,daekbagh,daekbagv,daekmidh,daekmidv,baandbredde,baand,undervogn,skovl1,skovl2,skovl3,skovl4,skovl41,rabatskovl,rskovlkipbar,hurtigskift,kroghoejde,arbejdshoejde,platform,kurvarm,bomlaengdeM,bomlaengdeKg,krogetons,swingaway,flyjib,antalspil,lmi,bogies,stoetteben,kranmotorfab,kranmotortyp,akslera,akslerb,akslerc,akslerafstand,skovltaender,pbbomskovl,motorstand,transmission,kroejekrans,converter,bremser,styretoejpivot,turbo,elsystem,dozerbladstand,batteri,olieikoeler,vandiolie,frostvaeske,vaskes,farve,maling,revner,svejsninger,maskinjournal,ceeuo,tolvmdrrap,datosidstsynet,epa,vaegt,www,oevrigtudstyr,bemaerkint,bemaerkextda,bemaerkexten)

den skulle ellers komme med en anden fejlmedelelse hvis det er tilfældet men det kunne jo være...
Avatar billede md_craig Nybegynder
27. juli 2002 - 14:35 #8
du kan gøre det at du tager og sætter tingene ind en efter en...

du starter med

INSERT INTO maskiner(saelgerID)
VALUES(#session.adminID#)

hvis det virker så går du videre med

INSERT INTO maskiner(saelgerID,oprettetDato)
VALUES(#session.adminID#,#now()#)

men du siger at ## indkrænser en variabel... now() er jo ikke en variabel...
Avatar billede md_craig Nybegynder
27. juli 2002 - 14:37 #9
men du siger at ## indkrænser en variabel... now() er jo ikke en variabel... // Glem den
Avatar billede foxwell Nybegynder
27. juli 2002 - 14:38 #10
terry > the beauty of CF (among other things) is that you don't need to do that...

md_craig > tror ikke at det er problemet, da der ville have været en anden fejlmeddelelse (som du selv siger).

jeg har forkortet hele sætningen for at teste den lidt -

INSERT INTO maskiner (saelgerID,oprettetDato,firma,arbejdsplads,kundeNr)
VALUES (#session.adminID#,#now()#,'#firma#','#arbejdsplads#',#kundeNr#)

når jeg udfylder alle felter får jeg ingen fejl, men når jeg undlader kundenr får jeg fejlen. den sendte SQL ser således ud:

INSERT INTO maskiner (saelgerID,oprettetDato,firma,arbejdsplads,kundeNr) VALUES(1,{ts '2002-07-27 14:36:58'},'test','test',)

kan det tænkes at mit problem er at jeg submitter tomme numeriske felter?
INSERT INTO maskiner (saelgerID,oprettetDato,firma,arbejdsplads,kundeNr) VALUES(1,{ts '2002-07-27 14:29:49'},'','',)
Avatar billede foxwell Nybegynder
27. juli 2002 - 14:38 #11
(den nederste INSERT INTO skal ignoreres...)
Avatar billede foxwell Nybegynder
27. juli 2002 - 14:41 #12
md_craig > gik selv igang med at teste på samme måde =) var sådan jeg kom frem til spørgsmålet umiddelbart herover...

nærmere forklaring af ## - indkrænser ikke variabler, men viser hvilke ting, incl. variabler, som skal parses af CF serveren... derfor skal now() også have ##, da det er en CF funktion...
Avatar billede terry Ekspert
27. juli 2002 - 14:51 #13
foxwell is it POSSIBLE to get the whole SQL into a string and copy this into your Access database?
SomeString is a variable how you make those in CF I wouldnt know

SomeString =  INSERT INTO ......

and then as I have suggested before, copy SomeString to Access AFTER it has been Parsed by the CF Server.

If CF is so good, then isnt it possible to DEBUG your variables to see what they contain?
Also, if you database fields allow NULL values then it doesnt matter if they are empty.
Avatar billede md_craig Nybegynder
27. juli 2002 - 15:01 #14
det kunne det mugligvis godt... for når du arbejder med numre sa SKAL det være et nummer, og " " accepteres ikke som et nummer...

det er også derfor at når du har et nummerfelt i din DB. så er der automatisk et 0
Avatar billede md_craig Nybegynder
27. juli 2002 - 15:02 #15
så du må hen og tjecke alle dine numeriske variabler og hvis de er tomme så erstat dem med 0...

prøv det...
Avatar billede foxwell Nybegynder
27. juli 2002 - 15:04 #16
terry > I did what you asked, crammed the entire SQL statement into ACCESS, and got this error message:

Der er en syntaksfejl i INSERT INTO-sætningen. (Fejl 3134)
Du har skrevet en SQL-sætning, der indeholder en ugyldig INSERT INTO-sætning.

Mulige årsager:

Navnet på et reserveret ord eller argument er stavet forkert eller mangler. Tegnsætningen er ikke korrekt.

I don't see any reserved words, so I guess it must be the other thing...

this is what I gave ACCESS:

INSERT INTO maskiner (saelgerID,oprettetDato,firma,arbejdsplads,kundeNr,postNr,by,telefon,masKode,fabrikat,type,serieNr,timetaeller,aar,kundeMaskinNr,motorFab,motorTyp,km,chassisSN,chassisTimer,indregNr,kranKapTons,cpss,foererhus,aircon,dozerblad,monobom,tredeltbom,gravearm,hammerhydr,grabhydr,slangebrudsvbom,slangebrudsvarm,ripper,daekdim,daekforh,daekforv,daekbagh,daekbagv,daekmidh,daekmidv,baandbredde,baand,undervogn,skovl1,skovl2,skovl3,skovl4,skovl41,rabatskovl,rskovlkipbar,hurtigskift,kroghoejde,arbejdshoejde,platform,kurvarm,bomlaengdeM,bomlaengdeKg,krogetons,swingaway,flyjib,antalspil,lmi,bogies,stoetteben,kranmotorfab,kranmotortyp,akslera,akslerb,akslerc,akslerafstand,skovltaender,pbbomskovl,motorstand,transmission,kroejekrans,converter,bremser,styretoejpivot,turbo,elsystem,dozerbladstand,batteri,olieikoeler,vandiolie,frostvaeske,vaskes,farve,maling,revner,svejsninger,maskinjournal,ceeuo,tolvmdrrap,datosidstsynet,epa,vaegt,www,oevrigtudstyr,bemaerkint,bemaerkextda,bemaerkexten) VALUES(1,{ts '2002-07-27 14:57:53'},'1','1',1,'1','1','1','1','1','1','1',1,1,'1','1','1',1,'1',1,'1',1,'1','on','on','on','on','0',1,'on','on','on','on','on','1',1,1,1,1,1,1,,'ingen',1,1,1,1,1,'on',1,1,'ingen',1,1,1,1,1,1,1,1,1,1,'1','1','ingen','1','1',1,1,1,1,'0','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1',300480,300480,300480,'1','1','1','1','1','1','1');
Avatar billede foxwell Nybegynder
27. juli 2002 - 15:34 #17
vi prøver igen...

jeg har udfyldt ALLE felter i formularen... alfanumeriske felter har fået et A, numeriske et 1, checkboxes er alle checked (on) og datofelter har fået 300480. her ses den parsede SQL:

INSERT INTO maskiner (saelgerID,oprettetDato,firma,arbejdsplads,kundeNr,postNr,by,telefon,masKode,fabrikat,type,serieNr,timetaeller,aar,kundeMaskinNr,motorFab,motorTyp,km,chassisSN,chassisTimer,indregNr,kranKapTons,cpss,foererhus,aircon,dozerblad,monobom,tredeltbom,gravearm,hammerhydr,grabhydr,slangebrudsvbom,slangebrudsvarm,ripper,daekdim,daekforh,daekforv,daekbagh,daekbagv,daekmidh,daekmidv,baandbredde,baand,undervogn,skovl1,skovl2,skovl3,skovl4,skovl41,rabatskovl,rskovlkipbar,hurtigskift,kroghoejde,arbejdshoejde,platform,kurvarm,bomlaengdeM,bomlaengdeKg,krogetons,swingaway,flyjib,antalspil,lmi,bogies,stoetteben,kranmotorfab,kranmotortyp,akslera,akslerb,akslerc,akslerafstand,skovltaender,pbbomskovl,motorstand,transmission,kroejekrans,converter,bremser,styretoejpivot,turbo,elsystem,dozerbladstand,batteri,olieikoeler,vandiolie,frostvaeske,vaskes,farve,maling,revner,svejsninger,maskinjournal,ceeuo,tolvmdrrap,datosidstsynet,epa,vaegt,www,oevrigtudstyr,bemaerkint,bemaerkextda,bemaerkexten)

VALUES(1,{ts '2002-07-27 15:31:01'},'a','a',1,1,'a','a','a','a','a','a',1,1,'a','a','a',1,'a',1,'a',1,'a',on,on,on,on,on,1,on,on,on,on,on,'a',1,1,1,1,1,1,1,'ingen',1,1,1,1,1,on,1,1,'ingen',1,1,1,1,1,1,1,1,1,1,'a','a','ingen','a','a',1,1,1,1,on,'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',300480,300480,300480,'a','a','a','a','a','a','a') 


har kigget det hele igennem, og det ser ikke ud som om der er nogen fejl... hvis jeg havde forkerte datatypes ville jeg få DATATYPE MISMATCH i stedet for SYNTAX ERROR... kan I se noget som er forkert...?
Avatar billede foxwell Nybegynder
27. juli 2002 - 15:35 #18
('INGEN' kommer fra et SELECT tag, og ender i et TEKST felt i DB'en...)
Avatar billede md_craig Nybegynder
27. juli 2002 - 15:46 #19
kan du sende databasen til mig så vil jeg se om jeg kan få det til at virke... i ASP eller ColdFusion eller noget andet....
Avatar billede md_craig Nybegynder
27. juli 2002 - 15:47 #20
admin@it-links.dk

(Løsningen/fejlen postes selvfølgelig også her for ren ordens skyld)
Avatar billede foxwell Nybegynder
27. juli 2002 - 15:59 #21
tak =) har sendt den (zippet)... skal du også bruge kildekoden til siden?
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:04 #22
nej... det jeg vil det er at prøve at få konstrueret en SQL sætning database tager imod..
Avatar billede foxwell Nybegynder
27. juli 2002 - 16:25 #23
fair nok =) håber det lykkes...
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:35 #24
det første jeg er stødt på er {ts '2002-07-27 15:31:01'}

den vil den ikke acceptere... den vill så god tage en Date() men ikke en now()
Avatar billede foxwell Nybegynder
27. juli 2002 - 16:38 #25
hmm... jeg bruger *altid* #now()# når jeg skal sætte dags dato ind med SQL - har aldrig haft problemer før, og da jeg testede sætningen med kun de to første værdier (saelgerID,oprettetDato) ville den gerne tage den. jeg tror ikke det er problemet. Jeg har rettet de 3 datoer i slutningen (dem hvor der stod 300480) så de får det rigtige datoformat, og det gav ingen problemer i en lille testside jeg lavede, så det er vist heller ikke det som er problemet..
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:43 #26
det næste jeg er stødt på er by... husk []
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:44 #27
og selve det at by er et reseveret ord i access kan god være den du leder efter skriv [by] istedet for by
Avatar billede foxwell Nybegynder
27. juli 2002 - 16:47 #28
har selv lige fundet den =) refreshede for at se om du havde skrevet noget mere, og så havde du den også =) det er fejlen - nu virker det... det kunne være at man skulle sætte en seddel med reserverede ord op på væggen... skriv et svar, så får du points =)

tænk at jeg har spildt 5 timer idag pga. 2 bogstaver... *snøft*

tusind tak for hjælpen =)
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:54 #29
OK... jeg har skam også selv lavet den fejl før den er træls at side med...
Avatar billede md_craig Nybegynder
27. juli 2002 - 16:58 #30
Men den er sQ vikelig træls når man sidder med en så lang SQL streng som du gør... så er der næsten kun en måde at finde det på, og det er som jeg tidligere sagde, tæste indskrivningen 1 efter 1...

det var desuden også sådan jeg fandt fejlen... det er en træls måde at gøre det på men det er faktisk den bedste desvære :((((
Avatar billede foxwell Nybegynder
27. juli 2002 - 17:03 #31
også sådan jeg fandt den...
har stadig nogle problemer med den, men den virker når jeg udfylder *alt*, så jeg må bare prøve mig frem =)

tak for hjælpen!
Avatar billede md_craig Nybegynder
27. juli 2002 - 17:18 #32
Held og lykke med det....

MVH [Craig | www.it-links.dk]
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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