[VBA] Compter les lignes d'une requête SQL
Résolu
eXqO
Messages postés
54
Statut
Membre
-
parpins -
parpins -
Bonjour,
Je cherche à récupérer le nombre de lignes d'une requête SQL, le tout en VBA.
J'ai essayé d'utiliser un RecordCount, cependant il me renvoie systématiquement -1...
En espérant avoir une lumière sur ce RecordCount qui me pose un problème...:?
Cordialement,
Clément.
Je cherche à récupérer le nombre de lignes d'une requête SQL, le tout en VBA.
J'ai essayé d'utiliser un RecordCount, cependant il me renvoie systématiquement -1...
En espérant avoir une lumière sur ce RecordCount qui me pose un problème...:?
Sub CompleteTableauCommandeProvisoire()
'Déclaration des variables
Dim cnx As ADODB.Connection
Dim rst As ADODB.Recordset
'Instanciation des variables
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
Dim sql1 As String
Dim debutperiode As Date
Dim ddeb As String
Dim dfin As String
Dim Ligne As Integer
Dim j As Integer
Dim result_sql
Dim Col
Dim cptLigne As Integer
cnx.ConnectionString = "DSN=Stats;UID=***;PWD=***;"
cnx.Open
cptLigne = 6
'Changer la date de début d'année
For cptLigne = 6 To 263
For debutperiode = DateSerial(2008, 12, 29) To Now() - 6 Step 7
ddeb = Format(debutperiode, "dd/mm/yyyy")
dfin = Format(debutperiode + 6, "dd/mm/yyyy")
'Nombre total d'envois périodique (courrier ):
sql1 = "select m.mp_l, count(*), sum(c.cde_tot_ttc)" + _
" from e_cde c, e_mode_paiement m" + _
" where c.cde_ty_se_c = 'WV2'" + _
" and c.cde_mp_c in ('KM','KI','KW','KT', 'KA','KC', 'CA')" + _
" and c.cde_mp_c = m.mp_c" + _
" and c.cde_d between" + _
" to_date('" + ddeb + " 00:00:00' , 'dd/mm/yyyy hh24:mi:ss')" + _
" and to_date('" + dfin + " 23:59:59', 'dd/mm/yyyy hh24:mi:ss') " + _
" group by m.mp_l" + _
" order by 1"
rst.Open sql1, cnx
rst.MoveFirst
j = 0
result = rst.RecordCount
Do
For Ligne = cptLigne To cptLigne + result
For Col = 65 To 67
'Lecture en ligne
Range(Chr(Col) & Ligne).Select
'Récupère résultat
result_sql = rst.Fields(j).Value
'Transfert le résultat dans la cellule
ActiveCell.FormulaR1C1 = result_sql
j = j + 1
Next
j = 0
rst.MoveNext
Next
Loop While rst.BOF
cptLigne = cptLigne + 12
rst.Close
Next
Next
End Sub
Cordialement,
Clément.
Configuration: Windows XP Firefox 3.0.11
5 réponses
-
Essayez ceci :
Dim i As Integer
Dim maCmd As New SqlCommand("VOTRE_REQUETE_ICI", Conn)
Conn.Open()
Dim monRead As SqlDataReader = maCmd.ExecuteReader() 'execution de la requete
While monRead.Read()
i = i + 1
End While
Conn.Close() 'fermeture de la connexion a la base
Et voila , maintenant i contient le nombre des lignes de votre requête ... -
Bonjour
je cherche aussi la solution à ce problème
j'utilise vba sous excel pour me connecter à Oracle.
voici mon code (mon objet connection appartient déjà à ma classe):
'Déclaration des variables
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
'Instanciation des variables
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
'Préparation de l'objet Command
cmd.CommandText = "SELECT * FROM MA_TABLE"
cmd.ActiveConnection = mobjCon 'attribut de classe
'Exécution de la requête
Set rst = cmd.Execute
rst.MoveLast 'renvoi l'erreur "L'ensemble des lignes ne prend pas en charge les récupérations arrière"
rst.RecordCount 'renvoi toujours -1
Visiblement le problème viendrait du parametrage du recordset.
certains recordset n'acceptent pas cette méthode
d'ou ma question comment avoir le bon recordset?
merci d'avance -
-
Bonjour,
J'aurai plutôt fait un rst.MoveLast avant le RecordCount et ensuite le MoveFirst.
D'autre part, il faut remplacer le "+" de ta requête par "&". Le signe "+" est l'opérateur de l'addition et non de la concaténation. Il peut être mal interprété dans la requête.
;o)
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
J'ai essayé ta technique avec le MoveLast auparavant mais j me suis pas attardé dessus car il me renvoie un message d'erreur : "L'ensemble des lignes ne prend pas en charge les récupérations arrière"...