In VBA SQL Statement gecombineerd veld, hoe luidt de syntax

Status
Niet open voor verdere reacties.

VBAJAAP

Gebruiker
Lid geworden
14 aug 2013
Berichten
46
Beste allemaal,

Ik heb een lijst in een formulier waarbij de rijbron is gebaseerd op een query :

strSQL = "SELECT [Artikelnummer],[merk]![omschrijving] & " " & [artikelen]![Omschrijving] as Artikelomschrijving,[Verkoopprijs] from artikelen " & _
"WHERE (((Artikelen.Categorie)=[Formulieren]![frmartikel]![cmbcategorie]))" & _
"ORDER BY [artikelnummer]"

Ik loop hierbij vast op het eerste gedeelte : [Artikelnummer],[merk]![omschrijving] & " " & [artikelen]![Omschrijving] as Artikelomschrijving

Ik heb in de ontwerpgave bovenstaande expressie gemaakt en vervolgens gekeken in SQL weergave hoe het statement er dan uit ziet.
Dit heb ik in VBA in de code gezet en (ik ben me er bewust van) VBA struikelt over de aanhalingstekens.
Ik heb al even zitten speuren, maar ik kom er niet uit.

Concreet:

Ik wil dus van twee velden uit een tabel (dmv een query) met een spatie er tussen één veld maken dat getoond wordt in een kolom van de keuzelijst.

Kan iemand mij vertellen hoe de syntaxis zou moeten zijn ????

Heel vriendelijk bedankt alvast.
 
Toch is het simpel. Dubbele quotes zijn een beschermd teken, dus die kan je niet zomaar 'als zichzelf' gebruiken. Access moet weten dat je niet het einde van een string bedoelt (of het begin) maar de quoot zelf. Daarom moet je hem herhalen. Opgeschoond (je code kan een stuk korter) ziet het er dan zo uit:
PHP:
strSQL = "SELECT [Artikelnummer] & "" "" & [Omschrijving] as Artikelomschrijving, [Verkoopprijs] from artikelen " _
     "WHERE Categorie=[Formulieren]![frmartikel]![cmbcategorie] ORDER BY [artikelnummer]"
 
Ik kom er helaas toch niet uit. Ik heb in de expressie de dubbele aanhalingstekens toegepast, maar hij laat nog steeds alleen de omschrijving van het artikel en niet het merk zien. Ik denk dat het het er ook iets mee te maken heeft, dat de merk omschrijving uit een andere tabel (nl. Merk) komt, dan de omschrijving van het artikel. (Ik haal in de expressie dus gegevens uit twee tabellen).
Ik heb uiteindelijk via het eigenschapvenster van de keuzelijst wel het gewenste effect weten te bereiken,
maar ik zou, ook voor mijn eigen 'training', handig vinden om eea via VBA voor elkaar te krijgen.

Wellicht weet iemand een goede site waar duidelijk wordt uitgelegd hoe SQL icm VBA de leestekens behandelt...
 
Beetje raar dat je artikelnummer en artikelomschrijving niet te vinden zijn in één en dezelfde tabel. Octafish zal wel komen zwaaien met de normalisering :). Om je probleem op te lossen zou je kunnen eerst een query maken van je twee tabellen en die dan gebruiken als bron voor je sql statement ipv van die ene artikel tabel
 
Ik zag in je oorspronkelijke code ook wel een verwijzing naar de tabel [merk] maar ging er (blijkbaar abusievelijk) vanuit dat dat een typefout was omdat je in de FROM de tabel niet hebt gezet. De query kan dan nooit goed werken, ook al maak je hem in het queryvenster. Ster nog: als je in het queryvenster beide tabellen neerzet (al dan niet gekoppeld) dan vind je die tabellen echt wel terug met de juiste syntax als je de SQL verwijzing kopieert en in VBA plakt. Dat is bij jou dus niet het geval, vandaar dat ik die tabelverwijzing er uit heb gehaald.

Wat jij vraagt
Wellicht weet iemand een goede site waar duidelijk wordt uitgelegd hoe SQL icm VBA de leestekens behandelt...
Bestaat niet, of men verwijst naar de Access cursus van HelpMij, waar ik e.e.a. naar mijn idee toch prima heb uitgelegd. Bovendien heb ik alles wat je dient te weten hierover ook al verteld in bericht #2. Meer is er namelijk ook niet over te vertellen!
Wat JohanRVT en ik aanraden, en ook regelmatig doen, is de complete query uit het SQL venster kopiëren en in het VBA venster plakken. Dan krijg je allerlei ‘ fouten’ te zien en is de query vermoedelijk rood (vanwege die fouten) maar die zijn dan makkelijk aan te passen.
1. Zoals ik al zei: dubbele quootjes zijn in VBA een beschermd teken, dus daarom moet je dit: SELECT [Artikelnummer] & " " & [Omschrijving] vervangen door dit: : SELECT [Artikelnummer] & "" "" & [Omschrijving]
2. Iets vergelijkbaars heb je met een filter. Dus dit: WHERE Categorie = "Kleding" gaat fout; dat moet worden: WHERE Categorie = ""Kleding"".
3. Gebruik je een variabele uit een formulierveld, dan wordt de SQL een klein beetje ingewikkelder, want dan moet je de string gaan combineren met formuliervelden. Dat kan meestal alleen als je de string opknipt. Jouw voorbeeld zet overigens de formulierverwijzing in de SQL zelf, en dan hoeft dat niet. Ik hou daar niet van; ik bouw de SQL liever op met de formuliervelden. Dat gaat dan zo:
PHP:
strSQL = "SELECT [Artikelnummer] & "" "" & [Omschrijving] 
as Artikelomschrijving, [Verkoopprijs] from Artikelen " _
     "WHERE Categorie =  """ & Me.cmbcategorie 
&  """ AND Year(Verkoopdatum]) = " & Year(Me.Verkoopdatum)
Ik heb er een beetje een onzin query van gemaakt, maar dit is dan ook een voorbeeldje van hoe je tabelvelden in de query combineert met formuliervelden.
En als je dit kan onthouden, weet je gewoon alles wat je moet weten :).
Om de juiste uitgangspositie te krijgen, maak ik dan ook vaak een voorbeeldquery met een handmatige filtering op de velden die ik als criterium wil gebruiken. Van die query kopieer ik dan de SQL, en die verbouw ik dan in het VBA venster tot hij correct is. Kwestie van de filterwaarden vervangen door dubbele quoots en het formulierveld zoals hierboven, en eventueel extra quootjes neerzetten als er op tekst wordt gefilterd en niet op getallen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan