OVH Cloud OVH Cloud

projet ADP et format de date

8 réponses
Avatar
J-Pierre
Bonjour tout le monde,

Par code VBA, j'ajoute des lignes dans une table. Avec un SQL server US, tout se passe bien. Avec un SQL serveur français, le
traitement des dates produit une erreur:

"La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors des limites des valeurs de date et
d'heure., -2147217913,22007".

L'erreur se produit au moment où j'utilise la méthode UPDATE.
cnn.Errors.Count reste à zéro.

J'ai déjà eu ce type de problème que j'ai résolu en utilisant le format ISO, mais dans ce cas, ce format n'est pas reconnu par
Access. J'ai essayé de convertir explicitement au format US, français, etc..... rien n'y fait.....

Voilà le code et merci d'avance

J-Pierre

-------------------------------------------
Dim jjjTab() 'Le tableau est rempli correctement autre part
Dim strgSQL As String

strgSQL = "SELECT Planning_en_cours.* FROM Planning_en_cours " & _
"WHERE sequence = 0;"
rs2.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rs2.AddNew

rs2!sequence = CInt(Me.Wsequence)
rs2!no_projet = rs1!no_projet
rs2!DAT_01 = jjjTab(1)
rs2!DAT_02 = jjjTab(2)

'Avec une tonne de calculs........

cnn.Errors.Clear
On Error Resume Next

rs2.Update

If cnn.Errors.Count > 0 Then
MsgBox cnn.Errors(0).Description & "," & cnn.Errors(0).Number & "," & _
cnn.Errors(0).SQLState
End If

On Error GoTo 0
rs2.Close
----------------------------------

8 réponses

Avatar
J-Pierre
Je voulais dire......

L'erreur se produit au moment où j'utilise la méthode UPDATE.
cnn.Errors.Count NE reste PAS à zéro.
Avatar
VUILLERMET Jacques
Peu importe si SQL Server est US ou FR.

Tout dépend du language associé au login ("connexion" en français).
Passe-le en US (via Enterprise Manager) ou utilise SET LANGUAGE pour chaque
session.

Et vérifie ce que le loubard d'Access te fais par le Générateur de profils,
il est capable de tout !

Jacques.


"J-Pierre" a écrit dans le message de
news: #o$
Bonjour tout le monde,

Par code VBA, j'ajoute des lignes dans une table. Avec un SQL server US,
tout se passe bien. Avec un SQL serveur français, le

traitement des dates produit une erreur:

"La conversion d'un type de données CHAR en type DATETIME a donné une
valeur hors des limites des valeurs de date et

d'heure., -2147217913,22007".

L'erreur se produit au moment où j'utilise la méthode UPDATE.
cnn.Errors.Count reste à zéro.

J'ai déjà eu ce type de problème que j'ai résolu en utilisant le format
ISO, mais dans ce cas, ce format n'est pas reconnu par

Access. J'ai essayé de convertir explicitement au format US, français,
etc..... rien n'y fait.....


Voilà le code et merci d'avance

J-Pierre

-------------------------------------------
Dim jjjTab() 'Le tableau est rempli correctement autre part
Dim strgSQL As String

strgSQL = "SELECT Planning_en_cours.* FROM Planning_en_cours " & _
"WHERE sequence = 0;"
rs2.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rs2.AddNew

rs2!sequence = CInt(Me.Wsequence)
rs2!no_projet = rs1!no_projet
rs2!DAT_01 = jjjTab(1)
rs2!DAT_02 = jjjTab(2)

'Avec une tonne de calculs........

cnn.Errors.Clear
On Error Resume Next

rs2.Update

If cnn.Errors.Count > 0 Then
MsgBox cnn.Errors(0).Description & "," & cnn.Errors(0).Number &
"," & _

cnn.Errors(0).SQLState
End If

On Error GoTo 0
rs2.Close
----------------------------------




Avatar
J-Pierre
Salut Jacques,

Ben si, US ou FR, avec Access, ça importe, puisqu'il en tient compte alors que théoriquement, ça ne devrait influencer que
l'affichage...:-))))

La solution se trouve dans cette direction, j'ai fait un "set language anglais" et un restaure à la langue d'origine (français), ça
marche. Maintenant, je dois adapter, car je préfère travailler avec un setting US, sauf cas particulier.

En fait, le problème ne se manifeste que si on bidouille dans un recordsSet (rst!.......), apparemment, Access génère une requête
SQL de mise à jour en fonction du language associé au lieu de la générer toujours au format US. Pour le 15 décembre, il passe
15/12/03 à SQL, qui ne trouve pas le 15ème mois de l'année. On est pas loin du bug.... Le reste du temps, par exemple proc
cataloguées avec paramètres date, Access travaille correctement.

Merci :-)

J-Pierre

"VUILLERMET Jacques" a écrit dans le message de news:

Peu importe si SQL Server est US ou FR.

Tout dépend du language associé au login ("connexion" en français).
Passe-le en US (via Enterprise Manager) ou utilise SET LANGUAGE pour chaque
session.

Et vérifie ce que le loubard d'Access te fais par le Générateur de profils,
il est capable de tout !

Jacques.


"J-Pierre" a écrit dans le message de
news: #o$
Bonjour tout le monde,

Par code VBA, j'ajoute des lignes dans une table. Avec un SQL server US,
tout se passe bien. Avec un SQL serveur français, le

traitement des dates produit une erreur:

"La conversion d'un type de données CHAR en type DATETIME a donné une
valeur hors des limites des valeurs de date et

d'heure., -2147217913,22007".

