OVH Cloud OVH Cloud

Requêtre paramétrée, champ mémo, et paramètre Text

2 réponses
Avatar
Xavier HUE
Bonjour la Communauté.

Win 2000 SP4, Access XP SP3.

Petit problème avec la requête paramétrée suivante:

PARAMETERS PrmDbaRefCod Long,
PrmRefColNom Text ( 255 ),
PrmRefNumOrd Long,
PrmRefPrpValSrc Text;
INSERT INTO TblReferentielComparaison ( DbaRefCod, RefColNom, RefNumOrd,
RefPrpValSrc )
SELECT PrmDbaRefCod AS Expr1,
PrmRefColNom AS Expr2,
PrmRefNumOrd AS Expr6,
PrmRefPrpValSrc AS Expr7;

Dans la table TblReferentielComparaison, le champ PrmRefPrpValSrc est de
type Mémo.

Si je tente d'insérer une chaine alpha (en l'occurrence, une chaine SQL
source d'une requête enregistrée) de plus de 255 caractères par VBA,
j'obtiens l'erreur: Valeur de propriété non valide
Lors de l'erreur, la variable varPrpSrcValeur (Variant) contient plus de
1600 caractères.

Ci-dessous extrait du code:

Dim lngCodeAnalyse As Long
Dim strCodeCollect As String
Dim NumOrdre As Long
Dim varPrpSrcValeur As Variant

...

varPrpSrcValeur = ObjetQuery.SQL 'Contient la chaine SQL d'un QueryDefs

...

Qry.Parameters("PrmDbaRefCod").Value = lngCodeAnalyse
Qry.Parameters("PrmRefColNom").Value = strCodeCollect
Qry.Parameters("PrmRefNumOrd").Value = NumOrdre
Qry.Parameters("PrmRefPrpValSrc").Value = varPrpSrcValeur '<<-- Erreur ici
Qry.Execute

Où est donc mon erreur??

Dans l'aide Access (Référence SQL, Type de données SQL), le type Text sans
définition de longueur est sensé accepté 2,18Go!!
Je dois confusionner quelque part ;-)

D'avance merci pour vos pistes.

Cordialement.
Xavier.

2 réponses

Avatar
Rv
Bonjour,

J'ai déjà eu ce problème et je n'ai su que le contourner en utilisant
ADO plutôt que DAO. Je ne sais pas si cette solution vous conviendra mais
voici quand même un code testé:

Sub test2()
Dim objReq As ADODB.Command
Dim strP As String

strP = "01234567890123456789012345678901234567890123456789" ' 50 car.
strP = strP & strP & strP & strP & strP & strP ' 50 * 6 : 300 car.

Set objReq = New ADODB.Command
objReq.ActiveConnection = CurrentProject.Connection
objReq.CommandType = adCmdStoredProc
objReq.CommandText = "Requête1" ' La requête s'appelle Requête1
objReq.Parameters.Append objReq.CreateParameter("p", adVarChar,
adParamInput, Len(strP), strP) ' LE paramétre s'appelle p
objReq.Execute
Set objReq = Nothing
End Sub

Ne pas oublier la référence à ADO...


A+

Rv

"Xavier HUE" a écrit dans le message
de news:
Bonjour la Communauté.

Win 2000 SP4, Access XP SP3.

Petit problème avec la requête paramétrée suivante:

PARAMETERS PrmDbaRefCod Long,
PrmRefColNom Text ( 255 ),
PrmRefNumOrd Long,
PrmRefPrpValSrc Text;
INSERT INTO TblReferentielComparaison ( DbaRefCod, RefColNom, RefNumOrd,
RefPrpValSrc )
SELECT PrmDbaRefCod AS Expr1,
PrmRefColNom AS Expr2,
PrmRefNumOrd AS Expr6,
PrmRefPrpValSrc AS Expr7;

Dans la table TblReferentielComparaison, le champ PrmRefPrpValSrc est de
type Mémo.

Si je tente d'insérer une chaine alpha (en l'occurrence, une chaine SQL
source d'une requête enregistrée) de plus de 255 caractères par VBA,
j'obtiens l'erreur: Valeur de propriété non valide
Lors de l'erreur, la variable varPrpSrcValeur (Variant) contient plus de
1600 caractères.

