Toevoeg query in VBA

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Bijgaande toevoeg query werkt niet.
MS-Access VBA geeft geen fout aan, maar de query wordt niet uitgevoerd.
Als query werkt het wel?
Wat is er fout in de syntax.
Sytse
Code:
Function MaakQry()

Dim strSQL As String
strSQL = "INSERT INTO Tbl_Wedstrijdschema ( Ronde, [Speler 1], [Speler 2], [Speler 3], Tegen, [tegenspeler 1], [tegenspeler 2], [tegenspeler 3] )" _
& "SELECT Tbl_Schema16spelers.ronde AS Ronde, Qry_GeselecteerdeSpelers.Naam AS [Speler 1], Qry_GeselecteerdeSpelers_1.Naam AS [Speler 2], Qry_GeselecteerdeSpelers_2.Naam AS [Speler 3], tegen AS Tegen, Qry_GeselecteerdeSpelers_3.Naam AS [tegenspeler 1], Qry_GeselecteerdeSpelers_4.Naam AS [tegenspeler 2], Qry_GeselecteerdeSpelers_5.Naam AS [tegenspeler 3]" _
& "FROM Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_5 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_4 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_3 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_2 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_1 RIGHT JOIN (Qry_GeselecteerdeSpelers RIGHT JOIN Tbl_Schema16spelers ON Qry_GeselecteerdeSpelers.Nummertoewijzing = Tbl_Schema16spelers.speler1) ON Qry_GeselecteerdeSpelers_1.Nummertoewijzing = Tbl_Schema16spelers.speler2) ON Qry_GeselecteerdeSpelers_2.Nummertoewijzing = Tbl_Schema16spelers.speler3) ON Qry_GeselecteerdeSpelers_3.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler1) ON Qry_GeselecteerdeSpelers_4.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler2) ON Qry_GeselecteerdeSpelers_5.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler3;"

End Function
 
Vind je je eigen query leesbaar? Ik niet... Waarom je aliassen gebruikt bij een toevoegquery die langer zijn dan de oorspronkelijke naam, zal ik wel nooit begrijpen :). Ook de aliassen in de SELECT zijn langer, en zelfs niet eens nodig. Ik zou de code dus zo schrijven:

Code:
strSQL = "INSERT INTO Tbl_Wedstrijdschema" _
    & "( Ronde, [Speler 1], [Speler 2], [Speler 3], Tegen, [tegenspeler 1], [tegenspeler 2], [tegenspeler 3] ) " _
    & "SELECT Tbl_Schema16spelers.ronde, Qry_GeselecteerdeSpelers.Naam, Q1.Naam, Q2.Naam, tegen, Q3.Naam, Q4.Naam, Q5.Naam " _
    & "FROM Qry_GeselecteerdeSpelers AS Q5 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q4 " _
    & "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q3 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q2 " _
    & "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q1 RIGHT JOIN (Qry_GeselecteerdeSpelers " _
    & "RIGHT JOIN Tbl_Schema16spelers ON Qry_GeselecteerdeSpelers.Nummertoewijzing = Tbl_Schema16spelers.speler1) " _
    & "ON Q1.Nummertoewijzing = Tbl_Schema16spelers.speler2) " _
    & "ON Q2.Nummertoewijzing = Tbl_Schema16spelers.speler3) " _
    & "ON Q3.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler1) " _
    & "ON Q4.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler2) " _
    & "ON Q5.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler3; "
Of de query werkt of niet, kun je simpel uittesten met een Inputbox:
Dim tmp
Code:
tmp = Inputbox("","",strSQL)
Hiermee haal je de letterlijke tekst uit je string die je dan kan kopiëren en in een nieuwe query kan plakken. Maar je zegt zelf al dat de query an sich het doet. dus het probleem zit ergens anders.
Zonder de db wordt dat lastig te zeggen, maar je functie stelt de string alleen maar samen, maar voert hem niet uit. Dat doe je dus blijkbaar op een ander moment in de procedure?
 
Toevoegquery in VBA

Bedankt voor je reactie.
De aliassen in mijn proef instellingen zijn te lang.
Gedaan om het leesbaar te houden.
Met je hulp heb ik het werkend gekregen.
De aliassen zijn nog te lang maar dit is in VBA de werkende toevoeg query.
Sytse
Code:
Dim dbs As Database
Set dbs = DBEngine.Workspaces(0).Databases(0)
dbs.Execute " INSERT INTO Tbl_Wedstrijdschema" _
& "( Ronde, [Speler 1], [Speler 2], [Speler 3], Tegen, [tegenspeler 1], [tegenspeler 2], [tegenspeler 3] ) " _
& "SELECT Tbl_Schema16spelers.ronde AS Ronde, Qry_GeselecteerdeSpelers.Naam AS [Speler 1], Qry_GeselecteerdeSpelers_1.Naam AS [Speler 2], Qry_GeselecteerdeSpelers_2.Naam AS [Speler 3], tegen AS Tegen, Qry_GeselecteerdeSpelers_3.Naam AS [tegenspeler 1], Qry_GeselecteerdeSpelers_4.Naam AS [tegenspeler 2], Qry_GeselecteerdeSpelers_5.Naam AS [tegenspeler 3] " _
& "FROM Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_5 " _
& "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_4 " _
& "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_3 " _
& "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_2 " _
& "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Qry_GeselecteerdeSpelers_1 " _
& "RIGHT JOIN (Qry_GeselecteerdeSpelers RIGHT JOIN Tbl_Schema16spelers " _
& "ON Qry_GeselecteerdeSpelers.Nummertoewijzing = Tbl_Schema16spelers.speler1) " _
& "ON Qry_GeselecteerdeSpelers_1.Nummertoewijzing = Tbl_Schema16spelers.speler2) " _
& "ON Qry_GeselecteerdeSpelers_2.Nummertoewijzing = Tbl_Schema16spelers.speler3) " _
& "ON Qry_GeselecteerdeSpelers_3.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler1) " _
& "ON Qry_GeselecteerdeSpelers_4.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler2) " _
& "ON Qry_GeselecteerdeSpelers_5.Nummertoewijzing = Tbl_Schema16spelers.tegenspeler3; "
dbs.Close
 
Beste OctaFish,
Wellicht kan je mij nog met het volgende helpen.
Zoals je in de code kan zien staat daar Tbl_Schema16spelers.
Ik zou dit willen vervangen door een variabele.
Ik kan met een variabele wel een query aanroepen.
Als ik echter dezelfde variabele in de StrSQL plaats werkt dit niet.
De variabele wordt als volgt samengesteld:
Code:
Dim VarA, Varqry1, Varqry2, VarCijfer, VarqryT
Varqry1 = "Tbl_Schema" 'gedeelte naam tabel
Varqry2 = "spelers"        'gedeelte naam tabel
VarCijfer = Forms!Frm_GeselecteerdeSpelers!TellerA 'Aantal geselecteerden
VarqryT = Varqry1 & VarCijfer & Varqry2 'Samengesteld geeft dit Tbl_Schema16spelers
'Voor de uitvoering van een query werkt dit uitstekend.
' DoCmd.OpenQuery VarqryT, acViewNormal, acEdit
Als ik nu VarqryT in eerder gemaakt VBA code plaats werkt dit niet met de variabele.
De melding is: kan tabel of query VarqryT niet vinden.
Sytse
 
Code:
Dim VarA, Varqry1, Varqry2, VarCijfer, VarqryT
Waarom alle variabelen als variant? Het zijn toch gewoon strings? Altijd zo zuiver mogelijk declareren, zou ik zeggen.
Code:
Dim VarA As String, Varqry1 As String, Varqry2 As String, VarCijfer As String, VarqryT As String
    Varqry1 = "Tbl_Schema"
    Varqry2 = "spelers"
    VarCijfer = Me.TellerA
    VarqryT = Varqry1 & VarCijfer & Varqry2
Jammer genoeg geef je nu niet niet de code die we nodig hebben; dit deel werkte namelijk an sich wel, zoals je al schreef in #5.
 
De code staat bij #3
V.w.b. het declareren heb je gelijk(slordig van mij)
Het is proberen of het e.e.a. werkt en dan kijk ik pas hoe het netjes en kort kan.
Wat ik middels de variabele steeds wil wijzigen is Tbl_Schema16spelers.
Omdat afhankelijk van een getal tussen de 16 en 100 er voor de toevoegquery dan een andere tabel gekozen moet worden.
Het enige wat dan wijzigt is het getal b.v. i.p.v. 16 zeg maar 33.
De strSQL wordt in VBA in zijn geheel gelezen en krijg ik de melding dat er geen tabel of query met de naam VarqryT bestaat.
Met andere woorden de variabele wordt niet uitgelezen maar als naam gelezen.
Sytse
 
Op zich moet je een variabele makkelijk in een string kunnen zetten voordat die string wordt uitgevoerd. 't Is niet veel meer dan tekst tenslotte.

Code:
    Varqry1 = "Tbl_Schema"
    Varqry2 = "spelers"
    VarCijfer = Me.TellerA
    VarqryT = Varqry1 & VarCijfer & Varqry2

    strSQL = "INSERT INTO Tbl_Wedstrijdschema" _
        & "( Ronde, [Speler 1], [Speler 2], [Speler 3], Tegen, [tegenspeler 1], [tegenspeler 2], [tegenspeler 3] ) " _
        & "SELECT Tbl_Schema16spelers.ronde, Qry_GeselecteerdeSpelers.Naam, Q1.Naam, Q2.Naam, tegen, Q3.Naam, Q4.Naam, Q5.Naam " _
        & "FROM Qry_GeselecteerdeSpelers AS Q5 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q4 " _
        & "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q3 RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q2 " _
        & "RIGHT JOIN (Qry_GeselecteerdeSpelers AS Q1 RIGHT JOIN (Qry_GeselecteerdeSpelers " _
        & "RIGHT JOIN " & VarqryT & " ON Qry_GeselecteerdeSpelers.Nummertoewijzing = " & VarqryT & ".speler1) " _
        & "ON Q1.Nummertoewijzing = " & VarqryT & ".speler2) " _
        & "ON Q2.Nummertoewijzing = " & VarqryT & ".speler3) " _
        & "ON Q3.Nummertoewijzing = " & VarqryT & "[B][/B].tegenspeler1) " _
        & "ON Q4.Nummertoewijzing = " & VarqryT & ".tegenspeler2) " _
        & "ON Q5.Nummertoewijzing = " & VarqryT & ".tegenspeler3; "

Zou mijn eerste gok zijn.
 
Learning all the time
Alle soorten haakjes heb ik uitgeprobeerd.
Alleen de & natuurlijk er niet bijgezet.
Met " & Variabele & " werkt het perfect.
Bedankt,
Sytse
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan