Fout in select

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
In mijn toevoeg query krijg ik foutmelding 3002
fout3002.jpg

De fout zit in de string bij dbs.Execute enz

Wat uitleg bij de query
De query Q_sp wordt 6x gekoppeld aan een tabel waarvan de naam
wordt samengesteld met mbv 4 Variabelen, de tabelnaam staat dan in de variabele Vartot.
Dit is nodig omdat op basis van het nummer in het formulier de juiste tabel wordt geselecteerd.
Vargetal staat in het formulier.
De koppeling van de query Q_sp met de tabel bestaat uit een nummer.
In de gekoppelde query staat ook de naam en de id.
De naam naam en de id wordt dan in de tabel gezet.
Als ik een tabelmaak query maak mbv queryontwerp werkt het uitstekend.

Wat staat er nu fout in de VBA code?
Code:
Function test()

Dim dbs As Database
Set dbs = DBEngine.Workspaces(0).Databases(0)
Dim strSQL As String
Dim Vargetal
Dim VarQry1 As String
Dim VarQry2 As String
Dim Vartot As String
    
Vargetal = Forms![Frm_AanwezigSelecteren]![Frm_Aantal].Form![AantalA]
VarQry1 = "Tbl_Schema"
VarQry2 = "spelers"
Vartot = VarQry1 & Vargetal & VarQry2 'Toont de tabelnaam aan die gekozen moet worden

dbs.Execute "INSERT INTO Tbl_Wedstrijdschema" _
& "( Ronde, [Speler 1], [IdSpeler1], [Speler 2],[IdSpeler2], [Speler 3],[IdSpeler3], Tegen, [tegenspeler 1],[IdTSpeler1]," _
& "[tegenspeler 2],[IdTSpeler2], [tegenspeler 3],[IdTSpeler3] ) " _
& "SELECT " & Vartot & ".ronde," _
& "Q_sp.Naam AS [Speler 1], Int([Q_sp!Id]) AS IdSpeler1," _
& "Q_sp_1.Naam AS [Speler 2], Int([Q_sp_1!Id]) AS IdSpeler2," _
& "Q_sp_2.Naam AS [Speler 3], Int([Q_sp_2!Id]) AS IdSpeler3," _
& " ""tegen"" AS Tegen," _
& "Q_sp_3.Naam AS [tegenspeler 1], Int([Q_sp_3!Id]) AS IdTspeler1," _
& "Q_sp_4.Naam AS [tegenspeler 2], Int([Q_sp_4!Id]) AS IdTspeler2," _
& "Q_sp_5.Naam AS [tegenspeler 3], Int([Q_sp_5!Id]) AS IdTspeler3 INTO Tbl_Overzicht" _
& " FROM Q_sp AS Q_sp_5 RIGHT JOIN (Q_sp" _
& "AS Q_sp_4 RIGHT JOIN (Q_sp AS Q_sp_3 RIGHT JOIN (Q_sp" _
& "AS Q_sp_2 RIGHT JOIN (Q_sp AS Q_sp_1 RIGHT JOIN (Q_sp" _
& "RIGHT JOIN " & Vartot & " ON Q_sp.Nummertoewijzing = " & Vartot & ".speler1) ON" _
& "Q_sp_1.Nummertoewijzing = " & Vartot & ".speler2) ON" _
& "Q_sp_2.Nummertoewijzing = " & Vartot & ".speler3) ON" _
& "Q_sp_3.Nummertoewijzing = " & Vartot & ".tegenspeler1) ON" _
& "Q_sp_4.Nummertoewijzing = " & Vartot & ".tegenspeler2) ON" _
& "Q_sp_5.Nummertoewijzing = " & Vartot & ".tegenspeler3" _
& "ORDER BY " & Vartot & ".ronde;"

End Function
bij voorbaat dank voor het lezen en wellicht de oplossing,
Sytse
 
Ik vind de code nogal slordig; zo dim je wél een string voor de SQL (strSQL) maar gebruik je die niet, en dim je een variabele als variant die duidelijk een getal zou moeten zijn (varGetal). Daarnaast converteer je m.i. volkomen onnodig getallen naar een integer (Int([Q_sp!Id]) bijvoorbeeld). En de logica van deze naamgeving
PHP:
"Q_sp.Naam AS [Speler 1], 
"Q_sp_1.Naam AS [Speler 2]
"Q_sp_2.Naam AS [Speler 3]
ontgaat mij volledig.
Maar die zijn allemaal het probleem niet: dat begint al bij de eerste regel.

Code:
    strSQL = "INSERT INTO Tbl_Wedstrijdschema" _
waar een spatie had moeten staan achter Tbl_Wedstrijdschema. En waarom je van elke speler zowel de naam als de ID invoert, is mij al helemaal een raadsel.... Dat is volkomen overbodig als de tabellen goed genormaliseerd zijn. Tenzij de spelers regelmatig van naam veranderen natuurlijk.

Er is een simpele manier om te controleren of je syntax van je query correct is, waarbij je dus wel degelijk de string variabele gebruikt. Dan begin je dus zo:
Code:
    strSQL = "INSERT INTO Tbl_Wedstrijdschema" _
en dan de rest van de query. En je eindigt zo:
Code:
    & "ORDER BY " & Vartot & ".ronde;"
Dim tmp As String
tmp = InputBox("", "", strSQL)
CurrentDb.Execute strSQL, dbFailOnError
De query uit de inputbox kun je simpel kopieëren en, als hij weer niet werkt, in een nieuwe lege query plakken. In het queryontwerp zie je dan heel snel (want Access markeert dat punt) waar het fout gaat.
 
Beste Octafish,
Bedankt voor je meedenken.
Ik ben inderdaad soms wat slordig maar wellicht heb je dat op mijn leeftijd(71)! aangepast (Dim Vargetal As Integer)
Het komt ook door het steeds uitproberen. De meest simpele wijze is een aantal gewone maak-tabel queries en deze dan laten selecteren middels een stukje vba.
Dat is mij wel gelukt maar ik wil deze queries vervangen en in vba uitvoeren.
Je hebt gelijk, de spelers veranderen steeds van naam.
Het id in de nieuwe tabel is nodig om bij elke speler een score te kunnen vermelden.
De spelers en het aantal spelers veranderd vandaar het id.
Opnieuw begonnen en aangepast volgens jouw aanwijzing.
Je advies opgevolgd en eerst in VBA een werkende selectie query gemaakt.
Deze toen aangepast met insert into.
Alles werkt naar behoren.
Bedankt,
Sytse
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan