ACCESS-VB: Lecture enregistrement

cs_whispers Messages postés 7 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 1 mars 2007 - 28 janv. 2005 à 20:47
cs_whispers Messages postés 7 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 1 mars 2007 - 31 janv. 2005 à 12:22
Bonjour,

J'ai une base ACCESS2000 avec deux tables (Tbarticle, Tbreception)
J'ai ecris une fonction GetLibelleArticle() ci-dessous pour récupérer le libelle de l'article à partir d'un code (code saisie dans Tbreception).
Malheureusement la fonction ne fonctionne pas - pouvez m'expliquer pourquoi ? Mon recordset est = -1 or l'article existe bien.

Et plus généralement, sous ACCESS lorsque je fais:
---> recordsetX.open requeteSQL (avec clause WHERE), ca ne marche pas
je suis obligé de faire
---> recordsetX.open nomtable ou select * from table

Je vous remercie

Public Function GetLibelleArticle(arcod, libelle) As Integer
Dim rst_art As ADODB.Recordset
Dim retour As Integer
Dim rqsql As String


libelle = ""
retour = 0 rqsql "select tbarticle.ar_lib from tbarticle where tbarticle.ar_code '" + arcod + "';"
rst_art.Open rqsql, CurrentProject.Connection
If rst_art.RecordCount > 0 Then
libelle = rst_art.Fields("ar_lib")
retour = 1
End If
rst_art.Close
GetLibelleArticle = retour
End Function

3 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
28 janv. 2005 à 23:01
Tu as le choix entre ça pour calculer le RecordCount :
rst_art.Open rqsql, CurrentProject.Connection, adOpenStatic
ou ça pour remplacer ton test
<STRIKE>If rst_art.RecordCount > 0 Then</STRIKE>
if not rst_art.eof then

PS : il te manquerait pas un "Set rst_art = New Recordset" ?

Ci-dessous le résumé de MSDN sur le pb du RecordCount = -1 :
Si l'objet Recordset accepte le positionnement approximatif ou les signets (c'est-à-dire que Supports (adApproxPosition) ou Supports (adBookmark) renvoie la valeur True), la valeur de RecordCount est le nombre exact d'enregistrements du Recordset, que ce dernier soit complet ou non. Si l'objet Recordset ne prend pas en charge le positionnement approximatif, cette propriété peut peser lourdement sur les ressources dans la mesure où tous les enregistrements doivent être extraits et comptés pour qu'une valeur RecordCount exacte puisse être renvoyée.


Le type de curseur de l'objet Recordset détermine si le nombre d'enregistrements peut ou non être établi. La propriété RecordCount renvoie les valeurs suivantes : -1 pour un curseur de défilement vers l'avant seulement, le compte effectif pour un curseur statique ou à jeu de clés, -1 ou le compte effectif (selon la source de données) pour un curseur dynamique.
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
28 janv. 2005 à 23:51
Moi perso je ferais ca :

Public Function GetLibelleArticle(arcod) As String
Dim rst_art As ADODB.Recordset
Dim rqsql As String
libelle = ""
retour = 0 rqsql "select tbarticle.ar_lib from tbarticle where tbarticle.ar_code '" + arcod + "';"
rst_art.Open rqsql, CurrentProject.Connection
If rst_art.recordset.eof = false Then
libelle = rst_art.Fields("ar_lib")
End If
rst_art.Close
GetLibelleArticle = libelle
End Function

Cette fonction retourne une chaine ( le libelle de l'article passé en paramettre)

J'espere que ca ta aider.

@+

Manu
0
cs_whispers Messages postés 7 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 1 mars 2007
31 janv. 2005 à 12:22
Salut Mrdep1978,

Je n'ai pas tout percuté sur l'explication MSDN, en tout cas les corrections que tu as apporté fonctionne et je t'en remercie sincèrement. Je me pencherais plus en détail ultérieument sur ces explications. Currently, je peux avancer dans mon dev. et grand merci à toi.
Merci également à toi Manu94600 pour ton tuyau
A+ les gars
0
Rejoignez-nous