Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ACCESS 2007 : VBA/ADO - Requete SQL

9 réponses
Avatar
FAF
Bonjour

Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
une requête SQL sur une table d'un base Access 2007.

Le résultat de la requête est surprenant. Le résultat pour certains champs
de ma requête devraient être des chaines de caractères seulement la requête
me retourne des nombres. Pour certains autres champs, le résultat est correct
(cad le contenu du champ dans la table de la base Access).

Après étude, la différence entre ces deux types champs. Dans le champ
correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
champ calculé par une requête sur d'autre table.

Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?

Merci pour vos explications et exemples que vous pourriez me fournir.

En attente de votre aide, bonne journée

9 réponses

Avatar
Michel__D
Bonjour,

FAF a écrit :
Bonjour

Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
une requête SQL sur une table d'un base Access 2007.

Le résultat de la requête est surprenant. Le résultat pour certains champs
de ma requête devraient être des chaines de caractères seulement la requête
me retourne des nombres. Pour certains autres champs, le résultat est correct
(cad le contenu du champ dans la table de la base Access).

Après étude, la différence entre ces deux types champs. Dans le champ
correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
champ calculé par une requête sur d'autre table.

Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?

Merci pour vos explications et exemples que vous pourriez me fournir.

En attente de votre aide, bonne journée



Oui, mais encore, avec un peu plus de détail on pourras peut-être
t'aider mais avec seulement les indications
que tu fournis ben c'est pas facile.

Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
correspond pas à ton attente.
Avatar
FAF
Bonjour Michel,

Merci voici le code en question :

' open connection
Set Cnxn = CreateObject("ADODB.Connection")
strCnxn = "Provider=Microsoft.ACE.OLEDB.12.0; Data
Source=C:Database.accdb;Persist Security Infoúlse"

Cnxn.Open strCnxn

' create and open Recordset using object refs
Set rsCustomers = CreateObject("ADODB.Recordset")
strSQLCustomers = "SELECT * FROM Project "

rsCustomers.ActiveConnection = Cnxn
rsCustomers.CursorType = adOpenKeyset
rsCustomers.LockType = 4
rsCustomers.Source = strSQLCustomers
rsCustomers.Open

Do While Not rsCustomers.EOF
MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")
rsCustomers.MoveNext
Loop

Pourriez-vous m'aider ?



"Michel__D" a écrit :

Bonjour,

FAF a écrit :
> Bonjour
>
> Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
> une requête SQL sur une table d'un base Access 2007.
>
> Le résultat de la requête est surprenant. Le résultat pour certains champs
> de ma requête devraient être des chaines de caractères seulement la requête
> me retourne des nombres. Pour certains autres champs, le résultat est correct
> (cad le contenu du champ dans la table de la base Access).
>
> Après étude, la différence entre ces deux types champs. Dans le champ
> correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
> champ calculé par une requête sur d'autre table.
>
> Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
> ? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?
>
> Merci pour vos explications et exemples que vous pourriez me fournir.
>
> En attente de votre aide, bonne journée

Oui, mais encore, avec un peu plus de détail on pourras peut-être
t'aider mais avec seulement les indications
que tu fournis ben c'est pas facile.

Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
correspond pas à ton attente.
.



Avatar
Michel__D
Bonjour,

Bien, maintenant il faut indiquer ce qui ne correspond pas à ton attente
car ce code semble correct.

PS: Le SQL de la requête est "SELECT * FROM Project" ce qui revient à
sélectionner tous les enregistrements de [Project]


FAF a écrit :
Bonjour Michel,

Merci voici le code en question :

' open connection
Set Cnxn = CreateObject("ADODB.Connection")
strCnxn = "Provider=Microsoft.ACE.OLEDB.12.0; Data
Source=C:Database.accdb;Persist Security Infoúlse"

Cnxn.Open strCnxn

' create and open Recordset using object refs
Set rsCustomers = CreateObject("ADODB.Recordset")
strSQLCustomers = "SELECT * FROM Project "

rsCustomers.ActiveConnection = Cnxn
rsCustomers.CursorType = adOpenKeyset
rsCustomers.LockType = 4
rsCustomers.Source = strSQLCustomers
rsCustomers.Open

Do While Not rsCustomers.EOF
MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")
rsCustomers.MoveNext
Loop

Pourriez-vous m'aider ?



"Michel__D" a écrit :


Bonjour,

FAF a écrit :

Bonjour

Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
une requête SQL sur une table d'un base Access 2007.

Le résultat de la requête est surprenant. Le résultat pour certains champs
de ma requête devraient être des chaines de caractères seulement la requête
me retourne des nombres. Pour certains autres champs, le résultat est correct
(cad le contenu du champ dans la table de la base Access).

