Aller au contenu

[RESOLU] VBScript et SQL - Formatage de la date


ggbce

Messages recommandés

Bonjour,

J'ai créé un petit script en VBS que j'exécute au login des PC afin de tracer l'accès des usagers (fournisseurs) et les inscrire dans une BDD SQL. Ça fonctionne super bien !!! Par contre, j'ai un soucis au niveau de mon champ de date pour le triage. J'ai plusieurs serveurs qui sont en anglais (US) et d'autres en français (Canada).

Lorsqu'une activité est générée depuis un serveur en anglais la date se retrouve inscrite comme ceci: 8/24/2011 4:01:04 PM

Lorsqu'une activité est générée depuis un serveur en français (Canada) la date se retrouve inscrite comme ceci: 2011-08-17 10:53:13

Je sais que le format de date collecté par VBScript provient des paramètres régionaux de Windows. Par contre, je dois trouver un moyen de "transformer" la date afin qu'en bout de ligne ce qui est inscrit dans ma BDD SQL soit sur le même format.

Voici ma requête dans VBScript pour récupérer les valeurs de la session:

SqlConnexion.Execute "INSERT INTO dbo.fournisseurs(Username, DomainName, ComputerName, EventTime) VALUES ('" & WshNetwork.UserName & "','" & WshNetwork.UserDomain & "','" & WshNetwork.ComputerName & "','" & Now & "')"

J'utilise tout simplement la commande "Now" qui récupère le temps en cours. Est-ce possible de convertir le temps récupéré avec Now avec quelque chose comme cdate() pour définir l'ordre aaaa-mm-jj 24:00 au-lieu de mm/dd/yyyy 12:00 ???

Merci

Lien vers le commentaire
Partager sur d’autres sites

C'est une commande en PHP ce que tu viens de me dire...

J'ai trouvé en partie comment fixer mon problème... mais pas complètement et cette solution alourdit énormément le codage pour en arriver à une solution.

Je peux utiliser valeur par valeur (jour, mois ,année, heure, minute et secondes) et rassembler le tout en une chaîne... mais encore là le problème de VBScript lorsqu'il rencontre une valeur comme par exemple midi et huit secondes, il n'affichera pas 12:00:08... mais plutôt 12:00:8. C'est la même chose avec les jours et mois de l'année (août donne 8 et non 08). Et lorsque vient le temps de vouloir faire un tri dans SQL ça fonctionne plus.

wscript.echo "Ma Date: " & Year(date) & "-" & Month(date) & "-" & Day(date) & " " & Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)

Exemple d'ordre avec cette méthode:

2011-1-1

2011-1-12

2011-1-2

2011-1-24

2011-12-24

2011-8-25

Au-lieu de:

2011-01-01

2011-01-02

2011-01-12

2011-01-24

2011-08-25

2011-12-24

Existe-t-il un moyen de valider la longueur d'une chaîne et si elle ne correspond pas, d'y ajouter un caractère en première position ? Exemple: 8 -> 08

Lien vers le commentaire
Partager sur d’autres sites

Bon finalement, j'ai pu "forger" une date comme je le veux... mais c'est tout de même lourd, n'empêche que ça fonctionne.

Voici le résultat pour les intéressés:

eMonth = Month(Now)eDay = Day(Now)eHour = Hour(Now)eMinute = Minute(Now)eSecond = Second(Now)chkMonth = Len(eMonth)chkDay = Len(eDay)chkHour = Len(eHour)chkMinute = Len(eMinute)chkSecond = Len(eSecond)If chkMonth < 2 Then eMonth = "0" & eMonthIf chkDay < 2 Then eDay = "0" & eDayIf chkHour < 2 Then eHour = "0" & eHourIf chkMinute < 2 Then eMinute = "0" & eMinuteIf chkSecond < 2 Then eSecond = "0" & eSecondeDate = Year(Now) & "-" & eMonth & "-" & eDay & " " & eHour & ":" & eMinute & ":" & eSecondwscript.echo eDate
Lien vers le commentaire
Partager sur d’autres sites

Je connais pas VB, mais le problème pour moi, c'est que tu convertis ta date en chaîne.

Une base de données sait gérer les dates. Il faudrait plutôt que tu fasses une table avec plusieurs colonnes (une pour chaque paramètre que tu concatènes) et mettre une colonne de type date pour la date.

De cette manière, la date reste au format date tout le long et il n'y a pas de souci de conversion en chaîne de caractères.

Lien vers le commentaire
Partager sur d’autres sites

Je ne vois pas dans les messages le schéma de sa base de données. Sans doute le champ "EventTime" est-il déjà de type DATETIME ?

Une solutions alternative à celle de ggbce est de convertir la date en chaîne de caractères au moment de la lecture dans la base de données, à l'aide d'une méthode genre DATE_FORMAT. Après, je ne parierais pas que cette méthode soit du SQL normalisé, donc suivant le moteur de base de données utilisé elle pourrait avoir un nom différent, ou ne pas exister.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...