OVH Cloud OVH Cloud

Migration vers SQL Serveur...

5 réponses
Avatar
Michel _newbie
Bonjour,

Je viens d'installer SQL Serveur 2000 en vue de remplacer une base Access.
J'ai créé unenouvelle base et ai importé les tables.
Mais... j'ai des tables qui ne passaient pas : celles qui contiennent des
données de type "Date/Heure" au format "heure, abrégé" sous Access :-(
A l'importation, SQL Serveur me les montre du doigt : Erreur INSERT
("Mon_heure", DBTYPE_DBTIMESTAMP), état 6 : dépassement de capacités des
donnéees.
Une piste ? : si je fais "aperçu" au moment de la sélection des tables, il
m'affiche une heure "14:00" sous Access en "2:00:00 PM"

J'ai passé le format de ces champs dans ma table sous SQL Serveur en
"datetime" et... ça passe pour l'importation.
Est-ce toutefois une bonne idée ?

Un peu plus je tente une requête avec un "WHERE date_dun_truc like
'25/12/2003'..." SQL Serveur n'en veux pas :-(
Suis-je obligé de faire "WHERE Day(date_dun_truc)=25 AND
Month(date_dun_truc)=12 AND Year(date_dun_truc)=2003..." ?

Si oui je suis dans une mer.. pas croyable mon application est énorme et
elle est faire pour gérer des plannings, je ne vous raconte pas.

Si vous avez des conseils après m'avoir lu (merci beaucoup pour ça)
n'hésitez pas à me donner vos conseils, m'apporter un peu de votre
expérience !!!

Merci !!!!!!!!!!!

Michel

5 réponses

Avatar
J-Pierre
Bonsoir Michel,

Tu découvres les problèmes de la migration vers SQL.

Pour les tables, le mieux est de les exporter d'Access vers SQL, de contrôler ce que l'assistant a généré, de corriger, il a parfois
des choix surprenants. Tu supprimes toutes les données dans les tables SQL, tu rajoutes les clés, index, contraintes, tout le barda,
et tu importes avec DTS, cette fois-çi, il n'importera que les données sur des tables corrigées. C'est un peu long, mais ça vaut la
peine si tu veux partir sur de bonnes bases, si j'ose dire....

Pour les champs heures abrégées, SQL ne reconait pas, soit tu transformes en date/heure, soit en caractères "hh:mm" , ça dépend de
l'appli, et de ce que tu préfères.

Pour la sélection sur les dates, utilises le format 'YYYY/MM/DD'.
Mieux, utilise le format ISO 'YYYYMMDD'.

La manipulation des dates est très différente avec access et SQL mais on s'habitue très bien.

Pour les formulaires et états, n'essaie pas d'utiliser l'assistant de conversion, le résultat est épouvantable.

A bientôt, je suppose :-)

J-Pierre

"Michel _newbie" a écrit dans le message de news:
Bonjour,

Je viens d'installer SQL Serveur 2000 en vue de remplacer une base Access.
J'ai créé unenouvelle base et ai importé les tables.
Mais... j'ai des tables qui ne passaient pas : celles qui contiennent des
données de type "Date/Heure" au format "heure, abrégé" sous Access :-(
A l'importation, SQL Serveur me les montre du doigt : Erreur INSERT
("Mon_heure", DBTYPE_DBTIMESTAMP), état 6 : dépassement de capacités des
donnéees.
Une piste ? : si je fais "aperçu" au moment de la sélection des tables, il
m'affiche une heure "14:00" sous Access en "2:00:00 PM"

J'ai passé le format de ces champs dans ma table sous SQL Serveur en
"datetime" et... ça passe pour l'importation.
Est-ce toutefois une bonne idée ?

Un peu plus je tente une requête avec un "WHERE date_dun_truc like
'25/12/2003'..." SQL Serveur n'en veux pas :-(
Suis-je obligé de faire "WHERE Day(date_dun_truc)% AND
Month(date_dun_truc) AND Year(date_dun_truc) 03..." ?

Si oui je suis dans une mer.. pas croyable mon application est énorme et
elle est faire pour gérer des plannings, je ne vous raconte pas.

Si vous avez des conseils après m'avoir lu (merci beaucoup pour ça)
n'hésitez pas à me donner vos conseils, m'apporter un peu de votre
expérience !!!

Merci !!!!!!!!!!!

Michel




Avatar
Michel _newbie
"J-Pierre" a écrit dans le message de
news:eh2%
Bonsoir Michel,

Tu découvres les problèmes de la migration vers SQL.


Oui :-)

