ACCES, Recordset et requête SQL
Résolu/Fermé
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
-
25 nov. 2008 à 10:32
ashtheking Messages postés 223 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 7 avril 2009 - 2 mars 2009 à 08:59
ashtheking Messages postés 223 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 7 avril 2009 - 2 mars 2009 à 08:59
A voir également:
- ACCES, Recordset et requête SQL
- Acces rapide - Guide
- Accès refusé - Guide
- Pourquoi google me bloque l'accès de certain sites ? - Guide
- Clé d'accès google - Accueil - Guide confidentialité
- Blob sql ✓ - Forum Webmastering
8 réponses
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
25 nov. 2008 à 10:34
25 nov. 2008 à 10:34
Private Sub EXL_Click()
Dim rs As New Recordset
Dim sql As String
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] = [Forms]![FRM_EXCEL]![annee].Caption"
sql = sql & " ORDER BY [plante].[nom_plante_latin];"
rs.ActiveConnection = CurrentProject.Connection
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Source = sql
rs.Open EN GENERAL C'EST ICI QUE CA BLOQUE
Dim i As Long
i = 0
While Not rs.EOF SINON CA CONSIDERE QUE C'EST UN RS VIDE ET CA VA VERS LE WEND
MsgBox rs![nom_plante_latin]
i = i + 1
rs.MoveNext
Wend
End Sub
Dim rs As New Recordset
Dim sql As String
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] = [Forms]![FRM_EXCEL]![annee].Caption"
sql = sql & " ORDER BY [plante].[nom_plante_latin];"
rs.ActiveConnection = CurrentProject.Connection
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Source = sql
rs.Open EN GENERAL C'EST ICI QUE CA BLOQUE
Dim i As Long
i = 0
While Not rs.EOF SINON CA CONSIDERE QUE C'EST UN RS VIDE ET CA VA VERS LE WEND
MsgBox rs![nom_plante_latin]
i = i + 1
rs.MoveNext
Wend
End Sub
Hello!
est-il possible de voir la requête prise en compte par rs.source ? est-elle entière ou déjà tronquée ?
est-il possible de mettre en place des
if err.number <> 0 then msgbox err.description
après les instructions essentielles du traitement de ta requête ?
est-il possible de voir la requête prise en compte par rs.source ? est-elle entière ou déjà tronquée ?
est-il possible de mettre en place des
if err.number <> 0 then msgbox err.description
après les instructions essentielles du traitement de ta requête ?
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
25 nov. 2008 à 10:58
25 nov. 2008 à 10:58
Salut, merci de ta réponse rapide,
la msgbox d'erreur affiche "Aucune valeur donnée pour un ou plusieurs des paramètres requis" à rs.open
Si dans le WHERE de la requête, je sors [Forms]![FRM_EXCEL]![annee].caption des guillemets pour faire une concaténation ( =" & [Forms]![FRM_EXCEL]![annee].caption), le script s'execute jusqu'au WHILE NOT.EOF passe à la msgbox d'erreur et n'affiche rien
La source tronquée est :
"SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo] FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible].[num_plante]) ON [sous_lot].[num_ss_lot]=
J'ai beau essayé de passer en contournant, j'ai toujours un problème quelque part.
C'est frustrant !
la msgbox d'erreur affiche "Aucune valeur donnée pour un ou plusieurs des paramètres requis" à rs.open
Si dans le WHERE de la requête, je sors [Forms]![FRM_EXCEL]![annee].caption des guillemets pour faire une concaténation ( =" & [Forms]![FRM_EXCEL]![annee].caption), le script s'execute jusqu'au WHILE NOT.EOF passe à la msgbox d'erreur et n'affiche rien
La source tronquée est :
"SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo] FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible].[num_plante]) ON [sous_lot].[num_ss_lot]=
J'ai beau essayé de passer en contournant, j'ai toujours un problème quelque part.
C'est frustrant !
Ca va t'énerver...
j'ai collé ta requête tronquée dans un éditeur de texte... le texte fait 256 car !!! soit la taille maxi d'une chaine des époques reculées ;-)
=> la propriété source de ton recordset est limité à 256 car (ça fait un peu foutage de g....)
donc tu as très certainement une autre méthode utilisable pour transmettre ta requête au moteur... mais je suis bien incapable de t'aider car je ne connais rien à Access.
1. Est-ce que par hasard, les chaines dans ton pgm seraient pas limitées à 256 car... genre je travaille en octets alors que tout le monde préfère l'unicode depuis 10ans.
2. Est-ce que la requete tronquée que tu affiches vient de la propriété source du recordset ou est-ce la chaine calculée ?
2bis si juste avant rs.source = sql tu glisses un msgbox len(sql), aurais-tu un affichage "256"
=> oui, la nature des chaines que tu utilises qui te bride
=> non, c'est access qui limite les chaines et il va te falloir trouver l'option ou l'instruction pour utiliser des chaines vastes (les 4Gb dont tu parlais initialement).
Sur ce, je te laisse car je vais me coucher. bon courage !
j'ai collé ta requête tronquée dans un éditeur de texte... le texte fait 256 car !!! soit la taille maxi d'une chaine des époques reculées ;-)
=> la propriété source de ton recordset est limité à 256 car (ça fait un peu foutage de g....)
donc tu as très certainement une autre méthode utilisable pour transmettre ta requête au moteur... mais je suis bien incapable de t'aider car je ne connais rien à Access.
1. Est-ce que par hasard, les chaines dans ton pgm seraient pas limitées à 256 car... genre je travaille en octets alors que tout le monde préfère l'unicode depuis 10ans.
2. Est-ce que la requete tronquée que tu affiches vient de la propriété source du recordset ou est-ce la chaine calculée ?
2bis si juste avant rs.source = sql tu glisses un msgbox len(sql), aurais-tu un affichage "256"
=> oui, la nature des chaines que tu utilises qui te bride
=> non, c'est access qui limite les chaines et il va te falloir trouver l'option ou l'instruction pour utiliser des chaines vastes (les 4Gb dont tu parlais initialement).
Sur ce, je te laisse car je vais me coucher. bon courage !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
blux
Messages postés
26490
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 316
25 nov. 2008 à 11:28
25 nov. 2008 à 11:28
Salut,
un recordset se définit avec une instruction set, généralement.
Je te suggère donc la syntaxe suivante :
A+ Blux
un recordset se définit avec une instruction set, généralement.
Je te suggère donc la syntaxe suivante :
Set Rs = CurrentDb.OpenRecordset(sql, dbOpenTable, dbReadOnly) while not rs.EOF...--
A+ Blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
25 nov. 2008 à 11:37
25 nov. 2008 à 11:37
Merci Blux mais...
"Argument non valide" au niveau du SET
Mais d'un point de vue général, je ne me rappelle pas avoir réussi à définir un NEW RECORDSET avec un SET
"Argument non valide" au niveau du SET
Mais d'un point de vue général, je ne me rappelle pas avoir réussi à définir un NEW RECORDSET avec un SET
blux
Messages postés
26490
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 316
>
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
25 nov. 2008 à 12:24
25 nov. 2008 à 12:24
voui, t'as raison, j'avais pas fait attention au new recordset :-)
Je viens de tester chez moi (en access 2002, avec une autre requête), ça marche parfaitement...
J'ai du mal à saisir...
Je viens de tester chez moi (en access 2002, avec une autre requête), ça marche parfaitement...
J'ai du mal à saisir...
blux
Messages postés
26490
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 316
>
blux
Messages postés
26490
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
25 nov. 2008 à 12:31
25 nov. 2008 à 12:31
tu peux essayer de créer retaper ta requête en tant que requête 'normale' pour voir si elle est exécutée ?
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
>
blux
Messages postés
26490
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
25 nov. 2008 à 14:56
25 nov. 2008 à 14:56
Salut,
J'ai RE essayé en requête "normale" en passant par l'assistant création et tout le tintouin (cette fois-ci je l'ai enregistré comme ça je peux toujours la vérifier) et elle marche correctement, s'execute et me renvoie les dix enregistrements prévus.
C'EST CA, LE PLUS FRUSTRANT !!!!!!!!
Donc je me résume, ma déclaration de variable est bonne, ma déclaration de recorset est bonne, ma requête est bonne, conclusion :
J'oublie tout le barda et je réinvente la casserole à pression... Non ! J'ai obligation de réussite donc je cherche encore.
Merci de tes efforts.
J'ai RE essayé en requête "normale" en passant par l'assistant création et tout le tintouin (cette fois-ci je l'ai enregistré comme ça je peux toujours la vérifier) et elle marche correctement, s'execute et me renvoie les dix enregistrements prévus.
C'EST CA, LE PLUS FRUSTRANT !!!!!!!!
Donc je me résume, ma déclaration de variable est bonne, ma déclaration de recorset est bonne, ma requête est bonne, conclusion :
J'oublie tout le barda et je réinvente la casserole à pression... Non ! J'ai obligation de réussite donc je cherche encore.
Merci de tes efforts.
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
25 nov. 2008 à 11:32
25 nov. 2008 à 11:32
Tcho,
1. Les chaines ne sont pas limité à 256 c. (d'après l'aide sur la variables string, mais je commence à doute de l'aide)
2. La requête tronquée vient de la propriétés source mais si je met un espion sur la variable sql, la requête est tronquée exactement au même endroit, j'en déuis donc que c'est l'affichage de l'espion qui est limité à 256 c. d'autant plus que :
2bis. msgbox len(sql) = 402 =>Access limite ....
Merci de ton aide, bonne nuit
1. Les chaines ne sont pas limité à 256 c. (d'après l'aide sur la variables string, mais je commence à doute de l'aide)
2. La requête tronquée vient de la propriétés source mais si je met un espion sur la variable sql, la requête est tronquée exactement au même endroit, j'en déuis donc que c'est l'affichage de l'espion qui est limité à 256 c. d'autant plus que :
2bis. msgbox len(sql) = 402 =>Access limite ....
Merci de ton aide, bonne nuit
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
4 déc. 2008 à 14:33
4 déc. 2008 à 14:33
Salut,
RéSOLUTION DU PROBLèME ::::::::::::::::::::::::::
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] =" & [Forms]![FRM_EXCEL]![annee].Caption
sql = sql & " ORDER BY [plante].[nom_plante_latin];"
Ce code SQL, bien que parfaitement correct dans l'assistant requête de ACCESS, est aussi parfaitement incorect en dynamique par VBA à cause du format STRING du champs [plante_disponible]![année_dispo].
Il faut donc faire apparaitre des guillements à l'intérieur de la variable sql.
Ce qui donne (la modification est en gras) :
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] =""" &[Forms]![FRM_EXCEL]![annee].Caption
sql = sql & """ ORDER BY [plante].[nom_plante_latin];"
C'est un problème qui n'aurait pas eu lieu d'être si j'avais pu faire rs.source = <nom de la requête>.
RéSOLUTION DU PROBLèME ::::::::::::::::::::::::::
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] =" & [Forms]![FRM_EXCEL]![annee].Caption
sql = sql & " ORDER BY [plante].[nom_plante_latin];"
Ce code SQL, bien que parfaitement correct dans l'assistant requête de ACCESS, est aussi parfaitement incorect en dynamique par VBA à cause du format STRING du champs [plante_disponible]![année_dispo].
Il faut donc faire apparaitre des guillements à l'intérieur de la variable sql.
Ce qui donne (la modification est en gras) :
sql = "SELECT [plante].[nom_plante_latin], [sous_lot].[age], [sous_lot].[qté], [plante_disponible].[année_dispo]"
sql = sql & " FROM sous_lot INNER JOIN (plante INNER JOIN plante_disponible ON [plante].[num_plante]=[plante_disponible]"
sql = sql & ".[num_plante]) ON [sous_lot].[num_ss_lot]=[plante_disponible].[num_ss_lot]"
sql = sql & " WHERE [plante_disponible].[année_dispo] =""" &[Forms]![FRM_EXCEL]![annee].Caption
sql = sql & """ ORDER BY [plante].[nom_plante_latin];"
C'est un problème qui n'aurait pas eu lieu d'être si j'avais pu faire rs.source = <nom de la requête>.
Mdr je cherche sur internet des infos et j'tombe sur ton pseudo ash... xD
ashtheking
Messages postés
223
Date d'inscription
mardi 23 octobre 2007
Statut
Membre
Dernière intervention
7 avril 2009
97
2 mars 2009 à 08:59
2 mars 2009 à 08:59
Yo Jeff,