Problème de date dans une base de données

Une autre problématique dès que l’on travaille sur plusieurs bases (Access, Sql Server, Oracle) et que l’on est confronté à des langues différentes au niveau des serveurs… Même le LCID = 1036 (qui permet d’imposer la langue utilisée par le serveur web) ne vient pas à bout de certaines architectures ! En plus la syntaxe SQL de la langue n’est pas identique selon les bases. Donc pour éviter de voir le 7 mai se transformer en 5 juillet, voilà une solution, l’utilisation du format ODBC compatible avec les trois bases citées :

L’idée est de transformer un format de date jj/mm/aaaa ou mm/dd/yyyy en un format identique : {d ‘aaaa-mm-jj} {d ‘yyyy-mm-dd} ou un format comportant les heures : {ts ‘yyyy-mm-dd hh:mm:ss’} ou {ts ‘aaaa-mm-jj hh:mm:ss’}

La requête SQL devient  « … WHERE champ > {d ‘2006-08-23} « 


‘****************************************************************************************************
‘ Fonction     : strODBCDate
‘ Objet        : Preparer l’insertion d’une date dans une requete SQL
‘ Entrée       :
‘               – dtmParam : date a traiter
‘ Retour       : chaine a inserer directement dans le code SQL
‘ Sortie       :
‘ Commentaires : le format final est {d ‘aaaa-mm-jj’}
‘                quelle que soit la langue d’installation de la base cible
‘ Exemple      :
‘****************************************************************************************************
Function strODBCDate(ByVal dtmParam)
 Dim strOut
 If IsNull(dtmParam) Or dtmParam= » » Then
  strOut = Null
 Else
  If Not IsDate(dtmParam) Then
   strOut = Null
  Else
   Dim strMonth, strDay
   Dim dtmMonth, dtmDay
   ‘ Traitement du mois si sur un seul chiffre
   dtmMonth = Month(dtmParam)
   If dtmMonth<10 Then
    strMonth = « 0 » & CStr(dtmMonth)
   Else
    strMonth = CStr(dtmMonth)
   End If
   ‘ Traitement du jour si sur un seul chiffre
   dtmDay = Day(dtmParam)
   If dtmDay<10 Then
    strDay = « 0 » & CStr(dtmDay)
   Else
    strDay = CStr(dtmDay)
   End If
   ‘ Creation de la chaine de retour
   strOut = « {d ‘ » & CStr(Year(dtmParam)) & « – » & strMonth & « – » & strDay & « ‘} »
  End If
 End If
 strODBCDate = strOut
End Function


‘=======================================================================================
‘ Fonction     : strODBCDateTime
‘ Objet        : Preparer l’insertion d’une date dans une requete SQL
‘ Entrée       :
‘               – dtmParam : date et heure a traiter
‘ Retour       : chaine a inserer directement dans le code SQL
‘ Sortie       :
‘ Commentaires : le format final est {ts ‘aaaa-mm-jj hh:mm:ss’}
‘                quelle que soit la langue d’installation de la base cible
‘ Exemple      :
‘=======================================================================================
Function strODBCDateTime(ByVal dtmParam)
 Dim strOut
 If IsNull(dtmParam) Or dtmParam= » » Then
  strOut = Null
 Else
  If Not IsDate(dtmParam) Then
   strOut = Null
  Else
   Dim strMonth, strDay
   Dim dtmMonth, dtmDay
   Dim strHour, strMinutes, strSecondes
   strHour =hour(dtmParam)
   strMinutes= minute(dtmParam)
   strSecondes = second(dtmParam)
   ‘ Traitement du mois si sur un seul chiffre
   dtmMonth = Month(dtmParam)
   If dtmMonth<10 Then
    strMonth = « 0 » & CStr(dtmMonth)
   Else
    strMonth = CStr(dtmMonth)
   End If
   ‘ Traitement du jour si sur un seul chiffre
   dtmDay = Day(dtmParam)
   If dtmDay<10 Then
    strDay = « 0 » & CStr(dtmDay)
   Else
    strDay = CStr(dtmDay)
   End If
   If strHour<10 Then
    strHour = « 0 » & CStr(strHour)
   Else
    strHour = CStr(strHour)
   End If
   If strMinutes<10 Then
    strMinutes = « 0 » & CStr(strMinutes)
   Else
    strMinutes = CStr(strMinutes)
   End If
   If strSecondes<10 Then
    strSecondes = « 0 » & CStr(strSecondes)
   Else
    strSecondes = CStr(strSecondes)
   End If
   ‘ Creation de la chaine de retour
   strOut = « {ts ‘ » & CStr(Year(dtmParam)) & « – » & strMonth & « – » & strDay &  » « & strHour & « : »& strMinutes & « : »& strSecondes& »‘} »
  End If
 End If
 strODBCDateTime = strOut
End Function 


 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *