OVH Cloud OVH Cloud

pb de requete

9 réponses
Avatar
steph
boujonr ,
j'ai un petit probleme avec ma requete, je n'y comprend=20
rien, il me donne l'erreur suivant au niveau de=20
l'openrecordset :
erreur d'execution '13': incompatibilit=E9 de type

voici mon code :

Dim resultat As Recordset ' R=E9sultat prendra la valeur=20
de la requette "Recordset" "Set resultat =3D=20
base.OpenRecordset(requete)"
Dim requete As String ' Variable caract=E8re pour la=20
requette SQL
Dim base As Database

Set base =3D CurrentDb ' La variable base r=E9cup=E8re la base=20
de donn=E9e ouverte par strConnection

' Requette SQL g=E9n=E9r=E9e dans ACCESS
requete =3D "SELECT T_User.Nom, T_User.[n=B0 user] FROM=20
T_User "

Set resultat =3D base.OpenRecordset(requete)

resultat.MoveFirst ' Le pointeur se place a la fin de la=20
table

While resultat.EOF =3D False
a.WriteLine ("-> " & resultat.Fields(0).Value)
f =3D groupe1(" ", resultat.Fields(1).Value)
resultat.MoveNext
Wend

9 réponses

Avatar
Fred
Bonjour,

Je vais essayer de répondre à votre problème :

Voici un exemple de code :
'
' --- Déclaration des objets
'
Dim db As database
Dim rs As Recordset
Dim sSQL As String
Dim sID As String
Dim sNOM As String
'
' --- Ouverture de la base
'
Set db = CurrentDb

'
' --- Préparation de la requête SQL
'
sSQL = "select [n° user],[nom] from t_user"

'
' --- On exécute la requête
'
Set rs = db.openrecordset(sSQL)
If Not rs.EOF Then
While Not rs.EOF
'
' --- Lecture de la ligne courante
'
If IsNull(rs.Fields("n° user").Value) = False Then
sID = rs.Fields("n° user").Value
Else
sID = ""
End If
If IsNull(rs.Fields("nom").Value) = False Then
sNOM = rs.Fields("nom").Value
Else
sNOM = ""
End If

'
' --- Traitement de la ligne
'
' Traitement_ligne sID,sNOM

'
' --- Ligne suivante
'
rs.MoveNext
Wend
End If

'
' --- On ferme le recordset
'
rs.Close
Set rs = Nothing

Frédéric

"steph" a écrit dans le message de
news:1e2bc01c4550e$27aed990$
boujonr ,
j'ai un petit probleme avec ma requete, je n'y comprend
rien, il me donne l'erreur suivant au niveau de
l'openrecordset :
erreur d'execution '13': incompatibilité de type

voici mon code :

Dim resultat As Recordset ' Résultat prendra la valeur
de la requette "Recordset" "Set resultat base.OpenRecordset(requete)"
Dim requete As String ' Variable caractère pour la
requette SQL
Dim base As Database

Set base = CurrentDb ' La variable base récupère la base
de donnée ouverte par strConnection

' Requette SQL générée dans ACCESS
requete = "SELECT T_User.Nom, T_User.[n° user] FROM
T_User "

Set resultat = base.OpenRecordset(requete)

resultat.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat.EOF = False
a.WriteLine ("-> " & resultat.Fields(0).Value)
f = groupe1(" ", resultat.Fields(1).Value)
resultat.MoveNext
Wend
Avatar
steph
bonjour, j'ai testé le code mais il me met une erreur de
compilation sur le dim db as database, type non defini.
je suppose qu'il manque une reference mais la quelle ?


-----Message d'origine-----
Bonjour,

Je vais essayer de répondre à votre problème :

Voici un exemple de code :
'
' --- Déclaration des objets
'
Dim db As database
Dim rs As Recordset
Dim sSQL As String
Dim sID As String
Dim sNOM As String
'
' --- Ouverture de la base
'
Set db = CurrentDb

'
' --- Préparation de la requête SQL
'
sSQL = "select [n° user],[nom] from t_user"

'
' --- On exécute la requête
'
Set rs = db.openrecordset(sSQL)
If Not rs.EOF Then
While Not rs.EOF
'
' --- Lecture de la ligne courante
'
If IsNull(rs.Fields("n° user").Value) = False Then
sID = rs.Fields("n° user").Value
Else
sID = ""
End If
If IsNull(rs.Fields("nom").Value) = False Then
sNOM = rs.Fields("nom").Value
Else
sNOM = ""
End If

'
' --- Traitement de la ligne
'
' Traitement_ligne sID,sNOM

'
' --- Ligne suivante
'
rs.MoveNext
Wend
End If

'
' --- On ferme le recordset
'
rs.Close
Set rs = Nothing

Frédéric

"steph" a écrit


dans le message de
news:1e2bc01c4550e$27aed990$
boujonr ,
j'ai un petit probleme avec ma requete, je n'y comprend
rien, il me donne l'erreur suivant au niveau de
l'openrecordset :
erreur d'execution '13': incompatibilité de type

voici mon code :