Pour la sélection sur les dates, utilises le format 'YYYY/MM/DD'.
Mieux, utilise le format ISO 'YYYYMMDD'.

La manipulation des dates est très différente avec access et SQL mais on
s'habitue très bien.


Pour les formulaires et états, n'essaie pas d'utiliser l'assistant de
conversion, le résultat est épouvantable.


A bientôt, je suppose :-)


Oui et merci beaucoup Jean-Pierre, surtout pour m'avoir appris le format ISO
'YYYMMDD'.
Je te fais part ici de mes premières questions en essayant de faire tourner
mon code avec SQL Serveur.

Je récupère des mois, jours et années d'un peu de partout dans mon code ASP,
il faut que je teste avant de construire cette chaîne pour rajouter un "0"
si le jour ou le mois est inférieur à 10.
Parce que "20031225" il comprend mais "2003121" non, c'est logique.

J'avais :

date_sql = nJour&"/"&nMois&"/"&nAnnee

et maintenant :

date_sql = nAnnee
if (nMois < 10) then
date_sql = date_sql&"0"&nMois
else
date_sql = date_sql&nMois
end if
if (nJour < 10) then
date_sql = date_sql&"0"&nJour
else
date_sql = date_sql&nJour
end if

J'ai écris cela très (trop) rapidement, mais j'imagine qu'il y a mieux à
faire ??


Et un peu plus loin dans mon code, la commande :

DateDiff("d",Date(),date_sql)

ne fonctionne bien sûr plus. Au lieu d'avoir une chaîne pour la date
temporaire, il m'en faut deux : une pour SQL Serveur et une autre pour le
code ASP ?



Une autre question qui me viens à l'esprit : quelle est la meilleure syntaxe
à utiliser dans une requête qui doit me retourner toues les enregistrements
correspondant à un mois et une année ?
"...WHERE Month(date_en_base) = Mois_donne AND Year(date_en_base) Annee_Donnee..." ??

J'essai de regrouper toutes les meilleures choses à faire avant de retaper
tout mon code, mais, pour changer je suis pressé par le temps.

Merci encore

Michel

Avatar
J-Pierre
Bonjour Michel,

Pour le format ISO, il est surtout utile si tu développes un projet Access ADP, car YYYY/MM/DD qui marche avec Access 2000/SQL ne
marche pas avec Access XP/SQL. Mais ce format n'est reconnu que par SQL server et utilisable seulement dans tes requêtes SQL.

Dans ce cas, le plus simple est une fonction:

Function ConvDateISO(ByVal Wdate As Date)
ConvDateISO = Year(Wdate) & Format(Month(Wdate), "00") & Format(Day(Wdate), "00")
End Function

Et ta requête:
WHERE maDate = '" & ConvDateIso(monChampDate) & "'"

Sinon, avec du code ASP, tu peux très bien utiliser YYYY/MM/DD et une fonction

Public Function ConvDateUS(ByVal Wdate As Date)
ConvDateUS = Year(Wdate) & "/" & Month(Wdate) & "/" & Day(Wdate)
End Function.

Comme ça, tu ne te poses pas de questions avec les paramètres régionaux, tes DateAdd et DateDiff vont toujours fonctionner. Il
faudra que tu fasses encore des essais pour voir le format exact que te retourne SQL. Si tu as des problèmes, reviens.....

J-Pierre

"Michel _newbie" a écrit dans le message de news:%

"J-Pierre" a écrit dans le message de
news:eh2%
Bonsoir Michel,

Tu découvres les problèmes de la migration vers SQL.


Oui :-)

Pour la sélection sur les dates, utilises le format 'YYYY/MM/DD'.
Mieux, utilise le format ISO 'YYYYMMDD'.

La manipulation des dates est très différente avec access et SQL mais on
s'habitue très bien.


Pour les formulaires et états, n'essaie pas d'utiliser l'assistant de
conversion, le résultat est épouvantable.


A bientôt, je suppose :-)


Oui et merci beaucoup Jean-Pierre, surtout pour m'avoir appris le format ISO
'YYYMMDD'.
Je te fais part ici de mes premières questions en essayant de faire tourner
mon code avec SQL Serveur.