Après étude, la différence entre ces deux types champs. Dans le champ
correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
champ calculé par une requête sur d'autre table.

Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?

Merci pour vos explications et exemples que vous pourriez me fournir.

En attente de votre aide, bonne journée



Oui, mais encore, avec un peu plus de détail on pourras peut-être
t'aider mais avec seulement les indications
que tu fournis ben c'est pas facile.

Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
correspond pas à ton attente.
.






Avatar
FAF
Bonjour Michel,

Merci pour ton aide. Je confirme la requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines de
caractère.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Les contenus des enregistrements des champs Project et Customer affichent
des caractères. Quand on affiche la table dans Access, les champs sont des
chaines de caractère.

Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.

Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?

Merci

Cordialement,

FAF


"Michel__D" a écrit :

Bonjour,

Bien, maintenant il faut indiquer ce qui ne correspond pas à ton attente
car ce code semble correct.

PS: Le SQL de la requête est "SELECT * FROM Project" ce qui revient à
sélectionner tous les enregistrements de [Project]


FAF a écrit :
> Bonjour Michel,
>
> Merci voici le code en question :
>
> ' open connection
> Set Cnxn = CreateObject("ADODB.Connection")
> strCnxn = "Provider=Microsoft.ACE.OLEDB.12.0; Data
> Source=C:Database.accdb;Persist Security Infoúlse"
>
> Cnxn.Open strCnxn
>
> ' create and open Recordset using object refs
> Set rsCustomers = CreateObject("ADODB.Recordset")
> strSQLCustomers = "SELECT * FROM Project "
>
> rsCustomers.ActiveConnection = Cnxn
> rsCustomers.CursorType = adOpenKeyset
> rsCustomers.LockType = 4
> rsCustomers.Source = strSQLCustomers
> rsCustomers.Open
>
> Do While Not rsCustomers.EOF
> MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")
> rsCustomers.MoveNext
> Loop
>
> Pourriez-vous m'aider ?
>
>
>
> "Michel__D" a écrit :
>
>
>> Bonjour,
>>
>> FAF a écrit :
>>
>>> Bonjour
>>>
>>> Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
>>> une requête SQL sur une table d'un base Access 2007.
>>>
>>> Le résultat de la requête est surprenant. Le résultat pour certains champs
>>> de ma requête devraient être des chaines de caractères seulement la requête
>>> me retourne des nombres. Pour certains autres champs, le résultat est correct
>>> (cad le contenu du champ dans la table de la base Access).
>>>
>>> Après étude, la différence entre ces deux types champs. Dans le champ
>>> correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
>>> champ calculé par une requête sur d'autre table.
>>>
>>> Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
>>> ? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?
>>>
>>> Merci pour vos explications et exemples que vous pourriez me fournir.
>>>
>>> En attente de votre aide, bonne journée
>>>
>> Oui, mais encore, avec un peu plus de détail on pourras peut-être
>> t'aider mais avec seulement les indications
>> que tu fournis ben c'est pas facile.
>>
>> Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
>> correspond pas à ton attente.
>> .
>>
>>
.



Avatar
FAF
Bonjour Michel,

Corrige et précise le précèdent post.

Merci pour ton aide. Je confirme la requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines de
caractère.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Le contenu des enregistrements des champs Project et Customer affichent
des caractères suite a la requête. Quand on affiche la table dans Access,
les champs sont deschaines de caractère.

Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.

Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?

Merci

Cordialement,

FAF


"Michel__D" a écrit :

> Bonjour,
>
> Bien, maintenant il faut indiquer ce qui ne correspond pas à ton attente
> car ce code semble correct.
>
> PS: Le SQL de la requête est "SELECT * FROM Project" ce qui revient à
> sélectionner tous les enregistrements de [Project]
>
>
> FAF a écrit :
> > Bonjour Michel,
> >
> > Merci voici le code en question :
> >
> > ' open connection
> > Set Cnxn = CreateObject("ADODB.Connection")
> > strCnxn = "Provider=Microsoft.ACE.OLEDB.12.0; Data
> > Source=C:Database.accdb;Persist Security Infoúlse"
> >
> > Cnxn.Open strCnxn
> >
> > ' create and open Recordset using object refs
> > Set rsCustomers = CreateObject("ADODB.Recordset")
> > strSQLCustomers = "SELECT * FROM Project "
> >
> > rsCustomers.ActiveConnection = Cnxn
> > rsCustomers.CursorType = adOpenKeyset
> > rsCustomers.LockType = 4
> > rsCustomers.Source = strSQLCustomers
> > rsCustomers.Open
> >
> > Do While Not rsCustomers.EOF
> > MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")
> > rsCustomers.MoveNext
> > Loop
> >
> > Pourriez-vous m'aider ?
> >
> >
> >
> > "Michel__D" a écrit :
> >
> >
> >> Bonjour,
> >>
> >> FAF a écrit :
> >>
> >>> Bonjour
> >>>
> >>> Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
> >>> une requête SQL sur une table d'un base Access 2007.
> >>>
> >>> Le résultat de la requête est surprenant. Le résultat pour certains champs
> >>> de ma requête devraient être des chaines de caractères seulement la requête
> >>> me retourne des nombres. Pour certains autres champs, le résultat est correct
> >>> (cad le contenu du champ dans la table de la base Access).
> >>>
> >>> Après étude, la différence entre ces deux types champs. Dans le champ
> >>> correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
> >>> champ calculé par une requête sur d'autre table.
> >>>
> >>> Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
> >>> ? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?
> >>>
> >>> Merci pour vos explications et exemples que vous pourriez me fournir.
> >>>
> >>> En attente de votre aide, bonne journée
> >>>
> >> Oui, mais encore, avec un peu plus de détail on pourras peut-être
> >> t'aider mais avec seulement les indications
> >> que tu fournis ben c'est pas facile.
> >>
> >> Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
> >> correspond pas à ton attente.
> >> .
> >>
> >>
> .
>


