Replace

Le
Chevrot
Bonjour,

Je dispose d'une table "Coordonnées" contenant une ligne et trois champs:
Nom: champ texte
Date début: champ date format abrégé xx/xx/xxxxx
Date fin: champ date format abrégé

Je dispose d'une table "Table" et d'une requête création "Requête" (sur la
table "Table") comportant plusieurs champs dont un champ "Nom" et un champ
"Date"

Mon objectif est de créer une requête "Requête 2" dans laquelle le champ
Table.Nom prendra la valeur Coordonnées.Nom et Table.Date sera comprise entre
Coordonnées.Date début et Coordonnées.date fin.

j'ai rpéparé la procédure suivante

Public Sub CréanceIrrecouvrable()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Coordonnées", dbOpenDynaset)
Dim db As DAO.Database
Dim SQL As String
Dim rq As DAO.QueryDef
Set db = CurrentDb()
rs.MoveLast
rs.MoveFirst

While Not rs.EOF

'Pour enlever le ; à la fin de l'instruction SQL
SQL = Left(db.QueryDefs("Table requête").SQL,
InStrRev(db.QueryDefs("Table requête").SQL, ";") - 1)
SQL = SQL & "WHERE [Table].[Nom] Like " & Replace(rs![Nom], ",", ".")
Set rq = db.CreateQueryDef("Table requête 2", SQL)
rs.MoveNext
Wend
Set rq = Nothing
Set db = Nothing
rs.Close
Set rs = Nothing
'Rafraichissement de la fenêtre de la base de données
RefreshDatabaseWindow
End Sub

La requête Table requête 2 est effectivement créée, mais le champ nom dans
la Table.requête 2 est encadré de [ et ] au lieu de " et ".

Par ailleurs ,comment introduire la date dans la ligne?

Merci de votre aide

Alain
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #6346961
Salut,

"Chevrot"
| Je dispose d'une table "Coordonnées" contenant une ligne et trois champs:
| Nom: champ texte
| Date début: champ date format abrégé xx/xx/xxxxx
| Date fin: champ date format abrégé
|
| Je dispose d'une table "Table" et d'une requête création "Requête" (sur la
| table "Table") comportant plusieurs champs dont un champ "Nom" et un champ
| "Date"
|
| Mon objectif est de créer une requête "Requête 2" dans laquelle le champ
| Table.Nom prendra la valeur Coordonnées.Nom et Table.Date sera comprise entre
| Coordonnées.Date début et Coordonnées.date fin.
|
| j'ai rpéparé la procédure suivante
|
| Public Sub CréanceIrrecouvrable()
| Dim rs As DAO.Recordset
| Set rs = CurrentDb.OpenRecordset("Coordonnées", dbOpenDynaset)
| Dim db As DAO.Database
| Dim SQL As String
| Dim rq As DAO.QueryDef
| Set db = CurrentDb()


| rs.MoveLast
| rs.MoveFirst


Pourquoi traverser tout le recordset ?
Les deux sont superflu ici !!
De plus, faire un MoveLast sans test EOF donnerait une
erreur en cas ou le recordset serait vide !

|
| While Not rs.EOF <== ???
|
| 'Pour enlever le ; à la fin de l'instruction SQL
| SQL = Left(db.QueryDefs("Table requête").SQL,
| InStrRev(db.QueryDefs("Table requête").SQL, ";") - 1)
| SQL = SQL & "WHERE [Table].[Nom] Like " & Replace(rs![Nom], ",", ".")
| Set rq = db.CreateQueryDef("Table requête 2", SQL)


| rs.MoveNext <== ???
| Wend


Explique pourquoi, tu boucles sur ton recordset, alors que tu ne fait
que créer une requête ?

Ton

Replace(rs![Nom],",",".")

étant de type texte doit être entouré de guillemets simples.
Ce qui donne :

SQL = SQL & " WHERE [Table].[Nom] Like '" & Replace(rs![Nom], ",", ".") & "'"

avec un espace devant le 'Where' pour le problème de concaténation.

De plus, ce qui est totalement à proscrire de ton code, ce sont les noms utilisés!!!

SQL As string --- à remplacer par sSQL ou strSQL
Nom --- à remplacer par NomVille ou NomClient
et appeler une table "Table" ou une requête "Requête" c'est vraiment chercher
à se tirer un balle dans le pied ;-(

Un peu de lecture semble opportune:
http://support.microsoft.com/kb/286335/fr?spid%09&sida8
http://support.microsoft.com/?scid=kb%3Ben-us%3B826763&x&y=9

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Chevrot
Le #6346951
Merci de tes conseils; j'ai introduit les guillements et cela marche bien;
reste néanmoins le problème de la syntaxe pour Replace avec les dates:

Merci par avance de ton conseil.

Alain



Salut,

"Chevrot"
| Je dispose d'une table "Coordonnées" contenant une ligne et trois champs:
| Nom: champ texte
| Date début: champ date format abrégé xx/xx/xxxxx
| Date fin: champ date format abrégé
|
| Je dispose d'une table "Table" et d'une requête création "Requête" (sur la
| table "Table") comportant plusieurs champs dont un champ "Nom" et un champ
| "Date"
|
| Mon objectif est de créer une requête "Requête 2" dans laquelle le champ
| Table.Nom prendra la valeur Coordonnées.Nom et Table.Date sera comprise entre
| Coordonnées.Date début et Coordonnées.date fin.
|
| j'ai rpéparé la procédure suivante
|
| Public Sub CréanceIrrecouvrable()
| Dim rs As DAO.Recordset
| Set rs = CurrentDb.OpenRecordset("Coordonnées", dbOpenDynaset)
| Dim db As DAO.Database
| Dim SQL As String
| Dim rq As DAO.QueryDef
| Set db = CurrentDb()


| rs.MoveLast
| rs.MoveFirst


Pourquoi traverser tout le recordset ?
Les deux sont superflu ici !!
De plus, faire un MoveLast sans test EOF donnerait une
erreur en cas ou le recordset serait vide !

|
| While Not rs.EOF <== ???
|
| 'Pour enlever le ; à la fin de l'instruction SQL
| SQL = Left(db.QueryDefs("Table requête").SQL,
| InStrRev(db.QueryDefs("Table requête").SQL, ";") - 1)
| SQL = SQL & "WHERE [Table].[Nom] Like " & Replace(rs![Nom], ",", ".")
| Set rq = db.CreateQueryDef("Table requête 2", SQL)


| rs.MoveNext <== ???
| Wend


Explique pourquoi, tu boucles sur ton recordset, alors que tu ne fait
que créer une requête ?

Ton

Replace(rs![Nom],",",".")

étant de type texte doit être entouré de guillemets simples.
Ce qui donne :

SQL = SQL & " WHERE [Table].[Nom] Like '" & Replace(rs![Nom], ",", ".") & "'"

avec un espace devant le 'Where' pour le problème de concaténation.

De plus, ce qui est totalement à proscrire de ton code, ce sont les noms utilisés!!!

SQL As string --- à remplacer par sSQL ou strSQL
Nom --- à remplacer par NomVille ou NomClient
et appeler une table "Table" ou une requête "Requête" c'est vraiment chercher
à se tirer un balle dans le pied ;-(

Un peu de lecture semble opportune:
http://support.microsoft.com/kb/286335/fr?spid%09&sida8
http://support.microsoft.com/?scid=kb%3Ben-us%3B826763&x&y=9

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




3stone
Le #6346841
Salut,

"Chevrot"
| reste néanmoins le problème de la syntaxe pour Replace avec les dates:


il te faudra, sur le formulaire appelant, deux zones de texte pour
saisir les dates concernées... disons: txtDebut et txtFin

il reste à compléter...

sSQL = sSQL & " WHERE [Table].[Nom] Like '" & Replace(rs![Nom], ",", ".") & "'"

sSql = sSql & " And [DateDebut ]>=" & Format(txtDebut,"#mm-dd-yyyy#") _
& " And [DateFin] <=" & Format(txtFin,"#mm-dd-yyyy#")



PS:
Les dates doivent être présentées au format US et entouré de "#",
d'où l'utilisation de la fonction de formatage de la date...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Publicité
Poster une réponse
Anonyme