2010-10-21 5 views
0

J'ai un problème avec l'instruction access sql SELECT. le problème est que lorsque le backend est ACCESS-2007 cela fonctionne; Cependant, lorsque le backend est sql-server-2008, il ne retourne rien. voici la déclaration:l'instruction sql d'accès ne renvoie rien!

SELECT IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Occurrence Code], Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Count] 
FROM [Lab Occurrence Form] 
WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between Forms!Meeting_Reasons_Frequency!Text4 And Forms!Meeting_Reasons_Frequency!Text2)) And [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.*' 
GROUP BY IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) 
HAVING ((Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]))<>0) 
ORDER BY IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) 

s'il vous plaît noter que c'est ce qui ne fonctionne pas: Forms!Meeting_Reasons_Frequency!Text4 et ce Forms!Meeting_Reasons_Frequency!Text2 - quand je remplace les valeurs constantes ils travaillent; Cependant, le problème est qu'il ne lit pas correctement ce qui est dans la zone de texte pour une raison quelconque.

encore: cette requête fonctionne FINE avec l'accès en tant que backend, cependant quand le backend bascule sur sql server cela ne fonctionne pas! la raison est à nouveau à cause de la chose forms!text. Quelqu'un sait-il pourquoi?

mise à jour grâce à la suggestion de bob j'ai couru le profil sur sql-server et j'ai trouvé quelque chose de drôle. il travaille en effet correctement, mais il retourne la date comme celui-ci:

@P1 datetime,@P2 datetime','2010-04-30 00:00:00','2010-04-01 00:00:00' 
+2

IIF est un accès spécifique, pas SQL/TSQL –

+0

poneys @omg: cette requête est traduite par un accès en sql/tsql. encore une fois, cela fonctionne bien si je change ces valeurs en constantes au lieu de les obtenir à partir de la zone de texte –

+0

Pouvez-vous capturer l'instruction SQL qui est exécutée sur le serveur SQL. Vous devriez être en mesure d'utiliser SQL Server Profiler. L'instruction Access doit être convertie en version SQL Server. – bobs

Répondre

1

Essayez de définir vos références de contrôle de formulaire en tant que paramètres:

PARAMETERS [Forms]![Meeting_Reasons_Frequency]![Text4] DateTime, 
    [Forms]![Meeting_Reasons_Frequency]![Text2] DateTime; 
    SELECT IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Occurrence Code], Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [Count] 
    FROM [Lab Occurrence Form] 
    WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between Forms!Meeting_Reasons_Frequency!Text4 And Forms!Meeting_Reasons_Frequency!Text2)) And [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.*' 
    GROUP BY IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) 
    HAVING ((Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]))<>0) 
    ORDER BY IIf([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)] Like '*1.11*Other*','1.11 Other',[Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) 
-2

C'est un coup de feu dans l'obscurité, mais je pense qu'il est votre goût de. Access utilise * comme caractères génériques alors que SQL Server utilise% 's. Même si la syntaxe est traduite en t-sql, je me demande si elle change aussi les * en%. Essayez-le ...

+0

@mario: la déclaration fonctionne sur SQL Server pas de problème, le problème est qu'il ne prend pas les données de mon contrôle de texte sur mon formulaire c'est tout –

+0

Hmm, eh bien je devrais regarder votre formulaire. – Mario

+0

@jenny: @ La réponse de Mario est peut-être correcte. Si '*' n'est pas remplacé par '%', le motif de recherche sera erroné et ne retournera aucun résultat. Le '*' sera interprété littéralement (il doit y avoir un astérisque dans la valeur de la colonne pour correspondre). – bobs

1

Vous ne pouvez pas simplement bloquer les commandes dans votre chaîne.

Between Forms!Meeting_Reasons_Frequency!Text4 
And Forms!Meeting_Reasons_Frequency!Text2 

Vous devez les séparer et ensuite regarder votre chaîne SQL dans la fenêtre immédiate.

"<beginning query> Between " & Forms!Meeting_Reasons_Frequency!Text4 & _ 
" And " & Forms!Meeting_Reasons_Frequency!Text2 & " <rest of query>" 

Si vous cassez la création de cette chaîne, vous remarquerez que les valeurs de la boîte de texte seront affichés si vous passez votre souris sur le nom de contrôle.

+0

connaissez-vous l'accès sql? –

+0

@i suis une fille - oui – JeffO

Questions connexes