WHERE claus Criteria + Variabele plaatsen

Status
Niet open voor verdere reacties.

royvdh65

Gebruiker
Lid geworden
7 mei 2010
Berichten
83
Ik zit met het volgende probleempje. Ik heb een query binnen VBA, nu wil ik binnen de WHERE Clausule een variabele meegeven die een waarde meegeeft, alleen ik weet niet hoe ik deze tussen de criteria binnen binnen de WHERE clausule plaats.
Dit is mijn WHERE-Clausule:

WHERE (((dboMasterData.TableCode)="SERV_ORD") AND ((dboMasterData_1.TableCode)="JOB_QZI"));

en nu wil ik dboServiceOrder.No_ = '" & ServOrdNr & "' daartussen plaatsen maar ik weet niet hoe, want VBA geeft iedere keer een compileerfout waar ik niet uitkom. Iemand enig idee?
 
Lijkt meer op missende " of ) ergens volgens mij. (denk ik)

Frank.
 
Laatst bewerkt:
Ik vermoed dat je het woordje Me vergeten bent:

dboServiceOrder.No_ = '" & Me.ServOrdNr & "'

Als dat niet helpt, dan lijkt het me handig dat je even de complete code-regel post.

Rebmog
 
Jullie suggesties hebben nog niet mogen baten, dit is mijn code die ik nu heb:

Dim dbs As Database
Dim recJob As Recordset
Dim strSQL As String


Set dbs = CurrentDb()

strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode]" & _
"WHERE((dboMasterData.TableCode)= "SERV_ORD" ) AND ((dboMasterData_1.TableCode)="JOB_QZI")dboServiceOrder = '" & Me.ServOrdNr & "'"

Set recJob = dbs.OpenRecordset(strSQL, dbOpenDynaset)

If Not recJob.EOF Then
Me.Status = recJob.Fields("dboMasterData_1.CODEPOSITION")
Else
MsgBox "Geen records gevonden"
End If

Wanneer ik criteria en variabele mee geef aan de WHERE claus geeft hij een compileerfout bij de criteria SERV_ORD: "Verwacht instructie einde"
 
Code:
strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode]" & _
"WHERE dboMasterData.TableCode= "SERV_ORD" AND dboMasterData_1.TableCode="JOB_QZI" AND dboServiceOrder.No= '" & Me.ServOrdNr & "'"

Tardis
 
Nee deze code werkt ook al niet, hij geeft weer een foutmelding bij de criteria SERV_ORD daardoor wordt de code ook rood.
 
Oke, ik heb nu de aangepaste code van Tardis genomen:

Dim dbs As Database
Dim recJob As Recordset
Dim strSQL As String


Set dbs = CurrentDb()

strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode]" & _
"WHERE dboMasterData.TableCode= "SERV_ORD" AND dboMasterData_1.TableCode="JOB_QZI" AND dboServiceOrder.No= '" & Me.ServOrdNr & "'"

Set recJob = dbs.OpenRecordset(strSQL, dbOpenDynaset)

If Not recJob.EOF Then
Me.Status = recJob.Fields("dboMasterData_1.CODEPOSITION")
Else
MsgBox "Geen records gevonden"
End If

En de foutmelding zie bijlage:
 

Bijlagen

  • foutmelding14-06.jpg
    foutmelding14-06.jpg
    39 KB · Weergaven: 28
Laatst bewerkt:
Let op het juist toepassen van regeleindes (spaties..):

Code:
strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode] " & _
"WHERE dboMasterData.TableCode= "SERV_ORD" AND dboMasterData_1.TableCode="JOB_QZI" AND dboServiceOrder.No= '" & Me.ServOrdNr & "'"

Tardis
 
Sorry Tardis, dit is ie ook niet. Ik krijg weer precies dezelfde foutmelding, ook weer bij de criteria SERV_ORD. Wanneer ik de sql code (zonder parameters) test in een sql scherm binnen Access werkt de query wel.
 
Oops, dubbele aanhalingstekens voor de vaste waarden over het hoofd gezien.
Vervang deze door een enkel aanhalingsteken:

Code:
strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode] " & _
"WHERE dboMasterData.TableCode= 'SERV_ORD' AND dboMasterData_1.TableCode='JOB_QZI' AND dboServiceOrder.No= '" & Me.ServOrdNr & "'"

Sluit anders even een voorbeeldbestand bij.

Tardis
 
Visual Basic keurt de code nu in ieder geval goed, dus er is geen compileerfout meer. Ik krijg nu een foutmelding Too few parameters. Expected 1. Bedoel je met een voorbeeldbestand de database met het form?
 
Foutmelding betekent dat je verwijst naar een niet-bestaande kolom in een tabel of een niet bestaand veld in je formulier.
Loop je code nog eens goed na.

Met een voorbeeldbestand bedoel ik een bestand waar alles in zit om jouw probleem te reproduceren.

Tardis
 
Het klopte inderdaad dat ik verwees naar een niet bestaande tabel, ik was een underscore vergeten bij dboServiceOrder.No_. Alleen krijg ik nu een andere foutmelding: "Item not found in this collection". Wat betreft het plaatsen van de bestanden die van belang zijn voor dit probleem, dit zijn best grote tabellen van stage dat zal waarschijnlijk niet gaan.
 
Zonder voorbeeldbestand kan ik je niet verder helpen.

Tardis
 
Als je ServOrdNr een numerieke waarde is, moet je de code aanpassen:

Code:
strSQL = "SELECT dboServiceOrder.No_, dboMasterData_1.CODEPOSITION " & _
"FROM (dboServiceOrder INNER JOIN dboMasterData ON dboServiceOrder.No_ = dboMasterData.[NAV ItemCode]) INNER JOIN dboMasterData AS dboMasterData_1 ON dboMasterData.LinkedJobNo = dboMasterData_1.[NAV ItemCode] " & _
"WHERE dboMasterData.TableCode= 'SERV_ORD' AND dboMasterData_1.TableCode='JOB_QZI' AND dboServiceOrder.No= " & Me.ServOrdNr
 
Sorry voor de nogal late reactie, maar dit onderwerp is al een tijdje opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan