OVH Cloud OVH Cloud

Replace or not replace

11 réponses
Avatar
Arpat
Bonjour

J'ai créé la requete suivante dans Acces qui utilise la fonction REPLACE :

UPDATE table SET table.monchamps =
replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps LIKE
'1;*'

par contre quand je la lance depuis VB, j'ai le message :

Erreur d'execution
Fonction 'Replace' non définie dans l'expression

je précise que je suis en ADO ... je sais pas si ca a son importance

D"avance merci


Arpat

10 réponses

1 2
Avatar
Driss HANIB
il faut que tu fasses tes remplacement avant de créer ta requête..
C'est Jet qui tente d'exécuter ta fonction replace

Driss


"Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de
news:4357c27b$0$21703$
Bonjour

J'ai créé la requete suivante dans Acces qui utilise la fonction REPLACE :

UPDATE table SET table.monchamps > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps


LIKE
'1;*'

par contre quand je la lance depuis VB, j'ai le message :

Erreur d'execution
Fonction 'Replace' non définie dans l'expression

je précise que je suis en ADO ... je sais pas si ca a son importance

D"avance merci


Arpat




Avatar
Jean-Marc
Hello,

> UPDATE table SET table.monchamps > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps
LIKE
> '1;*'



Tu as 2 choix:
- soit tu fais tes modifs à la main:
- 1 recordset avec juste la clause where, et les replace à la main
- Soit tu fais effectivement en SQL, comme tu souhaites le faire,
mais il te faut alors trouver le moyen d'exprimer ton "replace" VB en SQL.
Et ça, c'est dépendant de ta DB.

Car comme le dit Driss, le "replace" est une fonction VB et pas une
fonction SQL. Mais des solutions existent, dépendant de ta DB.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Driss HANIB" a écrit dans le message de
news:
il faut que tu fasses tes remplacement avant de créer ta requête..
C'est Jet qui tente d'exécuter ta fonction replace

Driss


"Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de
news:4357c27b$0$21703$
> Bonjour
>
> J'ai créé la requete suivante dans Acces qui utilise la fonction REPLACE


:
>
> UPDATE table SET table.monchamps > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps
LIKE
> '1;*'
>
> par contre quand je la lance depuis VB, j'ai le message :
>
> Erreur d'execution
> Fonction 'Replace' non définie dans l'expression
>
> je précise que je suis en ADO ... je sais pas si ca a son importance
>
> D"avance merci
>
>
> Arpat
>
>




Avatar
Arpat
Merci pour vos réponses

.... comme je ne suis pas un dieu du SQL pour cree mes requetes, j'utilise
Access en mode creation puis je passe en mode SQL pour copier la requete et
la coller dans mon prog VB.
la fonction replace que je connais bien dans VB existe aussi dans SQL
puisque la requete 'pête' bien dans Access ....j'ai d'ailleur été surpris de
la trouver car en mode creation avec l'assistant, on appel la fonction
'remplacer' et elle est traduite par 'replace' en SQL ....

Pour repondre à Driss, je souhaite bien que ce soit Jet qui fasse le
remplacement sur une serie d'enregistrement sélectionné et non un repace
dans ma requete de mon prog VB ... de plus le tout est entre guillemet genre
:
StrSQL = "UPDATE .... table.monchamps replace([table]![monchamps],'1;001;001';'1:002') ....."
et j'execute StrSQL

Bon ... je crois qu'un petit Select avec un boucle while not x.eof et un
Update au milieu fera l'affaire ... mais j'aime bien comprendre ... et c'est
la premiere fois que VB n'arrive pas à executer une requete qui pourtant
s'execute dans Access

Cordialement

ARPAT


"Jean-Marc" a écrit dans le message de
news:4357e27f$0$31176$
Hello,

> > UPDATE table SET table.monchamps > > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps
> LIKE
> > '1;*'

Tu as 2 choix:
- soit tu fais tes modifs à la main:
- 1 recordset avec juste la clause where, et les replace à la main
- Soit tu fais effectivement en SQL, comme tu souhaites le faire,
mais il te faut alors trouver le moyen d'exprimer ton "replace" VB en SQL.
Et ça, c'est dépendant de ta DB.

Car comme le dit Driss, le "replace" est une fonction VB et pas une
fonction SQL. Mais des solutions existent, dépendant de ta DB.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Driss HANIB" a écrit dans le message de
news:
> il faut que tu fasses tes remplacement avant de créer ta requête..
> C'est Jet qui tente d'exécuter ta fonction replace
>
> Driss
>
>
> "Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de
> news:4357c27b$0$21703$
> > Bonjour
> >
> > J'ai créé la requete suivante dans Acces qui utilise la fonction


REPLACE
:
> >
> > UPDATE table SET table.monchamps > > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps
> LIKE
> > '1;*'
> >
> > par contre quand je la lance depuis VB, j'ai le message :
> >
> > Erreur d'execution
> > Fonction 'Replace' non définie dans l'expression
> >
> > je précise que je suis en ADO ... je sais pas si ca a son importance
> >
> > D"avance merci
> >
> >
> > Arpat
> >
> >
>
>



Avatar
FL
Bonjour,

Faire un SELECT avec une boucle peut poser des problèmes de performances sur
des tables volumineuses.
En sachant que la fonction Replace est une fonction VB, tu peux la
concaténer à ta chaîne pour créer ton ordre SQL :
StrSQL = "UPDATE .... table.monchamps = " &
replace(table.monchamps,"1;001;001","1:002") & "WHERE ..."

Espérant que ça aidera


"Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de news:
43589479$0$21708$
Merci pour vos réponses

.... comme je ne suis pas un dieu du SQL pour cree mes requetes, j'utilise
Access en mode creation puis je passe en mode SQL pour copier la requete


et
la coller dans mon prog VB.
la fonction replace que je connais bien dans VB existe aussi dans SQL
puisque la requete 'pête' bien dans Access ....j'ai d'ailleur été surpris


de
la trouver car en mode creation avec l'assistant, on appel la fonction
'remplacer' et elle est traduite par 'replace' en SQL ....

Pour repondre à Driss, je souhaite bien que ce soit Jet qui fasse le
remplacement sur une serie d'enregistrement sélectionné et non un repace
dans ma requete de mon prog VB ... de plus le tout est entre guillemet


genre
:
StrSQL = "UPDATE .... table.monchamps > replace([table]![monchamps],'1;001;001';'1:002') ....."
et j'execute StrSQL

Bon ... je crois qu'un petit Select avec un boucle while not x.eof et un
Update au milieu fera l'affaire ... mais j'aime bien comprendre ... et


c'est
la premiere fois que VB n'arrive pas à executer une requete qui pourtant
s'execute dans Access

Cordialement

ARPAT


"Jean-Marc" a écrit dans le message de
news:4357e27f$0$31176$
> Hello,
>
> > > UPDATE table SET table.monchamps > > > > replace([table]![monchamps],'1;001;001';'1:002') WHERE


table.monchamps
> > LIKE
> > > '1;*'
>
> Tu as 2 choix:
> - soit tu fais tes modifs à la main:
> - 1 recordset avec juste la clause where, et les replace à la main
> - Soit tu fais effectivement en SQL, comme tu souhaites le faire,
> mais il te faut alors trouver le moyen d'exprimer ton "replace" VB en


SQL.
> Et ça, c'est dépendant de ta DB.
>
> Car comme le dit Driss, le "replace" est une fonction VB et pas une
> fonction SQL. Mais des solutions existent, dépendant de ta DB.
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
>
> "Driss HANIB" a écrit dans le message de
> news:
> > il faut que tu fasses tes remplacement avant de créer ta requête..
> > C'est Jet qui tente d'exécuter ta fonction replace
> >
> > Driss
> >
> >
> > "Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de
> > news:4357c27b$0$21703$
> > > Bonjour
> > >
> > > J'ai créé la requete suivante dans Acces qui utilise la fonction
REPLACE
> :
> > >
> > > UPDATE table SET table.monchamps > > > > replace([table]![monchamps],'1;001;001';'1:002') WHERE


table.monchamps
> > LIKE
> > > '1;*'
> > >
> > > par contre quand je la lance depuis VB, j'ai le message :
> > >
> > > Erreur d'execution
> > > Fonction 'Replace' non définie dans l'expression
> > >
> > > je précise que je suis en ADO ... je sais pas si ca a son importance
> > >
> > > D"avance merci
> > >
> > >
> > > Arpat
> > >
> > >
> >
> >
>




Avatar
Gloops
Salut,

En attendant de trouver autre chose ...
As-tu essayé avec une requête enregistrée ?
____________________________________
Arpat a écrit, le 20/10/2005 18:14 :

Bonjour

J'ai créé la requete suivante dans Acces qui utilise la fonction REPLACE :

UPDATE table SET table.monchamps > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps LIKE
'1;*'

par contre quand je la lance depuis VB, j'ai le message :

Erreur d'execution
Fonction 'Replace' non définie dans l'expression

je précise que je suis en ADO ... je sais pas si ca a son importance

D"avance merci


Arpat




Avatar
Arpat
> As-tu essayé avec une requête enregistrée ?


Euh .... ca fait mal ?
pour être plus sérieux, je ne sais pas ce que c'est, ni comment le mettre en
place.
je suis preneur de + d'infos

merci pour l'interet

Arpat

"Gloops" a écrit dans le message de
news:435c807d$0$1749$
Salut,

En attendant de trouver autre chose ...
____________________________________
Arpat a écrit, le 20/10/2005 18:14 :

> Bonjour
>
> J'ai créé la requete suivante dans Acces qui utilise la fonction REPLACE


:
>
> UPDATE table SET table.monchamps > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps


LIKE
> '1;*'
>
> par contre quand je la lance depuis VB, j'ai le message :
>
> Erreur d'execution
> Fonction 'Replace' non définie dans l'expression
>
> je précise que je suis en ADO ... je sais pas si ca a son importance
>
> D"avance merci
>
>
> Arpat
>
>



Avatar
Driss HANIB
tu crées ta requête directement dans ta base access et tu la mets au point
avec éventuellement des paramètres
et tu l'appelle à partir de VB

Driss
"Arpat" <patrick.aranda(suppr)@wanadoo.fr> a écrit dans le message de
news:435f718d$0$20842$
> As-tu essayé avec une requête enregistrée ?
Euh .... ca fait mal ?
pour être plus sérieux, je ne sais pas ce que c'est, ni comment le mettre


en
place.
je suis preneur de + d'infos

merci pour l'interet

Arpat

"Gloops" a écrit dans le message de
news:435c807d$0$1749$
> Salut,
>
> En attendant de trouver autre chose ...
> ____________________________________
> Arpat a écrit, le 20/10/2005 18:14 :
>
> > Bonjour
> >
> > J'ai créé la requete suivante dans Acces qui utilise la fonction


REPLACE
:
> >
> > UPDATE table SET table.monchamps > > > replace([table]![monchamps],'1;001;001';'1:002') WHERE table.monchamps
LIKE
> > '1;*'
> >
> > par contre quand je la lance depuis VB, j'ai le message :
> >
> > Erreur d'execution
> > Fonction 'Replace' non définie dans l'expression
> >
> > je précise que je suis en ADO ... je sais pas si ca a son importance
> >
> > D"avance merci
> >
> >
> > Arpat
> >
> >
>




Avatar
Gloops
Bon, il faut bien avouer que ce n'est pas une solution.
J'ai créé une base avec une requête enregistrée qui fait appel à une
fonction remplace (que j'ai écrite moi-même car Access 95 ne reconnaît
pas Replace).

Eh bien le résultat est exactement celui décrit : à partir d'Access ça
marche, mais à partir de VB j'ai une erreur me disant que la fonction
Remplace n'existe pas.

Est-ce que sur le newsgroup Access on a quelque chose à dire, là-dessus ?

Gloops a écrit, le 24/10/2005 08:34 :
Salut,

En attendant de trouver autre chose ...
As-tu essayé avec une requête enregistrée ?


Avatar
Gloops
En attendant qu'on réussisse à régler cette histoire d'appel de fonction
par SQL, j'ai testé ceci, qui marche (j'ai aussi ouvert la base par DAO,
2.5/3.0).

Il est vrai qu'il y a des chances que ce soit plus lent qu'une requête SQL.

Option Explicit

Public Sub Maj()
Dim DBE As DBEngine
Dim DB As Database
Dim Rs As Recordset
Dim N As Integer
Const strReq = "SELECT * FROM [Table] WHERE monchamps Like '1;*'"

Set DBE = New DBEngine

Set DB = DBE.OpenDatabase("bd4.mdb")
Set Rs = DB.OpenRecordset(strReq)
If Rs.RecordCount > 0 Then
For N = 0 To Rs.Fields.Count - 1
Debug.Print Rs.Fields(N).Name, Rs.Fields(N)
Rs.Edit
Rs!monchamps = Replace(Rs!monchamps, "1;001;001", "1:002")
Rs.Update
Next
End If
Rs.Close
DB.Close
Set DB = Nothing
Set Rs = Nothing
Set DBE = Nothing
End Sub
Avatar
Gloops
Oops, j'ai fait un peu vite, voilà une boucle qui n'a pas lieu d'être.

Il aurait mieux valu écrire

If Not Rs.Recordcount = 0
While Not Rs.EOF
Rs.Edit
Rs!monchamps = Replace(Rs!monchamps, "1;001;001", "1:002")
Rs.Update
Rs.MoveNext
Wend
End If

Il est vrai que j'ai testé avec un seul enregistrement, raison pour
laquelle je n'ai vu l'erreur qu'en relisant le code.

______________________________________
Gloops a écrit, le 01/11/2005 11:35 :

For N = 0 To Rs.Fields.Count - 1
Debug.Print Rs.Fields(N).Name, Rs.Fields(N)
Rs.Edit
Rs!monchamps = Replace(Rs!monchamps, "1;001;001", "1:002")
Rs.Update
Next


1 2