Dim resultat As Recordset ' Résultat prendra la valeur
de la requette "Recordset" "Set resultat =
base.OpenRecordset(requete)"
Dim requete As String ' Variable caractère pour la
requette SQL
Dim base As Database

Set base = CurrentDb ' La variable base récupère la base
de donnée ouverte par strConnection

' Requette SQL générée dans ACCESS
requete = "SELECT T_User.Nom, T_User.[n° user] FROM
T_User "

Set resultat = base.OpenRecordset(requete)

resultat.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat.EOF = False
a.WriteLine ("-> " & resultat.Fields(0).Value)
f = groupe1(" ", resultat.Fields(1).Value)
resultat.MoveNext
Wend


.



Avatar
Eric
Bonjour,

Soit la référence Microsoft DAO 3.x Object Library soit Microsoft ActiveX
Data Object Library 2.6 ou +

Dans le cas de la 1ere référence, préfixes tes objets par DAO.Database,
DAO.Recordset

A+
Eric

"steph" écrivait news:1f29601c45761
$87cbc860$:

bonjour, j'ai testé le code mais il me met une erreur de
compilation sur le dim db as database, type non defini.
je suppose qu'il manque une reference mais la quelle ?



Avatar
steph
Ok, j'ai modifié ça mais maintenant il me met une "erreur
d'execution '3464' type de données incompatible dans
l'expression du critère" à la ligne de l'openrecordset

???

-----Message d'origine-----
Bonjour,

Soit la référence Microsoft DAO 3.x Object Library soit


Microsoft ActiveX
Data Object Library 2.6 ou +

Dans le cas de la 1ere référence, préfixes tes objets par


DAO.Database,
DAO.Recordset

A+
Eric

"steph" écrivait


news:1f29601c45761
$87cbc860$:

bonjour, j'ai testé le code mais il me met une erreur




de
compilation sur le dim db as database, type non defini.
je suppose qu'il manque une reference mais la quelle ?



.



Avatar
steph
désolé, voici l'intégralité de mon code et l'erreur est
dans la fonction groupe1 au niveau de l'openrecordset

désolé pour le bordel.

Option Compare Database


Global a As Object


Sub list()

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("fichiertest.doc", True)
a.WriteLine ("Liste des groupes par user.")
a.WriteLine ("")



Dim resultat As DAO.Recordset ' Résultat prendra la valeur
de la requette "Recordset" "Set resultat =
base.OpenRecordset(requete)"
Dim requete As String ' Variable caractère pour la
requette SQL
Dim db As DAO.database

Set db = CurrentDb

' Requette SQL générée dans ACCESS
requete = "SELECT T_User.Nom, T_User.[n° user] FROM
T_User "

Set resultat = db.OpenRecordset(requete)

resultat.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat.EOF = False
a.WriteLine ("-> " & resultat.Fields(0).Value)
f = groupe1(" ", resultat.Fields(1).Value)
resultat.MoveNext
Wend

resultat.Close
Set resultat = Nothing
a.Close

End Sub

Function groupe1(tabu As String, num As Integer)

Dim requete1 As String ' Variable caractère pour la
requette SQL
Dim resultat1 As DAO.Recordset
Dim db1 As DAO.database

Set db1 = CurrentDb

' Requette SQL générée dans ACCESS
requete1 = "SELECT T_Groupe.Nom, T_Groupe.[n° groupe] FROM
T_Groupe INNER JOIN A_GU ON T_Groupe.[n° groupe] =
A_GU.ce_G WHERE (((A_GU.ce_U)='" & num & "'))"

' Résultat prend la valeur de la requette
Set resultat1 = db1.OpenRecordset(requete1) ' recordset
est le résultat de recordSource

resultat1.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat1.EOF = False
a.WriteLine (tabu & "-> " & resultat1.Fields(0).Value)
f = groupe2(tabu & " ", resultat1.Fields(1).Value)
resultat1.MoveNext
Wend

resultat1.Close
Set resultat1 = Nothing

End Function

Function groupe2(tabu As String, num As Integer)


Dim requete2 As String ' Variable caractère pour la
requette SQL
Dim resultat2 As DAO.Recordset
Dim db2 As DAO.database

Set db2 = CurrentDb
' Requette SQL générée dans ACCESS
requete2 = "SELECT T_Groupe.Nom, T_Groupe.[n° groupe] FROM
T_Groupe INNER JOIN A_GG ON T_Groupe.[n° groupe] = A_GG.n°
G WHERE (((A_GG.N°Gf)=" & num & "))"
' Résultat prend la valeur de la requette
Set resultat2 = db2.OpenRecordset(requete2) ' recordset
est le résultat de recordSource
resultat.MoveFirst ' Le pointeur se place a la fin de la
table
While resultat2.EOF = False
a.WriteLine (tabu & "-> " & resultat2.Fields(0).Value)
f = groupe2(tabu & " ", resultat2.Fields(1).Value)
resultat2.MoveNext
Wend
resultat2.Close
Set resultat2 = Nothing

End Function
Avatar
Eric
re,
ton erreur est dans le sql.
Dans ta fonction Groupe1 tu passes num as Integer et dans le sql sur ta
clause where tu mets :
WHERE (((A_GU.ce_U)='" & num & "'))"
il faut que tu supprimes les ' qui encadrent la variable num
donc
WHERE (((A_GU.ce_U)=" & num & "))"

