[access] currentdb.execute

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

  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
Ik wil in VBA de volgende code uitvoeren:
-----------------
StringSQL = "SELECT [export adrbest basis PROJ_BES betaald].[Relatie id], Clng([export adrbest basis PROJ_BES betaald].[bestelregel id]) as bestelregelID INTO [exporttabel adressen] FROM [export adrbest basis PROJ_BES betaald] WHERE [export adrbest basis PROJ_BES betaald].[Project id]=31 ORDER BY [export adrbest basis PROJ_BES betaald].[Relatie id] ASC"

Currentdb.Execute StringSQL
-----------------

m.a.w. rechtstreeks gegevens in een nieuwe tabel invoeren.

Ik krijg echter telkens een fout:
"Er zijn te weinig parameters, het verwachte aantal is 1" :(

Bij het opbouwen van de SQL-string in VBA wordt de parameter als volgt ingevuld:
".... WHERE [export adrbest basis PROJ_BES betaald].[Project id]=" & forms![projecten]![kies project]
(dat is ook de reden dat ik niet gewoon een query bouw en die gebruik: VBA kiest de juiste velden obv keuzes en sorteermogelijkhedne om die SQL op te bouwen, dat terzijde)

Het is mij bekend dat als je niet buiten de string de parameter erbij haalt (zoals ik hier dus wel doe) dat je dan die parameter foutmelding krijgt. Maar dat doe ik dus goed.

Het vreemde is echter dat als ik die string zoals ie hierboven staat in een query ingeef, dat dit zonder problemen werkt (dan dus NIET met een parameter, want "31" zit dan in de string verwerkt!), maar dat Currentdb.Execute deze string niet kan verwerken, want ik krijg die foutmelding. En dat terwijl er in de bovenstaande string dus helemaal geen parameter zit :?

Iemand een clue? Het vreemde is dat dit tot 1 maand geleden altijd gewerkt heeft, en er zijn wel veel updates geweest, maar niet aan dit scherm of aanverwante zaken.

[ Voor 8% gewijzigd door Stefke op 31-10-2003 15:26 ]


Verwijderd

staat het form wel open?

en je kan ook gewoon die variabele in een query def gebruiken hoor, hoeft niet persé in vba

[ Voor 67% gewijzigd door Verwijderd op 31-10-2003 15:31 ]


  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
ja, maar de SQL is telkens anders, gebruikers hebben de mogelijkheid om velden en sorteervolgorde etc aan te geven. Dan moet ik dus een query laten opbouwen, ipv die SQL-string rechtstreeks uitvoeren, en dat kan wel, maar dit heeft gewoon 2 jaar gefunctioneerd.

Hmm..heb net een oude versie van het programma gevonden, daar werkt dit nog steeds. Zoals ik al zeg, er is hier eigenlijk niks aan veranderd, ik heb een vaag vermoeden dat deze foutmelding niet juist is. Dat wellicht ergens een veldje in een tabel gewijzigd is en dat ie nu iets niet kan vinden of zo, en daarbij foutief deze melding geeft.

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Die foutmelding wil meestal zeggen dat er iets mis is met je SQL statement.

Ik vermoed dat het met die INTO te maken heeft. Ik weet niet of INTO ondersteund wordt in Access, maar als je INTO gebruikt, moet je evenveel variabelen in je INTO clause hebben als velden in je select list.
Zo bv:
code:
1
SELECT naam, adres INTO p_naam, p_adres FROM tabel


Echter, ik vermoed dat jij gegevens in een tabel wilt inserten. Dan moet je niet INTO gebruiken, maar moet je een dergelijke constructie gebruiken:
code:
1
2
INSERT INTO tabel
SELECT veld, veld FROM anderetabel

https://fgheysels.github.io/


Verwijderd

als ik het goed begrijp werkt het dus wel als je voor die project id 31 invult..

als dat zo is, zit de fout nogal duidelijk in die forms! verwijzing..
parameter missing, verwachte aantal is 1 wil zeggen dat ie iig 1 parameter mist, dus kennelijk klopt die vewijzing naar dat formveld niet meer.. ik zou het nog eens nakijken

  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
Verwijderd schreef op 31 oktober 2003 @ 15:41:
als ik het goed begrijp werkt het dus wel als je voor die project id 31 invult..

als dat zo is, zit de fout nogal duidelijk in die forms! verwijzing..
parameter missing, verwachte aantal is 1 wil zeggen dat ie iig 1 parameter mist, dus kennelijk klopt die vewijzing naar dat formveld niet meer.. ik zou het nog eens nakijken
Die parameter verwijzing is goed. En het rare is dus dat ie het met 31 ingevuld, precies zoals die SQLstring daar staat het ook NIET doet. Terwijl er dan GEEN parameter is
whoami schreef op 31 oktober 2003 @ 15:39:
Die foutmelding wil meestal zeggen dat er iets mis is met je SQL statement.

Ik vermoed dat het met die INTO te maken heeft. Ik weet niet of INTO ondersteund wordt in Access, maar als je INTO gebruikt, moet je evenveel variabelen in je INTO clause hebben als velden in je select list.
Zo bv:
code:
1
SELECT naam, adres INTO p_naam, p_adres FROM tabel


Echter, ik vermoed dat jij gegevens in een tabel wilt inserten. Dan moet je niet INTO gebruiken, maar moet je een dergelijke constructie gebruiken:
code:
1
2
INSERT INTO tabel
SELECT veld, veld FROM anderetabel
Dit laatste is voor toevoegqueries.

En ik wil gegevens in een nieuwe tabel zetten

Plus, als ik een nieuwe query open in de hoofdvenster, dan naar SQL weergave ga en deze SQL-string daar inzet dat ie perfect werkt, precies zoals ie hier staat, mijn tabelmaak-SQL is dus goed.

..

Heb nog wat getest, ik heb het huidige - blijkbaar niet werkende - scherm de oude versie van het access-programma geimporteerd, en daar werkt het zelfde scherm wel! Het ligt dus helemaal niet aan dat scherm, maar aan iets anders ergens in de database, iets wat ik in de tussentijd waarschijnlijk een keer gewijzigd heb en dat blijkbaar toch invloed had op de werking van dit scherm...maar wat :|

kan niet zo goed nadenken op het moment, griepje :|

[ Voor 5% gewijzigd door Stefke op 31-10-2003 15:58 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:47
Hij geeft die melding ook als je een veldnaam niet goed hebt gespeld. >:)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
Dat zou wel eens kunnen :) maar ..

