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