Pb de requete SQL sur plusieures tables avec ADO

cs_gi Messages postés 58 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 12 février 2005 - 12 févr. 2005 à 13:48
cs_gi Messages postés 58 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 12 février 2005 - 12 févr. 2005 à 18:10
bonjour,
j'essais sans succes d'effectuer un requette sur plusieures tables d'une base Access 97.

ma requette est la suivante :

SELECT Session.SessionID
FROM Client, Session
WHERE (Client.ClientID = 222 ) And Client.ClientID=Session.ClientID;

Sachant que Cnn est une connection ouverte avec ADO sur ma base, j'execute la requette de la facon suivante :

dim rs as new ADODB.Recordset
dim sql as String ' ma requette sql

rs.CursorLocation=adUseClient
rs.Open sql, Cnn, adOpenDynamic, adLockOptimistic

si j'utilise cette methode avec une requette qui concerne qu'une seule table ça marche. Par contre avec une requette sur plusieures tables j'ai un message d'erreur " ne peut créer le recordset "

merci de votre aide.

Gi

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 févr. 2005 à 14:32
Salut
Normalement, pas de difficulté majeure.
Une erreur souvent commise : Quand tu écrit ta requète dans ta String slq, je suppose que tu passes à la ligne : As-tu pensé à bien garder un espace entre la fin de ligne et la ligne suivante :
sql = "SELECT Session.SessionID " & _
"FROM Client, Session " & _
"WHERE Client.ClientID = 222 " & _
" And Client.ClientID=Session.ClientID"
(espace entre SessionID et le ", entre Session et ", entre 222 et ")
Sinon la requète reconstituée ressemble à ça :
SELECT Session.SessionIDFROM Client, SessionWHERE Client.ClientID = 222And Client.ClientID=Session.ClientID
et les mots étant collés, ils ne sont pas reconnus.

D'autre part, assure toi de la syntaxe exacte (min/maj aussi) du nom des champs de tes tables.

Une autre chose : Si tu fais une première requète et que tu en fais une autre derrière, pense à vider le RecordSet avant de t'en servir à nouveau, avec :
Set rs = Nothing

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
cs_gi Messages postés 58 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 12 février 2005
12 févr. 2005 à 18:05
Jack merci pour ta réponse mais je ne vois pas d'ou peut venir mon probleme.
Voici mon code.
tout est OK si j'utilise la chaine sql1 pour ouvrir mon recordset (requete sur une seule table)
par contre si j'utilise la chaine sql j'ai un message d'erreur m'indiquant que: " la méthode 'Open' de l'objet '_Recordset' a échoué. (Requete sur 2 tables Client et Session )

merci de ton aide.

Public Function TestSql() As ADODB.Recordset


Dim m_baseDeDonnees As String
Dim m_chaineDeConnexion As String
Dim cnn As ADODB.Connection
Dim ClientNo As String
Dim rst As ADODB.Recordset
Dim sql As String
Dim sql1 As String





ClientNo = "429"
m_baseDeDonnees = "C:\Program Files\HIMSA\NOAH System\Database" & "\noah.mdb"


m_chaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_baseDeDonnees & _
";Persist Security Info=False;Jet OLEDB:Database Password=dennyestil"


sql = "Select * From Client, Session WHERE " & _"(Client.ClientNo '" & ClientNo & "') And ( Client.ClientID Session.ClientID)"


sql1 = "Select * From Client WHERE " & _
"(Client.ClientNo = '" & ClientNo & "') "


Set cnn = New ADODB.Connection
cnn.Open m_chaineDeConnexion


Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open sql, cnn, , adLockOptimistic ' adLockReadOnly


Set rst.ActiveConnection = Nothing
cnn.Close
Set cnn = Nothing


Set TestSql = rst


End Function

Gi
0
cs_gi Messages postés 58 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 12 février 2005
12 févr. 2005 à 18:10
Jack merci pour ta réponse mais je ne vois pas d'ou peut venir mon probleme.
Voici mon code.
tout est OK si j'utilise la chaine sql1 pour ouvrir mon recordset (requete sur une seule table)
par contre si j'utilise la chaine sql j'ai un message d'erreur m'indiquant que: " la méthode 'Open' de l'objet '_Recordset' a échoué. (Requete sur 2 tables Client et Session )

merci de ton aide.

Public Function TestSql() As ADODB.Recordset


Dim m_baseDeDonnees As String
Dim m_chaineDeConnexion As String
Dim cnn As ADODB.Connection
Dim ClientNo As String
Dim rst As ADODB.Recordset
Dim sql As String
Dim sql1 As String





ClientNo = "429"
m_baseDeDonnees = "C:\Program Files\HIMSA\NOAH System\Database" & "\noah.mdb"


m_chaineDeConnexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_baseDeDonnees & _
";Persist Security Info=False;Jet OLEDB:Database Password=dennyestil"


sql = "Select * From Client, Session WHERE " & _"(Client.ClientNo '" & ClientNo & "') And ( Client.ClientID Session.ClientID)"


sql1 = "Select * From Client WHERE " & _
"(Client.ClientNo = '" & ClientNo & "') "


Set cnn = New ADODB.Connection
cnn.Open m_chaineDeConnexion


Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open sql, cnn, adOpenForwardOnly, adLockOptimistic
Set rst.ActiveConnection = Nothing
cnn.Close
Set cnn = Nothing


Set TestSql = rst


End Function

Gi
0
Rejoignez-nous