Je récupère des mois, jours et années d'un peu de partout dans mon code ASP,
il faut que je teste avant de construire cette chaîne pour rajouter un "0"
si le jour ou le mois est inférieur à 10.
Parce que "20031225" il comprend mais "2003121" non, c'est logique.

J'avais :

date_sql = nJour&"/"&nMois&"/"&nAnnee

et maintenant :

date_sql = nAnnee
if (nMois < 10) then
date_sql = date_sql&"0"&nMois
else
date_sql = date_sql&nMois
end if
if (nJour < 10) then
date_sql = date_sql&"0"&nJour
else
date_sql = date_sql&nJour
end if

J'ai écris cela très (trop) rapidement, mais j'imagine qu'il y a mieux à
faire ??


Et un peu plus loin dans mon code, la commande :

DateDiff("d",Date(),date_sql)

ne fonctionne bien sûr plus. Au lieu d'avoir une chaîne pour la date
temporaire, il m'en faut deux : une pour SQL Serveur et une autre pour le
code ASP ?



Une autre question qui me viens à l'esprit : quelle est la meilleure syntaxe
à utiliser dans une requête qui doit me retourner toues les enregistrements
correspondant à un mois et une année ?
"...WHERE Month(date_en_base) = Mois_donne AND Year(date_en_base) > Annee_Donnee..." ??

J'essai de regrouper toutes les meilleures choses à faire avant de retaper
tout mon code, mais, pour changer je suis pressé par le temps.

Merci encore

Michel





Avatar
Michel _newbie
"J-Pierre" a écrit dans le message de
news:%23CL4H%
Bonjour Michel,

Pour le format ISO, il est surtout utile si tu développes un projet Access
ADP, car YYYY/MM/DD qui marche avec Access 2000/SQL ne

marche pas avec Access XP/SQL. Mais ce format n'est reconnu que par SQL
server et utilisable seulement dans tes requêtes SQL.


Dans ce cas, le plus simple est une fonction:

Function ConvDateISO(ByVal Wdate As Date)
ConvDateISO = Year(Wdate) & Format(Month(Wdate), "00") &
Format(Day(Wdate), "00")

End Function

Et ta requête:
WHERE maDate = '" & ConvDateIso(monChampDate) & "'"

Sinon, avec du code ASP, tu peux très bien utiliser YYYY/MM/DD et une
fonction


Public Function ConvDateUS(ByVal Wdate As Date)
ConvDateUS = Year(Wdate) & "/" & Month(Wdate) & "/" & Day(Wdate)
End Function.

Comme ça, tu ne te poses pas de questions avec les paramètres régionaux,
tes DateAdd et DateDiff vont toujours fonctionner. Il

faudra que tu fasses encore des essais pour voir le format exact que te
retourne SQL. Si tu as des problèmes, reviens.....


Je reviens donc Jean-Pierre, mais pour te dire que ce n'est pas si

dramatique, j'ai placé justement la date au format long (dans les paramètres
régionaux) à "JJ/MM/AAAA".
Et SQL Serveur à l'air de fortement se reposer sur ce format... et cela
m'arrange plutôt pour l'instant.
J'ai réalisé ma première mesure de temps : une page met 15 secondes à
afficher des données provenant d'Access. En reprenant ces mêmes données sous
SQL Serveur, elle ne mettait plus que 5 secondes... et enfin 3 secondes
après avoir remis les index !
Je sens que je vais bosser pour quelque chose de visible, c'est plutôt
encouragent.

Merci à toi, je reviendrais... qui sait

Michel

Avatar
J-Pierre
Le problème, c'est que tu dépends des paramètres régionaux de chaque utilisateur

J-Pierre

"Michel _newbie" a écrit dans le message de news:uDHy$
"J-Pierre" a écrit dans le message de
news:%23CL4H%

Je reviens donc Jean-Pierre, mais pour te dire que ce n'est pas si

dramatique, j'ai placé justement la date au format long (dans les paramètres
régionaux) à "JJ/MM/AAAA".
Et SQL Serveur à l'air de fortement se reposer sur ce format... et cela
m'arrange plutôt pour l'instant.
J'ai réalisé ma première mesure de temps : une page met 15 secondes à
afficher des données provenant d'Access. En reprenant ces mêmes données sous
SQL Serveur, elle ne mettait plus que 5 secondes... et enfin 3 secondes
après avoir remis les index !
Je sens que je vais bosser pour quelque chose de visible, c'est plutôt
encouragent.

Merci à toi, je reviendrais... qui sait

Michel