Frage

Ich habe eine Access MDB ich für die Berichterstattung verwenden bekam die Tabellenansichten von SQL Server 2005. Ich habe Abfrage erstellt, die Informationen aus einer PO-Tabelle abruft und die Position stuft auf Informationen in Abhängigkeit von einer anderen Tabelle verknüpft ist. Ich bin relativ sicher, dass die Abfrage bis etwa vor einem Monat war in Ordnung, wenn wir aus Kompatibilitätsmodus 80 bis 90 auf dem Server verschoben, wie durch unsere primäre Anwendung erforderlich ist (die die Daten erstellt). Ich kann das nicht mit 100% iger Sicherheit sagen, aber das ist der einzige in den letzten 90 Tagen große Veränderung. Wir haben festgestellt, dass plötzlich Daten nicht in der Abfrage zeigt sich machen die Berichte seltsam aussehen.

Dies ist eine Kopie der fehlerhaften Abfrage:

SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
    dbo_opmaster.shortchar01, 
    dbo_porel.ponum, dbo_porel.poline, dbo_podetail.unitcost

FROM ((dbo_porel 
LEFT JOIN dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
    AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
    AND (dbo_porel.jobnum = dbo_joboper.jobnum)) 
LEFT JOIN dbo_opmaster ON dbo_joboper.opcode = dbo_opmaster.opcode) 
LEFT JOIN dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
    AND (dbo_porel.ponum = dbo_podetail.ponum)

WHERE (dbo_porel.jobnum="367000003")

Es gibt folgende Möglichkeiten:

jobnum    opcode  jobseqtype  shortchar01  ponum  poline  unitcost
367000003            S                     6624       2      15


Die Abfrage sollte in der Regel einen Wert für Opcode und shortchar01 angezeigt. Wenn ich die verknüpfte Tabelle dbo_podetail entfernen, zeigt es richtig Daten für diese Felder (obwohl ich natürlich tun haben nicht mehr Unitcost). Zuerst dachte ich, es könnte ein Datum Problem sein, aber ich fand, wenn ich die Abfrage verschachtelt und dann die Tabelle verknüpft, es funktionierte gut.

Zum Beispiel der folgende Code funktioniert perfekt:

SELECT qryTest.*, dbo_podetail.unitcost

FROM (

    SELECT dbo_porel.jobnum, dbo_joboper.opcode, dbo_porel.jobseqtype,
        dbo_opmaster.shortchar01, dbo_porel.ponum, dbo_porel.poline

    FROM (dbo_porel 
    LEFT JOIN dbo_joboper ON (dbo_porel.jobnum=dbo_joboper.jobnum) 
        AND (dbo_porel.jobseq=dbo_joboper.oprseq) 
        AND (dbo_porel.assemblyseq=dbo_joboper.assemblyseq)) 
    LEFT JOIN dbo_opmaster ON dbo_joboper.opcode=dbo_opmaster.opcode

    WHERE (dbo_porel.jobnum="367000003")

) As qryTest 
LEFT JOIN dbo_podetail ON (qryTest.poline = dbo_podetail.poline) 
    AND (qryTest.ponum = dbo_podetail.ponum)


Ich bin ratlos, warum funktioniert es im letzteren Fall und nicht im ersten Fall. Schlimmer noch, es mit Unterbrechungen für einige Datensätze für andere und nicht zu funktionieren scheint (es ist konsistent über die es tut Einsen und für nicht funktioniert).

Hat jemand von euch Experten irgendwelche Ideen?

War es hilfreich?

Lösung

Sie müssen auf jeden Fall für mehrere Unterabfragen verwenden, links / rechts schließt sich in Access.
Ich denke, es ist eine Einschränkung des Jet-Optimierer, die verwirrt wird, wenn Sie nur links Verkettungs / rechts schließt sich.

Sie können sehen, dass dies ein immer wieder auftretendes Problem ist die oft Flächen.

Andere Tipps

Ich bin immer von Access' Verwendung von Klammern verwechselt in beitritt. Versuchen Sie, die zusätzliche Klammern Strippen aus.

FROM 
    dbo_porel 
LEFT JOIN 
    dbo_joboper ON (dbo_porel.assemblyseq = dbo_joboper.assemblyseq) 
        AND (dbo_porel.jobseq = dbo_joboper.oprseq) 
        AND (dbo_porel.jobnum = dbo_joboper.jobnum)
LEFT JOIN 
    dbo_opmaster ON (dbo_joboper.opcode = dbo_opmaster.opcode)
LEFT JOIN 
    dbo_podetail ON (dbo_porel.poline = dbo_podetail.poline) 
        AND (dbo_porel.ponum = dbo_podetail.ponum)

OK die oben nicht funktioniert - leider ich aufgeben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top