Compter lenombre d'entrées dans une table SQL recordcount=-1

cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012 - 18 janv. 2011 à 10:00
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 24 janv. 2011 à 16:55
Bonjour j'ai un soucis. Je n'arrive pas à récupérer le nombre d'entrés dans ma table SQL.
recSet.RecordCount me retourne -1 à chaque fois que la table soit vide ou contient des entrées, comment faire ?

En attendant je fait avec RecSet.EOF (true ou false si contient des entrées ou non) mais ça ne me donne pas le nombre des entrées dans ma table


Dim BDD As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim cSQL As String

Set BDD = New ADODB.Connection
Set recSet = New ADODB.Recordset

Dim chaine As String

'La chaine connection
chaine = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:\logiciel_emf\base_emf.mdb;Persist Security Info=False"

'On créé la connexion
BDD.Open chaine

'requete
cSQL "select * from instances where date " & "'" & Date & "'"
'On passe la requete à la base
recSet.Open cSQL, BDD, , , adCmdText

MsgBox ("trouve: " & recSet.RecordCount)

'On ferme la connexion et on libère les objets
BDD.Close
'recSet.Close

Set BDD = Nothing
Set recSet = Nothing

13 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 janv. 2011 à 11:42
Peut être parce qu'une date dans une chaîne SQL ne s'encadre pas avec une apostrophe ("'"), mais avec un dièse ("#") ?

Un autre pb pourrait peut-être être l'utilisation d'un champ au nom de "date" dans ta base SQL ? date est souvent un mot réservé.

Molenn
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 janv. 2011 à 12:11
Tu pourrais faire un "SELECT COUNT(*) FROM instances WHERE date = " & "'" & Date & "'"
Comme sa c'est le SGBD qui compte les lignes et pas toi ;)

Si non il me semble que c'est une config du Recordset (CursorLocation = adUseClient mais sans garantie )

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
hublet Messages postés 46 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 26 novembre 2013
18 janv. 2011 à 15:57
Bonjour,

Pour sqlserver, j'essaie toujours d'utiliser les dates en mode natif
"yyyy-mm-dd", sinon le résultat n'est pas toujours garanti en fonction de la configuration de la machine (regional settings)

Etienne
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
18 janv. 2011 à 18:00
Si le problème viens des formats de date (mais il me semble que ce n'étais pas la question), pour être certain de ne jamais avoir de problème on peut faire un truc du genre :
"... WHERE" & _
" YEAR(date) = " & DatePart("yyyy",Date) & _
" AND " & _
" MONTH(date) = " & DatePart("MM",Date) & _
" AND " & _
" DAY(date) = " & DatePart("dd",Date)

Voir ajouter les heures minutes secondes si besoin
Bon c'est vrais que sa fait travailler un peut plus le serveur mais au moins on est certain de ne jamais avoir de problème de format

Ou si la fonction existe (je ne connais pas bien SQLServeur) faire comme dans Oracle :
"TO_DATE('" & Format(Date, "yyyy/MM/dd") & "','YYYY/MM/DD')"

Soit déclarer dans quel format est transmit la date

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
19 janv. 2011 à 08:10
Merci à vous,oui j'ai bien un champ nommé "date" je vais voir pour changer cela et essayer,merci.
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
19 janv. 2011 à 08:23
Bon, dans la table j'ai renommé le champ "date" en "date_data" et cela ne change rien

Ma date est au format j/m/y


ensuite si je met
cSQL "select * from instances where " & " YEAR(date) " & DatePart("yyyy", Date) & " AND " & " MONTH(date) = " & DatePart("MM", Date) & " AND " & " DAY(date) = " & DatePart("dd", Date)

j'ai un appel de procédure ou d'argument incorrect
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
19 janv. 2011 à 08:25
sije n'y arrive pas tant pis je me servirait d'un datagrid pour y compter les entrées
0
cs_lechti62 Messages postés 161 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 8 mars 2012
19 janv. 2011 à 09:13
"SELECT COUNT(*) FROM instances WHERE date = " & "'" & Date & "'"
Comme sa c'est le SGBD qui compte les lignes et pas toi ;)

c'est quoi le SGBD ?
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
19 janv. 2011 à 09:26
Bonjour,

SGBD = S ystème de gestion de base de données (soit dans ton cas Ms.Jet, arf je sait pas pourquoi mais je pensais que tu étais sur SQL Serveur, la fatigue sans doute )

Pour + d'info sur les requetes, fonctions SQL, ext. vas regarder sur : SQL de A à Z

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
19 janv. 2011 à 12:50
Bonjour,

myRecordset.Recordcount te renvoie le nombre d'enregistrement de ton Recordset A CONDITION que celui-ci soit en adUseClient, c'est à dire résident dans la mémoire du poste de travail et non dans celle du serveur.


Calade
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
19 janv. 2011 à 14:20
Ha bà voila il me semblais bien que c'était un truc dans ce genre
(Et j'en avais déjà parlé sur cette discutions en + )
Si non il me semble que c'est une config du Recordset (CursorLocation = adUseClient mais sans garantie )


Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
19 janv. 2011 à 14:29
Exact, c'est bien MyRecordset.CursorLocation = adUseSclient qu'il faut spécifier.


Calade
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
24 janv. 2011 à 16:55
Bonjour,

Si tu à la réponse à ta question merci de valider la réponse (en cliquant sur réponse acceptée, sa perpétras à d'autre de trouvé la réponse si ils ont le mm question )

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Rejoignez-nous