L'erreur se produit au moment où j'utilise la méthode UPDATE.
cnn.Errors.Count reste à zéro.

J'ai déjà eu ce type de problème que j'ai résolu en utilisant le format
ISO, mais dans ce cas, ce format n'est pas reconnu par

Access. J'ai essayé de convertir explicitement au format US, français,
etc..... rien n'y fait.....


Voilà le code et merci d'avance

J-Pierre

-------------------------------------------
Dim jjjTab() 'Le tableau est rempli correctement autre part
Dim strgSQL As String

strgSQL = "SELECT Planning_en_cours.* FROM Planning_en_cours " & _
"WHERE sequence = 0;"
rs2.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rs2.AddNew

rs2!sequence = CInt(Me.Wsequence)
rs2!no_projet = rs1!no_projet
rs2!DAT_01 = jjjTab(1)
rs2!DAT_02 = jjjTab(2)

'Avec une tonne de calculs........

cnn.Errors.Clear
On Error Resume Next

rs2.Update

If cnn.Errors.Count > 0 Then
MsgBox cnn.Errors(0).Description & "," & cnn.Errors(0).Number &
"," & _

cnn.Errors(0).SQLState
End If

On Error GoTo 0
rs2.Close
----------------------------------








Avatar
J-Pierre
Jacques,

C'est bien là le problème avec Access, c'est qu'il tient compte du set language SQL pour construire les requêtes UPDATE (et sans
doute INSERT et DELETE), alors que ce paramètre n'influence que la présentation des données.

Bref, tu as réglé le probléme, si je bidouille un RecordSet, je change la langue et la remets après, que demander de plus ?

Ha oui, j'ai la flemme d'aller dans ton autre post, il me semble que ton problème de trigger (résolu) est peut-être révélateur d'un
problème de design dans ton formulaire. Si ça t'intéresse, on continue par mail, sinon, laisse tomber.

Tu sais quoi ? Il y a eu exactement 5 allumés dans le monde entier francophone qui utilisent ADP + SQL serveur, toi, Gafish, moi,
les deux autres se sont suicidés depuis longtemps....

Merci pour le document, je lirai ça avec attention !!!!!!!

J-Pierre

"VUILLERMET Jacques" a écrit dans le message de news:%
Il faut comprendre que pour SQL Server la gestion des dates est différente
en insertion/update et en lecture (je suis plus spécialiste de SQL Server
que de Access, donc j'ai plus la vision "serveur").

Ci-joint un document que je me suis rédigé un jour où je me suis dit : "je
ne quitterai pas mon bureau avant d'avoir compris" !

a+
Jacques.



Avatar
J-Pierre
Excellent, ton document sur le format des dates, j'ai appris quelque chose, merci.................
Avatar
VUILLERMET Jacques
C'est bien là le problème avec Access, c'est qu'il tient compte du set
language SQL pour construire les requêtes UPDATE (et sans

doute INSERT et DELETE), alors que ce paramètre n'influence que la
présentation des données.


C'est plus SQL Server qui tient compte du SET LANGUAGE pour lire la requête
qu'Access pour la construire.

Ha oui, j'ai la flemme d'aller dans ton autre post, il me semble que ton
problème de trigger (résolu) est peut-être révélateur d'un

problème de design dans ton formulaire. Si ça t'intéresse, on continue par
mail, sinon, laisse tomber.


Pas de pb dans le formulaire, juste un pb T-SQL. Je ne suis pas un habitué
des triggers.

Merci.

Jacques.


"J-Pierre" a écrit dans le message de
news: #
Jacques,

C'est bien là le problème avec Access, c'est qu'il tient compte du set
language SQL pour construire les requêtes UPDATE (et sans

doute INSERT et DELETE), alors que ce paramètre n'influence que la
présentation des données.


Bref, tu as réglé le probléme, si je bidouille un RecordSet, je change la
langue et la remets après, que demander de plus ?


Ha oui, j'ai la flemme d'aller dans ton autre post, il me semble que ton
problème de trigger (résolu) est peut-être révélateur d'un

problème de design dans ton formulaire. Si ça t'intéresse, on continue par
mail, sinon, laisse tomber.


Tu sais quoi ? Il y a eu exactement 5 allumés dans le monde entier
francophone qui utilisent ADP + SQL serveur, toi, Gafish, moi,

les deux autres se sont suicidés depuis longtemps....

Merci pour le document, je lirai ça avec attention !!!!!!!

J-Pierre

"VUILLERMET Jacques" a écrit dans le message de
news:%

Il faut comprendre que pour SQL Server la gestion des dates est
différente


en insertion/update et en lecture (je suis plus spécialiste de SQL
Server


que de Access, donc j'ai plus la vision "serveur").

Ci-joint un document que je me suis rédigé un jour où je me suis dit :
"je


ne quitterai pas mon bureau avant d'avoir compris" !

a+
Jacques.







Avatar
J-Pierre
Un dernier point, il me semble que pour ce que tu veux faire, un trigger est superflu, une valeur par défaut irait aussi bien.

J-Pierre
Avatar
VUILLERMET Jacques
La valeur par défaut n'est utilisée par le serveur QUE si le client n'a pas
fourni de valeur.
Or, dans mon cas, le client (Access ADP) fourni une valeur : Null. Le
mécanisme de valeur par défaut n'est donc jamais appelé.

Le trigger permet alors de MODIFIER la valeur fournie en 0.

Jacques.

"J-Pierre" a écrit dans le message de
news: uI5xN#
Un dernier point, il me semble que pour ce que tu veux faire, un trigger
est superflu, une valeur par défaut irait aussi bien.


J-Pierre