Heb het toch gevonden!

------------
StringSQL = "SELECT [export adrbest basis PROJ_BES betaald].[Relatie id], Clng([export adrbest basis PROJ_BES betaald].[bestelregel id]) as bestelregelID INTO [exporttabel adressen] FROM [export adrbest basis PROJ_BES betaald] WHERE [export adrbest basis PROJ_BES betaald].[Project id]=31 ORDER BY [export adrbest basis PROJ_BES betaald].[Relatie id] ASC"

Currentdb.Execute StringSQL
------------

De tabel [export adrbest basis PROJ_BES betaald] die ik hier gebruik als basis voor de in de nieuwe tabel te zetten gegevens is geen tabel, maar een query, en die query is o.a. weer gebaseerd op nog een query, en daarin zit ook een parameter die afhankelijk is van een veld op een form (forms![form]![veld])

En het was mij wel bekend dat als je in VBA een SQL wil uitvoeren oid, dat dat niet gaat obv een query die zo'n parameter heeft! |:( Dat zul je op de 1 of andere manier moeten omzeilen, anders gaat dat dus niet. Daar heb ik al vaak mee zitten kloten.

Als ik in die onderliggende query die parameter vast invul (maar dat wil ik dus niet, workaround moet ik nog maken) dan werkt het wel.

Vreemd alleen dat in de oude versie van het programma die onderliggende query die parameter niet heeft. Ik kan me niet herinneren dat ik daar in de afgelopen 2 jaar aan gewerkt heb, maar goed...in principe opgelost :)

[ Voor 5% gewijzigd door Stefke op 31-10-2003 16:18 ]


  • thomrob
  • Registratie: Maart 2001
  • Laatst online: 22-05 12:22

thomrob

allround developer

in dit soort gevallen maak ik altijd een functie die dient als parameter in de query. de functie verwijst dan uiteraard naar [forms]![frmjouform]![jouwveld]

  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
Kan dat? Hmm...eigenlijk nooit aan gedacht. Hoe gaat dat ook weer? :)

edit: date() is ook een functie die daar kan staan, ik meot dus gewoon een functie ProjectID() maken en daar staat alleen maar in forms![form]![veld]

[ Voor 53% gewijzigd door Stefke op 01-11-2003 17:09 ]


  • Stefke
  • Registratie: December 2000
  • Laatst online: 20-08 12:02
Dat werkt inderdaad erg goed! :) Bedankt voor de tip:

code:
1
2
3
Function Current_ProjectID()
     Current_ProjectID = Forms![projecten]![kies project]
End Function


En dan in de onderliggende query "Current_ProjectID()" als parameter

[ Voor 4% gewijzigd door Stefke op 02-11-2003 22:04 ]

Pagina: 1