A+
Eric



"steph" écrivait news:1ee0b01c45770
$23dc4b90$:

désolé, voici l'intégralité de mon code et l'erreur est
dans la fonction groupe1 au niveau de l'openrecordset

désolé pour le bordel.

Option Compare Database


Global a As Object


Sub list()

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("fichiertest.doc", True)
a.WriteLine ("Liste des groupes par user.")
a.WriteLine ("")



Dim resultat As DAO.Recordset ' Résultat prendra la valeur
de la requette "Recordset" "Set resultat =
base.OpenRecordset(requete)"
Dim requete As String ' Variable caractère pour la
requette SQL
Dim db As DAO.database

Set db = CurrentDb

' Requette SQL générée dans ACCESS
requete = "SELECT T_User.Nom, T_User.[n° user] FROM
T_User "

Set resultat = db.OpenRecordset(requete)

resultat.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat.EOF = False
a.WriteLine ("-> " & resultat.Fields(0).Value)
f = groupe1(" ", resultat.Fields(1).Value)
resultat.MoveNext
Wend

resultat.Close
Set resultat = Nothing
a.Close

End Sub

Function groupe1(tabu As String, num As Integer)

Dim requete1 As String ' Variable caractère pour la
requette SQL
Dim resultat1 As DAO.Recordset
Dim db1 As DAO.database

Set db1 = CurrentDb

' Requette SQL générée dans ACCESS
requete1 = "SELECT T_Groupe.Nom, T_Groupe.[n° groupe] FROM
T_Groupe INNER JOIN A_GU ON T_Groupe.[n° groupe] =
A_GU.ce_G WHERE (((A_GU.ce_U)='" & num & "'))"

' Résultat prend la valeur de la requette
Set resultat1 = db1.OpenRecordset(requete1) ' recordset
est le résultat de recordSource

resultat1.MoveFirst ' Le pointeur se place a la fin de la
table

While resultat1.EOF = False
a.WriteLine (tabu & "-> " & resultat1.Fields(0).Value)
f = groupe2(tabu & " ", resultat1.Fields(1).Value)
resultat1.MoveNext
Wend

resultat1.Close
Set resultat1 = Nothing

End Function

Function groupe2(tabu As String, num As Integer)


Dim requete2 As String ' Variable caractère pour la
requette SQL
Dim resultat2 As DAO.Recordset
Dim db2 As DAO.database

Set db2 = CurrentDb
' Requette SQL générée dans ACCESS
requete2 = "SELECT T_Groupe.Nom, T_Groupe.[n° groupe] FROM
T_Groupe INNER JOIN A_GG ON T_Groupe.[n° groupe] = A_GG.n°
G WHERE (((A_GG.N°Gf)=" & num & "))"
' Résultat prend la valeur de la requette
Set resultat2 = db2.OpenRecordset(requete2) ' recordset
est le résultat de recordSource
resultat.MoveFirst ' Le pointeur se place a la fin de la
table
While resultat2.EOF = False
a.WriteLine (tabu & "-> " & resultat2.Fields(0).Value)
f = groupe2(tabu & " ", resultat2.Fields(1).Value)
resultat2.MoveNext
Wend
resultat2.Close
Set resultat2 = Nothing

End Function




Avatar
merci, mais maintenant j'ai une autre erreur qui
est "erreur d'execution '3061': trop peu de paramètres. 1
attendu." au niveau de l'openrecordset de ma fonction
groupe2.
Avatar
Eric
écrivait news:1f1d301c45779$1d935270
$:

merci, mais maintenant j'ai une autre erreur qui
est "erreur d'execution '3061': trop peu de paramètres. 1
attendu." au niveau de l'openrecordset de ma fonction
groupe2.




Voici ta chaine sql:
' Requette SQL générée dans ACCESS
requete2 = "SELECT T_Groupe.Nom, T_Groupe.[n° groupe] FROM
T_Groupe INNER JOIN A_GG ON T_Groupe.[n° groupe] = A_GG.n°
G WHERE (((A_GG.N°Gf)=" & num & "))"


Personnellement, j'encadrerai de crochets droits les champs :
A_GG.n°G (il y a peut-être un espace entre le symbole ° et le G, pas
visible sur ton post car retour à la ligne)
et le champs :A_GG.N°Gf car ils contiennent un symbole(°) source de
problèmes. A_GG.[n°G] et A_GG.[N°Gf]

Le message que tu donnes est du au fait qu'Access ne reconnait pas un nom
des champs de la requête. Je ne peux pas te donner beaucoup plus d'infos
car je ne connais pas les noms des champs ni leur écriture.
L'erreur n'est pas du aux champs du Select (car idem requête1). Donc a
vérifier les 2 autres :A_GG.n°G (ou A_GG.n° G),A_GG.N°Gf. Y a t il des
espaces ? sont-ils bien orthographiés ?

A+
Eric
Avatar
steph
merci ça marche,
ça devait etre ça.

merci encore