Avatar
FAF
Bonjour Michel,

Corrige et précise le précèdent post.

Merci pour ton aide. Je confirme la requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines de
caractère.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Le contenu des enregistrements des champs Project et Customer affichent
des nombres dans le résultat de la requête. Quand on affiche la table dans
Access, les champs sont des chaines de caractère.

Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.

Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?

Merci

Cordialement,

FAF

"Michel__D" a écrit :

Bonjour,

Bien, maintenant il faut indiquer ce qui ne correspond pas à ton attente
car ce code semble correct.

PS: Le SQL de la requête est "SELECT * FROM Project" ce qui revient à
sélectionner tous les enregistrements de [Project]


FAF a écrit :
> Bonjour Michel,
>
> Merci voici le code en question :
>
> ' open connection
> Set Cnxn = CreateObject("ADODB.Connection")
> strCnxn = "Provider=Microsoft.ACE.OLEDB.12.0; Data
> Source=C:Database.accdb;Persist Security Infoúlse"
>
> Cnxn.Open strCnxn
>
> ' create and open Recordset using object refs
> Set rsCustomers = CreateObject("ADODB.Recordset")
> strSQLCustomers = "SELECT * FROM Project "
>
> rsCustomers.ActiveConnection = Cnxn
> rsCustomers.CursorType = adOpenKeyset
> rsCustomers.LockType = 4
> rsCustomers.Source = strSQLCustomers
> rsCustomers.Open
>
> Do While Not rsCustomers.EOF
> MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")
> rsCustomers.MoveNext
> Loop
>
> Pourriez-vous m'aider ?
>
>
>
> "Michel__D" a écrit :
>
>
>> Bonjour,
>>
>> FAF a écrit :
>>
>>> Bonjour
>>>
>>> Dans une macro (VBA), j'utilise la libraire ADO pour me connecter et faire
>>> une requête SQL sur une table d'un base Access 2007.
>>>
>>> Le résultat de la requête est surprenant. Le résultat pour certains champs
>>> de ma requête devraient être des chaines de caractères seulement la requête
>>> me retourne des nombres. Pour certains autres champs, le résultat est correct
>>> (cad le contenu du champ dans la table de la base Access).
>>>
>>> Après étude, la différence entre ces deux types champs. Dans le champ
>>> correct est une donnée appartenant a la table, dans l'autre, il s'agit d'un
>>> champ calculé par une requête sur d'autre table.
>>>
>>> Pourriez-vous me dire comment faire pour récupérer les valeurs de ces champs
>>> ? Dois-je initialiser des propriétés de la table ? Mettre à jour la table ?
>>>
>>> Merci pour vos explications et exemples que vous pourriez me fournir.
>>>
>>> En attente de votre aide, bonne journée
>>>
>> Oui, mais encore, avec un peu plus de détail on pourras peut-être
>> t'aider mais avec seulement les indications
>> que tu fournis ben c'est pas facile.
>>
>> Donne au moins le SQL de la requête et dis nous ensuite ou cela ne
>> correspond pas à ton attente.
>> .
>>
>>
.



Avatar
Michel__D
Bonjour,

FAF a écrit :
Bonjour Michel,

Merci pour ton aide. Je confirme la requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines de
caractère.




Je rectifie; le résultat pour certains champs sont des nombres et toi tu
désire des chaînes de caractères.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Les contenus des enregistrements des champs Project et Customer affichent
des caractères. Quand on affiche la table dans Access, les champs sont des
chaines de caractère.




Tu peux m'expliquer comment tu visualise le fait que les champs/colonnes
de la table sont des chaînes de caractères.

Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.




Pour être sur de ce que tu raconte il faut regarder le contenu de ces
requêtes intermédiaires et regarder
si elles ne contiennent pas des fonctions de conversions explicites et
il faut aussi regarder le type des
champs des véritables tables originelles.

Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?




Tu peux utiliser une fonction qui va convertir tes nombres en chiffres
(Str, CStr, ...)
ou peux aussi utiliser la fonction Format.

Merci

Cordialement,

FAF


"Michel__D" a écrit :


Bonjour,

Bien, maintenant il faut indiquer ce qui ne correspond pas à ton attente
car ce code semble correct.

PS: Le SQL de la requête est "SELECT * FROM Project" ce qui revient à
sélectionner tous les enregistrements de [Project]




Avatar
FAF
Bonjour,

Mes réponses sont préfixés par >>.

Problème : La requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines
de
caractère.

+ Je rectifie; le résultat pour certains champs sont des nombres et toi tu
+ désire des chaînes de caractères.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Les contenus des enregistrements des champs Project et Customer affichent
des caractères. Quand on affiche la table dans Access, les champs sont des
chaines de caractère.

+ Tu peux m'expliquer comment tu visualise le fait que les champs/colonnes
+ de la table sont des chaînes de caractères.

Premièrement, il y a une erreur dans mon précèdent post. Lors de l'exécution
de la macro, le résultat sont des nombres. Alors que dans la base Access,
quand on édite la table le contenu des champs/colonnes sont des chaines de
caractères.





Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.

+ Pour être sur de ce que tu raconte il faut regarder le contenu de ces
+ requêtes intermédiaires et regarder
+ si elles ne contiennent pas des fonctions de conversions explicites et
+ il faut aussi regarder le type des
+ champs des véritables tables originelles.

La requête retourne une chaine de caractère mais le "Data Type" est Number.
Je ne peux pas modifier le type à cause des relations.
Comment faire pour traduire le nombre en chaine de caractère comme dans la
vue "DataSheet View" qui elle contient le resultat de la requête cad la
chaine de caractère.





Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?

+ Tu peux utiliser une fonction qui va convertir tes nombres en chiffres
+ (Str, CStr, ...)
+ ou peux aussi utiliser la fonction Format.

Ces fonctions ne convertissent pas des nombres vers une chaine de
caractère.





Merci Michel de l'aide que tu m'apportes.

Cordialement,

FAF
Avatar
Michel__D
Bonjour,

FAF a écrit :
Bonjour,

Mes réponses sont préfixés par >>.

Problème : La requête fonctionne correctement. Le
résultat pour certains champs sont des nombres au lieu d'être des chaines
de
caractère.

+ Je rectifie; le résultat pour certains champs sont des nombres et toi tu
+ désire des chaînes de caractères.

MsgBox rsCustomers("Project") & " - " & rsCustomers("Customer")

Les contenus des enregistrements des champs Project et Customer affichent
des caractères. Quand on affiche la table dans Access, les champs sont des
chaines de caractère.

+ Tu peux m'expliquer comment tu visualise le fait que les champs/colonnes
+ de la table sont des chaînes de caractères.


Premièrement, il y a une erreur dans mon précèdent post. Lors de l'exécution
de la macro, le résultat sont des nombres. Alors que dans la base Access,
quand on édite la table le contenu des champs/colonnes sont des chaines de
caractères.






Pour être complet, ces champs de cette table sont les résultats de requête
sur d'autres tables.

+ Pour être sur de ce que tu raconte il faut regarder le contenu de ces
+ requêtes intermédiaires et regarder
+ si elles ne contiennent pas des fonctions de conversions explicites et
+ il faut aussi regarder le type des
+ champs des véritables tables originelles.


La requête retourne une chaine de caractère mais le "Data Type" est Number.
Je ne peux pas modifier le type à cause des relations.
Comment faire pour traduire le nombre en chaine de caractère comme dans la
vue "DataSheet View" qui elle contient le resultat de la requête cad la
chaine de caractère.






Avez-vous des pistes pour obtenir des chaines de caractère au lieu des
nombres ?

+ Tu peux utiliser une fonction qui va convertir tes nombres en chiffres
+ (Str, CStr, ...)
+ ou peux aussi utiliser la fonction Format.


Ces fonctions ne convertissent pas des nombres vers une chaine de
caractère.






Merci Michel de l'aide que tu m'apportes.

Cordialement,

FAF




Bon si tu veux vraiment que l'on t'aide, il va falloir fournir plus de
détails :

1) copie d'écran de la structure des tables des champs incriminés.

2) Le SQL des requêtes intermédiaires.

Ou tu fournis une copie de ta base, par exemple sur cjoint.