SQL INNER JOIN werkt niet mee

Status
Niet open voor verdere reacties.

leifoet

Gebruiker
Lid geworden
7 okt 2007
Berichten
334
3 tabellen met 2x INNER JOIN verbinden lukt niet.

tbl1 - velden o.a. : Ldnr, (naam)
tbl2 - velden o.a. : actId
tbl3 - velden o.a. : actanId, Lnr, (stat)

Code:
sql = "SELECT naam, Ldnr, tbl3.stat "&_
"FROM tbl1 "&_
"INNER JOIN tbl3 ON [B]tbl1.Ldnr = tbl3.Lnr "&_
"INNER JOIN tbl2 ON tbl3.ActAnId = tbl2.ActId[/B] "&_	
"WHERE tbl2.ActId=" & lngRecordNo & " AND tbl3.lnr>=46 "&_
"ORDER BY tbl1.naam"

Krijg volgende foutmelding :

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'tbl1.Ldnr = tbl3.Lnr INNER JOIN tbl2 ON tbl3.ActAnId = tbl2.ActId'.

Ik heb geen idee wat de 'missing operator' zou kunnen zijn. Waar kan ik het probleem best zoeken ?
Dank voor tips.
 
Laatst bewerkt:
'werkt niet meer' of 'werkt niet mee'? Dat maakt nogal een verschil :). In het eerste geval heeft het dus wél gewerkt, en moet de vraag zijn: wat is er veranderd in de situatie?
 
De aangegeven foutmelding is niet altijd correct, kopieer de opgebouwde SQL expressie en plak ze in een sql venster van SSMS. Daar zie je wat er fout ging. Het kan zijn dat in een bepaald geval lngRecordNo leeg blijft en de fout komt van het feit dat je een string doorstuurt als

WHERE tbl3.ActId= AND tbl3.lnr>=46
 
Dank NoellaG voor aanbreng.
Heb als test een (geldig) cijfer ingevuld in WHERE tbl3.ActId=12 AND tbl3.lnr>=46 => ook ingevoerd als sting '12' => telkens identieke foutmelding als sub #1
SSMS gedownload, maar hoe test ik nu mijn code ? oftewel hoe begin ik er aan? Is ergens een korte handleiding te vinden of is dat in een paar woorden uit te leggen?
Dank.
 
Laatst bewerkt:
Code:
"WHERE tbl3.[B][I][U]ActId[/U][/I][/B]=" & lngRecordNo & " AND tbl3.lnr>=46 "&_

Volgens je toelichting leeft ActId in tbl2.

Frank.
 
In de linkerhelft van her scherm kan je de tabellen zien en hun velden, dus dat is gemakkelijk te checken. Ik hoop dat het onmiddellijk zien wat er op de database gebeurt je een nieuw venster opent op je applicayie.
 
@FHG1969 : dank voor tabelfoutmelding - intussen gecorrigeerd - ook sub #1 => helaas blijft de server-foutmelding :
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'tbl1.Ldnr = tbl3.Lnr INNER JOIN tbl2 ON tbl3.ActAnId = tbl2.ActId

@NoellaG : SSMS : aanmelding is nog niet gelukt - geprobeerd met Window (cfr. jouw voorbeeldvenster met : DESKTOP ... ) => lukt niet (krijg error message m.b.t. te weinig info)
Vervolgens geklikt op (Links) Connect (via) Database Engine => vraagt servername : is dat de naam van de server van de provider ? (is die verbinding noodzakelijk ?)

INNER JOIN met 2 tabellen is geen probleem - na de foutmelding van FHG1969 dacht ik dat ook de 3 tabellen perfect zouden communiceren ...
Zijn er nog andere typische foutmogelijkheden in dit JOIN-probleem die ik zou kunnen checken ?
Dank voor tips.
 
SSMS: de info op de screenprint is een fictieve naam. Hier moet je het IP-adres of de naam van jou database server zetten en aanloggen met de credentials die je ook gebruikt in je web applicatie. Ik neem aan dat je hier ook moet inloggen op de database server. Via ssms kan je alleen inloggen als je op het correcte netwerk zit. Ik vermoed dat je met een Azure database werkt, de inlog gegevens kan je bij je provider aanvragen.
Joins met meerdere tabellen moet zeker lukken, op het werk heb ik SQL met joins naar 12 of meer tabellen en die lopen prima.
Voor SQL instructies: in het database deel van het forum vind je in thread https://www.helpmij.nl/forum/showthread.php/963453-SQL-queries een SQL handleiding.

Als ik trouwens de foutmelding bekijk komt die van de Access OLEDB driver en niet van de SQL server. Daarom zou het goed zijn om de expressie eens direct op de server uit te testen.
 
(Meer dan) driewerf helaas : SSMS ondersteunt geen Access database (een Microsoft-familie probleem ? ;-)
Ben dus nog steeds op zoek naar enig spoor van de missing operator - alle sporen zijn welkom.
 
Klopt SSMS is voor SQL databases, niet access. In je query gebruik je een correcte SQL server syntax, daarom het idee dat je met een SQL database werkte. Access wordt niet vaak gebruikt voor websites. Als je met access tabellen werkt in plaats van met een database moet je de access versie voor SQL gebruiken, deze wijkt af van de standaard. Best de query in een Access query maken en dan kijken welke SQL gebruikt is.
 
In je query gebruik je een correcte SQL server syntax, daarom het idee dat je met een SQL database werkte. Access wordt niet vaak gebruikt voor websites.
@leifoet Je hebt nergens asp of php vermeld. Gaat het om een website?
 
Sorry bron, was nogal spaarzaam in mijn communicatie - werk (nog) in asp classic en de webdatabase is (nog) Access zonder noemenswaardige problemen tot nu - ik dacht bijgevolg dat na eerdere werkende INNER JOIN's (met twee Access-tabellen) vlot zou kunnen uitgebreid worden tot 2 en meer (voor meerdere tabellen).
NoellaG, zoals je suggereerde sub #10 zou (of zal) de code van 2 INNER JOIN met 3 tabellen (of meer ?) voor een Access database hier afwijkend kunnen zijn van de normale SQL code met 'onverwachte' errors tot gevolg.

Probeer dit nu aan te passen naar Access tenzij iemand bovenstaande query vlot(ter) kan converteren.
In elk geval dank NoellaG voor de 'sleutel' - en misschien moet ik toch overwegen om de overstap naar SQL-database te vervroegen.
 
Laatst bewerkt:
Query-probleem opgelost - met '()' werkt sub 1# gemelde query op basis van de Access-tabellen zoals gehoopt.

Code:
sql = "SELECT naam, Ldnr, tbl3.stat "&_
"FROM (tbl1 "&_
"INNER JOIN tbl3 ON tbl1.Ldnr = tbl3.Lnr) "&_
"INNER JOIN tbl2 ON tbl3.ActAnId = tbl2.ActId "&_	
"WHERE tbl2.ActId=" & lngRecordNo & " AND tbl3.lnr>=46 "&_
"ORDER BY tbl1.naam"

Nogmaals dank voor de tips.

Nog dit @OctaFish (sub #2) : het correcte antwoord is 'werkt (nu) mee' ;-)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan