Syntaxe sql access au sql server2000

Résolu
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009 - 12 mai 2007 à 14:40
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009 - 24 mai 2007 à 15:54
bonjour tout le monde

je suis en cours de faire une transformation d'une base de données access au sql server2000
le probleme c'est que les requetes utilisé dans le code vb ne sont pas connus par le sql server.

je veux la solution de cette requete:
le probleme est dans la ! il me donne un erreur de syntaxe tandis que dans le access il ne me donne pas ça.
--------------------------------------------------------------------------------------------------de1.rsfixe.Source "SELECT reservation.num_reserv FROM (reservation LEFT JOIN annulation ON reservation.num_reserv annulation.num_reserv) INNER JOIN fixe ON reservation.num_reserv = fixe.num_reserv WHERE (((reservation.date_reserv)<=" & acces_datejour & ") AND ((reservation.num_membre)=" & Val(Text3) & ") AND ((reservation.num_atelier)=" & de1.rsatelier!num_atelier & ") AND ((annulation.num_annul) Is Null) AND (((DateDiff('d',[reservation] ! [date_reserv],'" & acces_datejour & "')/7)-Int(DateDiff('d',[reservation]![date_reserv],'" & acces_datejour & "')/7)) =0));"
--------------------------------------------------------------------------------------------------
merci.
A voir également:

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 mai 2007 à 20:08
Re
J'ai vu que tu étais passé le 13 mai à 21h30
Un petit merci aurait été apprécié ...
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mai 2007 à 17:04
Salut
Piouh ! Sacré requète !
Je l'ai remise en forme pour qu'elle soit lisible, je te conseille d'ailleurs de bien mettre en forme ton code, indentations y compris, ça aide énormément dans la recherche et le dépannage :
de1.rsfixe.Source = _
"SELECT reservation.num_reserv " & _
"  FROM (reservation LEFT JOIN annulation" & _
"    ON reservation.num_reserv = annulation.num_reserv)" & _
" INNER JOIN fixe " & _
"    ON reservation.num_reserv = fixe.num_reserv " & _
" WHERE (((reservation.date_reserv) <= " & acces_datejour & ")" & _
"   AND ((reservation.num_membre)    = " & Val(Text3) & ")" & _
"   AND ((reservation.num_atelier)   = " & de1.rsatelier!num_atelier & ")" & _
"   AND ((annulation.num_annul)        Is Null)" & _
"   AND (((DateDiff('d',[reservation] ! [date_reserv], " & _
                        "'" & acces_datejour & "')/7) - " & _
                                 Int(DateDiff('d',[reservation]![date_reserv], " & _
                        "'" & acces_datejour & "')/7)) = 0));"
Nota : Tu remarqueras l'espace ajouté systématiquement avant le dernier " de chaque ligne : Ceci pour séparer les mots dans l'instruction SQL. La majeure partie des erreurs vient du fait que la syntaxe n'est pas décryptée par le moteur de base de données pour cette raison.

Bon, alors, premièrement, comme je le répète à chaque fois qu'on parle de date dans les requètes SQL (10 fois par semaine), quand la déclaration du champ dans la DB est de type "date générale", il faut encadrer les valeurs fournies par des #
Donc, cette ligne est à modifier :
" WHERE (((reservation.date_reserv) <= #" & acces_datejour & "#)" & _
On verra après que ce # doit aussi apparaitre dans les DateDiff de la dernère condition.

Ensuite, n'abuse pas des parenthèses, elle rendent la relecture indigeste.
Par exemple, ici, on peut les enlevées toutes :
"   AND annulation.num_annul        Is Null" & _
De toute façon, dans ces lignes très longues, il faut compter le nombre de parenthèses : Il doit y avoir autant de ( que de )

On suppose que de1.rsatelier!num_atelier correspond à un autre RecordSet actuellement ouvert

Dans la syntaxe de la dernière et magnifique condition :
- L'erreur que tu as signalé en rouge est simple à voir : Tu as mis un ! au lieu d'un point
  Le ! est réservé (sous VB) à la séparation entre un RecordSet et le nom d'un champ.
  Les crochets encadrent les noms des champs lorsque leur nom comportent des accents ou des caractères spéciaux comme le _ (conseillé). Donc ces deux lignes sont acceptées :
"   AND (((DateDiff('d',[reservation].[date_reserv], " & _
"   AND (((DateDiff('d',  reservation.[date_reserv], " & _

- Syntaxe :
La fonction DateDiff est à l'intérieur des " de déclaration de la requète, c'est à dire que cette fonction sera exécutée par le moteur de la base de données. Tu l'as bien vu puisque tu as utilisé des ' pour encadrer la date fournie : Elle doit être encadrée par des # et pas des '
"   AND (    ((DateDiff('d', reservation.[date_reserv], #" & acces_datejour & "#) / 7) " & _
        "- Int(DateDiff('d', reservation.[date_reserv], #" & acces_datejour & "#) / 7)) = 0);"

- Ce calcul : tu sembles vouloir calculer si la location est dans sa première semaine.
Pourquoi ne pas utiliser toutes les possibilités de la fonction DateDiff, notamment celle qui consiste à lui demander de calculer le nombre de semaine plutôt que le nombre de jours :
Je pense que ta longue équation peut se traduire par :
"   AND DateDiff('ww', reservation.[date_reserv], #" & acces_datejour & "#) = 0;"

En final, ta syntaxe deviendrait :
de1.rsfixe.Source = _
"SELECT reservation.[num_reserv] " & _
"  FROM reservation LEFT JOIN annulation" & _
"    ON reservation.[num_reserv] = annulation.[num_reserv]" & _
" INNER JOIN fixe " & _
"    ON reservation.[num_reserv] = fixe.[num_reserv] " & _
" WHERE reservation.[date_reserv] <= #" & acces_datejour & "#" & _
"   AND reservation.[num_membre]   = " & Val(Text3) & _
"   AND reservation.[num_atelier]  = " & de1.rsatelier![num_atelier] & _
"   AND annulation.[num_annul]       Is Null" & _
"   AND DateDiff('ww', reservation.[date_reserv], #" & acces_datejour & "#) = 0;"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009
24 mai 2007 à 15:54
slt je suis vraiment désolé.
je ne sais pas quoi dire???
merci
0
Rejoignez-nous