Ci-dessous extrait du code:

Dim lngCodeAnalyse As Long
Dim strCodeCollect As String
Dim NumOrdre As Long
Dim varPrpSrcValeur As Variant

...

varPrpSrcValeur = ObjetQuery.SQL 'Contient la chaine SQL d'un QueryDefs

...

Qry.Parameters("PrmDbaRefCod").Value = lngCodeAnalyse
Qry.Parameters("PrmRefColNom").Value = strCodeCollect
Qry.Parameters("PrmRefNumOrd").Value = NumOrdre
Qry.Parameters("PrmRefPrpValSrc").Value = varPrpSrcValeur '<<-- Erreur
ici

Qry.Execute

Où est donc mon erreur??

Dans l'aide Access (Référence SQL, Type de données SQL), le type Text sans
définition de longueur est sensé accepté 2,18Go!!
Je dois confusionner quelque part ;-)

D'avance merci pour vos pistes.

Cordialement.
Xavier.


Avatar
Xavier HUE
Bonjour Rv,

Merci pour l'info.
Je vais donc "contourner" également :-(

Tant qu'à "bricoler", je vais continuer avec DAO et un Recordset.
Je ne me suis pas encore frotté à ADO.

Cordialement.
Xavier.


Bonjour,

J'ai déjà eu ce problème et je n'ai su que le contourner en utilisant
ADO plutôt que DAO. Je ne sais pas si cette solution vous conviendra mais
voici quand même un code testé:

Sub test2()
Dim objReq As ADODB.Command
Dim strP As String

strP = "01234567890123456789012345678901234567890123456789" ' 50 car.
strP = strP & strP & strP & strP & strP & strP ' 50 * 6 : 300 car.

Set objReq = New ADODB.Command
objReq.ActiveConnection = CurrentProject.Connection
objReq.CommandType = adCmdStoredProc
objReq.CommandText = "Requête1" ' La requête s'appelle Requête1
objReq.Parameters.Append objReq.CreateParameter("p", adVarChar,
adParamInput, Len(strP), strP) ' LE paramétre s'appelle p
objReq.Execute
Set objReq = Nothing
End Sub

Ne pas oublier la référence à ADO...


A+

Rv

"Xavier HUE" a écrit dans le message
de news:
Bonjour la Communauté.

Win 2000 SP4, Access XP SP3.

Petit problème avec la requête paramétrée suivante:

PARAMETERS PrmDbaRefCod Long,
PrmRefColNom Text ( 255 ),
PrmRefNumOrd Long,
PrmRefPrpValSrc Text;
INSERT INTO TblReferentielComparaison ( DbaRefCod, RefColNom, RefNumOrd,
RefPrpValSrc )
SELECT PrmDbaRefCod AS Expr1,
PrmRefColNom AS Expr2,
PrmRefNumOrd AS Expr6,
PrmRefPrpValSrc AS Expr7;

Dans la table TblReferentielComparaison, le champ PrmRefPrpValSrc est de
type Mémo.

Si je tente d'insérer une chaine alpha (en l'occurrence, une chaine SQL
source d'une requête enregistrée) de plus de 255 caractères par VBA,
j'obtiens l'erreur: Valeur de propriété non valide
Lors de l'erreur, la variable varPrpSrcValeur (Variant) contient plus de
1600 caractères.

Ci-dessous extrait du code:

Dim lngCodeAnalyse As Long
Dim strCodeCollect As String
Dim NumOrdre As Long
Dim varPrpSrcValeur As Variant

...

varPrpSrcValeur = ObjetQuery.SQL 'Contient la chaine SQL d'un QueryDefs

...

Qry.Parameters("PrmDbaRefCod").Value = lngCodeAnalyse
Qry.Parameters("PrmRefColNom").Value = strCodeCollect
Qry.Parameters("PrmRefNumOrd").Value = NumOrdre
Qry.Parameters("PrmRefPrpValSrc").Value = varPrpSrcValeur '<<-- Erreur
ici

Qry.Execute

Où est donc mon erreur??

Dans l'aide Access (Référence SQL, Type de données SQL), le type Text sans
définition de longueur est sensé accepté 2,18Go!!
Je dois confusionner quelque part ;-)

D'avance merci pour vos pistes.

Cordialement.
Xavier.