Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Bonjour à tous,
J'ai un formulaire avec un champ date et un bouton pour mettre à jour
ma donnée date dans sa table...
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth =""" & IIf(Nz(NewDataDateBirth) > True, "", NewDataDateBirth) & """ " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Quand le champ dans mon formulaire contient une date, aucun
problème... la date se met à jour, par contre si mon champs formulaire
est vide Access me renvoie un message d'erreur "Erreur d'exécution
3464 - type de données incompatible dans l'expression du critère"
alors que ce champ peut être vide.
J'ai bien compris qu'Access refuse d'insérer Null à mon champ date
(malgré que la propriété du champ "Null interdit : Non")
Dans la partie SET de ma requête, le bât blesse au niveau des "" mais
alors comment faire pour autoriser d'insérer dans mon champ date ===>
rien.
Merci pour votre aide.
A bientôt
Xavier
Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Si je peux m'insinuer dans la conversation, juste pour noter deux
alternatives...
La première, la plus simple, est d'utiliser DoCmd.RunSQL:
DoCmd.RunSQL"UPDATE ... SET ... WHERE PersonID > FORMS!FormPerson01!COMBOBOX"
où on laisse la syntaxe
FORMS!NomDeFormulaire!NomDeControleRetournantUneValeur
à ***l'intérieur*** de la chaîne.
En efft, DoCmd, DXXXX (fonctions domaines), plusieurs propriétés tel
que sources d'enregistrement, ... peuvent résoudre automatiquement
cette syntaxe.
PAR CONTRE, CurrentDb NE LE PEUT PAS.
Seconde solution:
CurrentDb.Execute "UPDATE ... SET ... " & ( " WHERE PersonID =" +
FORMS!FormPerson01!List01.Value)
Ici, la 'magie' est effectuée par l'opérateur de concaténation + :
il propage les null (on ne me regarde pas quand on répète ce fragment
de phrase, là... )
Petite expérimentation dans la fenêtre d'exécution immédiate:
? " Hello " + null + "le monde"
null
? " Hello " & null" & "le monde"
Hello le monde
alors que & ne les propage pas. Donc, de retour à notre cas, si
l'argument est null, la clause WHERE s'élimine toute seule! Noter
l'utilisation de ( ) pour s'assurer d'une syntaxe correcte. On ne
veut pas une chaîne résultante:
"UPDATE ... SET ... WHERE"
ni
"UPDATE ... SET ... WHERE champ="
où la clause WHERE est nettement incomplète. (La première est sans
condition, la seconde ne fournit pas de valeur à laquelle on veut se
comparer).
Évidemment, il faut qu'il s'agisse d'un NULL. Une chaîne n'ayant aucun
caractère ou un zéro n'ont pas le même comportement:
? " Hello " + "" + "le monde"
Hello le monde
Je n'utilise pas de LIST BOX "value", du moins, pas dans ce contexte,
je ne saurais dire si cette bête retourne un NULL ou un vbNullString.
Mais avant de sauter de joie, et d'utiliser aveuglément des + de
concaténation tout partout, il faut aussi noter que + a des
'problèmes':
? 4 + " hello "
( run time error 13)
? 4 & " hello "
4 hello
Il semble que VBA ne sachant si on désire additionner quelque chose ou
concaténer deux chaînes, il suppose qu'on veut une addition. En fait,
roulement de tambours:
? "4" + 5
9
et non pas 45. Merci (teinte d'ironie) aux conversions automatiques
entre types de données, en VBA.
Bref, DoCmd est encore ce qu'il y a de plus simple, sans compter
qu'il sait comment faire pour des dates, des chaînes, des nombres
virgule flottant (point flottant), sans qu'on ait à s'acharner sur
des formats ou des délimiteurs...
Vanderghast, Access MVP
wrote in message
news:
Bonjour,
Merci pour vos réponses mais maintenant j'ai une erreur de syntaxe, je
pense que c'est le "Null" qui pose problème.
Mais j'ai contourné le problème avec une requête qui supprime le
champ :
If NewDataDateBirth = "" Or IsNull(NewDataDateBirth) = True Then
'modify datas
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth = Null " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Merci pour votre aide.
A bientôt
Si je peux m'insinuer dans la conversation, juste pour noter deux
alternatives...
La première, la plus simple, est d'utiliser DoCmd.RunSQL:
DoCmd.RunSQL"UPDATE ... SET ... WHERE PersonID > FORMS!FormPerson01!COMBOBOX"
où on laisse la syntaxe
FORMS!NomDeFormulaire!NomDeControleRetournantUneValeur
à ***l'intérieur*** de la chaîne.
En efft, DoCmd, DXXXX (fonctions domaines), plusieurs propriétés tel
que sources d'enregistrement, ... peuvent résoudre automatiquement
cette syntaxe.
PAR CONTRE, CurrentDb NE LE PEUT PAS.
Seconde solution:
CurrentDb.Execute "UPDATE ... SET ... " & ( " WHERE PersonID =" +
FORMS!FormPerson01!List01.Value)
Ici, la 'magie' est effectuée par l'opérateur de concaténation + :
il propage les null (on ne me regarde pas quand on répète ce fragment
de phrase, là... )
Petite expérimentation dans la fenêtre d'exécution immédiate:
? " Hello " + null + "le monde"
null
? " Hello " & null" & "le monde"
Hello le monde
alors que & ne les propage pas. Donc, de retour à notre cas, si
l'argument est null, la clause WHERE s'élimine toute seule! Noter
l'utilisation de ( ) pour s'assurer d'une syntaxe correcte. On ne
veut pas une chaîne résultante:
"UPDATE ... SET ... WHERE"
ni
"UPDATE ... SET ... WHERE champ="
où la clause WHERE est nettement incomplète. (La première est sans
condition, la seconde ne fournit pas de valeur à laquelle on veut se
comparer).
Évidemment, il faut qu'il s'agisse d'un NULL. Une chaîne n'ayant aucun
caractère ou un zéro n'ont pas le même comportement:
? " Hello " + "" + "le monde"
Hello le monde
Je n'utilise pas de LIST BOX "value", du moins, pas dans ce contexte,
je ne saurais dire si cette bête retourne un NULL ou un vbNullString.
Mais avant de sauter de joie, et d'utiliser aveuglément des + de
concaténation tout partout, il faut aussi noter que + a des
'problèmes':
? 4 + " hello "
( run time error 13)
? 4 & " hello "
4 hello
Il semble que VBA ne sachant si on désire additionner quelque chose ou
concaténer deux chaînes, il suppose qu'on veut une addition. En fait,
roulement de tambours:
? "4" + 5
9
et non pas 45. Merci (teinte d'ironie) aux conversions automatiques
entre types de données, en VBA.
Bref, DoCmd est encore ce qu'il y a de plus simple, sans compter
qu'il sait comment faire pour des dates, des chaînes, des nombres
virgule flottant (point flottant), sans qu'on ait à s'acharner sur
des formats ou des délimiteurs...
Vanderghast, Access MVP
<kdonu@hotmail.com> wrote in message
news:6f371c39-357f-4629-b4cd-bd7e20c8ca57@o11g2000yql.googlegroups.com...
Bonjour,
Merci pour vos réponses mais maintenant j'ai une erreur de syntaxe, je
pense que c'est le "Null" qui pose problème.
Mais j'ai contourné le problème avec une requête qui supprime le
champ :
If NewDataDateBirth = "" Or IsNull(NewDataDateBirth) = True Then
'modify datas
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth = Null " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Merci pour votre aide.
A bientôt
Si je peux m'insinuer dans la conversation, juste pour noter deux
alternatives...
La première, la plus simple, est d'utiliser DoCmd.RunSQL:
DoCmd.RunSQL"UPDATE ... SET ... WHERE PersonID > FORMS!FormPerson01!COMBOBOX"
où on laisse la syntaxe
FORMS!NomDeFormulaire!NomDeControleRetournantUneValeur
à ***l'intérieur*** de la chaîne.
En efft, DoCmd, DXXXX (fonctions domaines), plusieurs propriétés tel
que sources d'enregistrement, ... peuvent résoudre automatiquement
cette syntaxe.
PAR CONTRE, CurrentDb NE LE PEUT PAS.
Seconde solution:
CurrentDb.Execute "UPDATE ... SET ... " & ( " WHERE PersonID =" +
FORMS!FormPerson01!List01.Value)
Ici, la 'magie' est effectuée par l'opérateur de concaténation + :
il propage les null (on ne me regarde pas quand on répète ce fragment
de phrase, là... )
Petite expérimentation dans la fenêtre d'exécution immédiate:
? " Hello " + null + "le monde"
null
? " Hello " & null" & "le monde"
Hello le monde
alors que & ne les propage pas. Donc, de retour à notre cas, si
l'argument est null, la clause WHERE s'élimine toute seule! Noter
l'utilisation de ( ) pour s'assurer d'une syntaxe correcte. On ne
veut pas une chaîne résultante:
"UPDATE ... SET ... WHERE"
ni
"UPDATE ... SET ... WHERE champ="
où la clause WHERE est nettement incomplète. (La première est sans
condition, la seconde ne fournit pas de valeur à laquelle on veut se
comparer).
Évidemment, il faut qu'il s'agisse d'un NULL. Une chaîne n'ayant aucun
caractère ou un zéro n'ont pas le même comportement:
? " Hello " + "" + "le monde"
Hello le monde
Je n'utilise pas de LIST BOX "value", du moins, pas dans ce contexte,
je ne saurais dire si cette bête retourne un NULL ou un vbNullString.
Mais avant de sauter de joie, et d'utiliser aveuglément des + de
concaténation tout partout, il faut aussi noter que + a des
'problèmes':
? 4 + " hello "
( run time error 13)
? 4 & " hello "
4 hello
Il semble que VBA ne sachant si on désire additionner quelque chose ou
concaténer deux chaînes, il suppose qu'on veut une addition. En fait,
roulement de tambours:
? "4" + 5
9
et non pas 45. Merci (teinte d'ironie) aux conversions automatiques
entre types de données, en VBA.
Bref, DoCmd est encore ce qu'il y a de plus simple, sans compter
qu'il sait comment faire pour des dates, des chaînes, des nombres
virgule flottant (point flottant), sans qu'on ait à s'acharner sur
des formats ou des délimiteurs...
Vanderghast, Access MVP
wrote in message
news:
Bonjour,
Merci pour vos réponses mais maintenant j'ai une erreur de syntaxe, je
pense que c'est le "Null" qui pose problème.
Mais j'ai contourné le problème avec une requête qui supprime le
champ :
If NewDataDateBirth = "" Or IsNull(NewDataDateBirth) = True Then
'modify datas
strSQL = "UPDATE TablePerson " & _
"SET PersonDateBirth = Null " & _
" WHERE PersonId=" & Forms!FormPerson01!List01.Value
CurrentDb.Execute strSQL, dbFailOnError
Merci pour votre aide.
A bientôt
Bonjour Pierre,
Pour la 1ère remarque, pas de problème.
Par contre, j'ai besoin de lumières, car bossant moins souvent sur
Access, pour la suite.
Le posteur construit sa chaîne SQL dans la procédure Click().
Soit NewDataDateBirth un contrôle ZdT indépendant au format Date
et strSQL="UPDATE TablePerson SET PersonDateBirth =" &
NewDataDateBirth ...
- Si ce contrôle(NewDataDateBirth) n'est pas renseigné, il est Null
mais la construction de la chaîne SQL va retourner :
Update TablePerson Set PersonDateBirth= Where ...
- Si ce contrôle contient une date (28/03/2009), la chaîne SQL que
j'obtiens est :
Update TablePerson Set PersonDateBirth(/03/2009 WHERE ... et dans la
table le champ PersonDateBirth (champ de type Date) reçoit la valeur
31/12/1899.
- Si je mets ton instruction, alors le paramètre n'est pas passé.
Où ai-je faux ?
3stone a écrit :Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Bonjour Pierre,
Pour la 1ère remarque, pas de problème.
Par contre, j'ai besoin de lumières, car bossant moins souvent sur
Access, pour la suite.
Le posteur construit sa chaîne SQL dans la procédure Click().
Soit NewDataDateBirth un contrôle ZdT indépendant au format Date
et strSQL="UPDATE TablePerson SET PersonDateBirth =" &
NewDataDateBirth ...
- Si ce contrôle(NewDataDateBirth) n'est pas renseigné, il est Null
mais la construction de la chaîne SQL va retourner :
Update TablePerson Set PersonDateBirth= Where ...
- Si ce contrôle contient une date (28/03/2009), la chaîne SQL que
j'obtiens est :
Update TablePerson Set PersonDateBirth(/03/2009 WHERE ... et dans la
table le champ PersonDateBirth (champ de type Date) reçoit la valeur
31/12/1899.
- Si je mets ton instruction, alors le paramètre n'est pas passé.
Où ai-je faux ?
3stone a écrit :
Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Bonjour Pierre,
Pour la 1ère remarque, pas de problème.
Par contre, j'ai besoin de lumières, car bossant moins souvent sur
Access, pour la suite.
Le posteur construit sa chaîne SQL dans la procédure Click().
Soit NewDataDateBirth un contrôle ZdT indépendant au format Date
et strSQL="UPDATE TablePerson SET PersonDateBirth =" &
NewDataDateBirth ...
- Si ce contrôle(NewDataDateBirth) n'est pas renseigné, il est Null
mais la construction de la chaîne SQL va retourner :
Update TablePerson Set PersonDateBirth= Where ...
- Si ce contrôle contient une date (28/03/2009), la chaîne SQL que
j'obtiens est :
Update TablePerson Set PersonDateBirth(/03/2009 WHERE ... et dans la
table le champ PersonDateBirth (champ de type Date) reçoit la valeur
31/12/1899.
- Si je mets ton instruction, alors le paramètre n'est pas passé.
Où ai-je faux ?
3stone a écrit :Salut,
Ne pas confondre NULL et un chaine vide "" !
Puisque ta table autorise le NULL pour ce champ date,
le test est superflu...
Update TablePerson Set PersonDateBirth = NewDateBirth Where...
Le formatage est également superflu, pour autant que NewDateBith
ait comme source un champ au format date ou, si indépendant, la zone
de texte soit au format date.
Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP
Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP
Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP
Ah, et il vient encore de disparaître... il devait y en avoir un entre la
paire de parenthèses. Quelqu'un a une idée sur ce qui se passe? J'utilise OE.
"Michel Walsh" wrote in message
news:Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP
Ah, et il vient encore de disparaître... il devait y en avoir un entre la
paire de parenthèses. Quelqu'un a une idée sur ce qui se passe? J'utilise OE.
"Michel Walsh" <vanderghast@VirusAreFunnierThanSpam> wrote in message
news:OmzQ5nrtJHA.4068@TK2MSFTNGP03.phx.gbl...
Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP
Ah, et il vient encore de disparaître... il devait y en avoir un entre la
paire de parenthèses. Quelqu'un a une idée sur ce qui se passe? J'utilise OE.
"Michel Walsh" wrote in message
news:Par contre, je ne comprend pas pourquoi mes caractès plus ( ) ont tous
disparus, rendant le texte ... inintelligible... :-(
Vanderghast, Access MVP