J'ai une base de données Access Access que j'utilise pour les rapports qui ont des vues de table liées depuis SQL Server 2005. J'ai créé une requête qui récupère les informations d'une table PO et catégorise les élément de campagne en fonction des informations d'une autre table. Je suis relativement certain que la requête s'est bien passée jusqu'à il y a environ un mois quand nous sommes passés du mode de compatibilité 80 à 90 sur le serveur comme requis par notre application primaire (qui crée les données). Je ne peux pas le dire avec une certitude absolue, mais c'est le seul changement majeur qui ait été fait au cours des 90 derniers jours. Nous avons remarqué que soudainement les données n'apparaissaient pas dans la requête, ce qui rendait les rapports bizarres.La requête d'accès renvoie des champs vides en fonction de la façon dont la table est liée.
Ceci est une copie de la requête à défaut:
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")
Il renvoie les éléments suivants:
jobnum opcode jobseqtype shortchar01 ponum poline unitcost
367000003 S 6624 2 15
La requête doit normalement afficher une valeur pour opcode et shortchar01. Si je supprime la table liée dbo_podetail, elle affiche correctement les données pour ces champs (bien que je ne possède plus évidemment unitcost). Au début, je pensais que c'était peut-être un problème de données, mais j'ai trouvé que si j'avais imbriqué la requête puis lié la table, cela a bien fonctionné.
Par exemple, le code suivant fonctionne parfaitement:
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)
Je suis à une perte pour laquelle il travaille dans ce dernier cas et non dans le premier cas. Pire encore, il semble fonctionner par intermittence pour certains enregistrements et pas pour d'autres (il est cohérent avec ceux pour lesquels il fonctionne et ne fonctionne pas).
Certains de vos experts ont-ils des idées?
L'une des colonnes de votre instruction SELECT est-elle le PK de la table principale de votre requête? Deuxièmement, Access fait un meilleur travail d'affichage et d'actualisation des données dans les formulaires liés si vous avez un champ d'horodatage dans votre table et l'inclure dans toutes vos instructions SQL. –