[CFM/Access] INSERT INTO met SELECT onmogelijk?

Pagina: 1
Acties:
  • 159 views sinds 30-01-2008
  • Reageer

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Yo!

Zit nu al een aardige tijd met een query om te klooien, maar het lukt me nog niet om het werkend te krijgen. Ik heb een zwaar vermoeden dat dit aan ColdFusion of Access ligt (waarschijnlijk de laatste).
De query is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
<cfquery datasource="testrp" name="testsma">
INSERT INTO Selectmatches(Inschrijfid, Bedrid)
  VALUES
  SELECT CV_Vaardigheden.InschrijfID, #bedrijf# 
    FROM CV_Vaardigheden
    WHERE ((CV_Vaardigheden.Informatie LIKE '%#keyword#%') OR (CV_Vaardigheden.Vaardigheid LIKE '%#keyword#%'))
  UNION
    SELECT CV_Cursussen.InschrijfID, #bedrijf# 
    FROM CV_Cursussen
    WHERE CV_Cursussen.Cursus LIKE '%#keyword#%'
</cfquery>

Ziet er op zich niet onlogisch uit, toch?

Levert echter als foutmelding op:
ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.
Ik dacht eerst dat het lag aan de UNION, maar het select-statement an sich werkt gewoon prima. Nu rijst bij mij het vermoeden dat INSERT INTO gewoon niet werk in combinatie met SELECT onder deze omstandigheden.

Kan iemand mij uit de brand helpen, en dit bevestigen of een andere oplossing voordragen?

bvd

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • bonzz.netninja
  • Registratie: Oktober 2001
  • Laatst online: 19:52

bonzz.netninja

Niente baffi

nee, dat werkt niet, ik denk dat je het kunt proberen met JOIN tabelnaam ON (huepperdepup = huppedeup) ipv select dan dus

vuistdiep in het post-pc tijdperk van Steve  | Joepie joepie. Dat ging echt toppie! | https://www.wegmetbigtech.nl


Verwijderd

Niet echt gekeken naar je INSERT maar bedoel je niet een SELECT INTO ? Deze maakt namelijk een selectie op je dataset en insert deze in een dataset.

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Op donderdag 24 januari 2002 15:38 schreef hvdberg het volgende:
Niet echt gekeken naar je INSERT maar bedoel je niet een SELECT INTO ? Deze maakt namelijk een selectie op je dataset en insert deze in een dataset.
SELECT INTO lijkt me een database-afhankelijk SQL-accent.
De officiele syntax is namelijk:
code:
1
2
3
INSERT INTO "table_name" ("column1", "column2", ...)
SELECT "column1", "column2", ...
FROM "table1"

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


Verwijderd

Op donderdag 24 januari 2002 15:41 schreef Tsjipmanz het volgende:

[..]

SELECT INTO lijkt me een database-afhankelijk SQL-accent.
De officiele syntax is namelijk:
code:
1
2
3
INSERT INTO "table_name" ("column1", "column2", ...)
SELECT "column1", "column2", ...
FROM "table1"
Een insert into accepteer mijns inziens slechts 1 record. Daarom zou het mijns inziens niet eens mogen. En ik heb die SELECT INTO een keer bij MSSQL Server 7 gezien.

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Op donderdag 24 januari 2002 15:53 schreef hvdberg het volgende:

[..]

Een insert into accepteer mijns inziens slechts 1 record. Daarom zou het mijns inziens niet eens mogen. En ik heb die SELECT INTO een keer bij MSSQL Server 7 gezien.
Volgens een SQL-tutorial ( http://www.1keydata.com/sql/sql13.html ) :
The second type of INSERT INTO allows us to insert multiple rows into a table. Unlike the previous example, where we insert a single row by specifying its values for all columns, we now use a SELECT statement to specify the data that we want to insert into the table. If you are thinking whether this means that you are using information from another table, you are correct. The syntax is as follow
De ontwikkelaars van SQL's inziens kan het dus wel. SELECT INTO is PostgreSQL, en dus geen standaard SQL.

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • jochemd
  • Registratie: November 2000
  • Laatst online: 31-08 19:19
SELECT INTO is bedoeld om van een query rechtstreeks een tabel te maken. Een eventuele bestaande tabel wordt overschreven. Heel erg makkelijk om (de structuur van) een tabel te dupliceren.
code:
1
SELECT INTO newtable * FROM oldtable WHERE 1=2

Omdat er geen records aan de voorwaarde 1=2 voldoen wordt alleen de structuur van de tabel gekopieerd, en geen data. Maak er 1=1 van en je hebt een complete kopie. DIt is standaard SQL en werkt ook in Access

INSERT INTO is bedoeld om een recordset van een query toe te voegen aan een bestaande tabel. Ook dit is standaard SQL en werkt in Access. Het probleem ligt bij jou waarschijnlijk aan wat spaties en haakjes. Probeer het volgende eens:
code:
1
2
3
4
5
6
7
8
9
10
11
<cfquery datasource="testrp" name="testsma">
INSERT INTO Selectmatches (Inschrijfid, Bedrid)
  VALUES
  (SELECT CV_Vaardigheden.InschrijfID, #bedrijf# 
    FROM CV_Vaardigheden
    WHERE ((CV_Vaardigheden.Informatie LIKE '%#keyword#%') OR (CV_Vaardigheden.Vaardigheid LIKE '%#keyword#%'))
  UNION
    SELECT CV_Cursussen.InschrijfID, #bedrijf# 
    FROM CV_Cursussen
    WHERE CV_Cursussen.Cursus LIKE '%#keyword#%')
</cfquery>

  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

Hmmm wil NIET veel zeggen, maar je maakt gebruik van een SELECT in je INSERT, niet VALUES........ DUS

gaan we de syntax nogmaals analyseren (helaas al vaak gebeurt op deze tread)

INSERT INTO {table} (#veldje1, #veldje2)
VALUES (#waarde1, #waarde2)

Dit hierboven is een standaard syntax van praktisch alle SQL-based databases.

INSERT INTO {table} (#veldje1, #veldje2)
>:)
SELECT #anderVeldjeVoor1, #anderVeldjeVoor2
FROM {andere tabel}
WHERE {blabla = blablabla}

Hiermee word een selectie geinsert.
Als ik het goed vertel heb je VALUES in de multi-select gedaan. DAT mag NIET, bij de meeste databases.

Veel succes :7

I've visited the Mothership @ Cupertino


Verwijderd

VisionMaster heeft helemaal gelijk!
Je kunt VALUES en SELECT niet tegelijk gebruiken, de enige juiste syntax is de bovenstaande.

(waarom reageer ik dan :? )

  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Op vrijdag 25 januari 2002 03:09 schreef VisionMaster het volgende:

Hiermee word een selectie geinsert.
Als ik het goed vertel heb je VALUES in de multi-select gedaan. DAT mag NIET, bij de meeste databases.
Hmm nu je het zegt! Volgens mij heb je helemaal gelijk, ik zal t gelijk proberen wanneer ik er weer mee bezig ben.
Thnx!!

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Stomme |:( |:( |:( - access!!

Heb dus even de VALUES weggehaald, en hij klaagt nog steeds over een syntax-error!!

Nogmaals de query:
code:
1
2
3
4
5
6
7
8
 INSERT INTO Selectmatches(Inschrijfid, Bedrid)  
  SELECT CV_Vaardigheden.InschrijfID, #bedrijf# 
    FROM CV_Vaardigheden
    WHERE ((CV_Vaardigheden.Informatie LIKE '%#keyword#%') OR (CV_Vaardigheden.Vaardigheid LIKE '%#keyword#%'))
  UNION
    SELECT CV_Cursussen.InschrijfID, #bedrijf# 
    FROM CV_Cursussen
    WHERE CV_Cursussen.Cursus LIKE '%#keyword#%'

De feiten:
1) Haakjes helpen niet, zowel niet om het UNION-statement als om de aparte selectstatements als beide heen
2) Als ik de query tot de UNION uitvoer doet hij het perfect
3) De "SELECT bla UNION SELECT bla" doet het OOK perfect (dus zonder de insert into)

Ik begin steeds meer de indruk te krijgen dat Access queries die iets moeilijker zijn dan SELECT * gewoon niet aankan.

Kan niemand me dan uit de brand helpen? ;(

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Hmm.. Ik had je vanmiddag al ff gesproken,

Deze werkte wel:
code:
1
2
3
4
5
6
7
  SELECT CV_Vaardigheden.InschrijfID, #bedrijf# 
    FROM CV_Vaardigheden
    WHERE ((CV_Vaardigheden.Informatie LIKE '%#keyword#%') OR (CV_Vaardigheden.Vaardigheid LIKE '%#keyword#%'))
  UNION
    SELECT CV_Cursussen.InschrijfID, #bedrijf# 
    FROM CV_Cursussen
    WHERE CV_Cursussen.Cursus LIKE '%#keyword#%'

Deze werkte ook:
code:
1
2
3
4
INSERT INTO Selectmatches(Inschrijfid, Bedrid)  
  SELECT CV_Vaardigheden.InschrijfID, #bedrijf# 
    FROM CV_Vaardigheden
    WHERE ((CV_Vaardigheden.Informatie LIKE '%#keyword#%') OR (CV_Vaardigheden.Vaardigheid LIKE '%#keyword#%'))

maar deze heb ik nog niet geprobeert:
code:
1
2
3
4
INSERT INTO Selectmatches(Inschrijfid, Bedrid)  
    SELECT CV_Cursussen.InschrijfID, #bedrijf# 
    FROM CV_Cursussen
    WHERE CV_Cursussen.Cursus LIKE '%#keyword#%'

[flame mode]
Mischien moet je je baas maar eens overtuigen om toch maar eens een echte DB aan te schaffen.. :)
[/flame mode]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 27-06 10:54
Zet eens haakjes om je select statement heen..


Basisschool stuff :P

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op dinsdag 29 januari 2002 20:27 schreef OxiMoron het volgende:
Zet eens haakjes om je select statement heen..


Basisschool stuff :P
(* Janoz heeft tsjips probleem van dichtbij gevolgd, en reageerd daarom maar ff voor hem aangezien hij alleen overdag online is)

Dat heeft ie allemaal al geprobeert. Haakjes om beide selects, haakjes om de gehele union, een combinatie van beide. Niks schijnt te werken.. Ikzelf begin een steeds groter vermoeden te krijgen dat hier echt op het randje van de mogelijkheden van Access wordt gewerkt (raar, maar waar)..

Waneer de query wordt uitgevoerd, geeft ie een syntax error bij de where van de eerste select in de union, terwijl het uitvoeren van de query zonder de insert into geen enkele foutmelding opleverd.. Erg vreemd..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Topicstarter
Op dinsdag 29 januari 2002 20:27 schreef OxiMoron het volgende:

Zet eens haakjes om je select statement heen..





Basisschool stuff :P
Lees punt 1) 2 posts boven de jouwe. Lezen krijg je volgens mij nog eerder op de basisschool dan select-statements.

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -

Pagina: 1