Créer un reporting excel à partir d'un recordset ADO [Résolu]

RENU974 7 Messages postés lundi 25 février 2008Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 13:33 - Dernière réponse : youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention
- 1 sept. 2008 à 15:25
bonjour,

je ne sais pas comment formaliser ce projet que je vous décrit ci dessous:

je souhaite réaliser un tableau excel qui récapitule le résultat d'un recordset d'une base access:

1/le nombre d'enregistrement étant supérieur à 1 million de lignes je ne peux utiliser une fonction copy to excel, il me faut trouver un autre moyen
2/ donc j'utilise un recorset obtenu depuis ma base de donnée access.ceci n'est pas un problème.
ce que je ne sais pas faire c'est organiser mon recordset en disant dans VB excel:

lorsque je parcours le recordset:
si le champs TOTO du recordset = 0 alors je met le nombre de ligne correspondantes dans la cellule A1.

je sais faire des boucles sur excel mais faire une boucle sur un recordset eh bien je bloque.
si des personnes arrivent à me trouver un exemple d'application de reporting ou on transfere les données d'un recordset sur une feuille excel en disposant les champs comme je le souhaite je vous remercie d'avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 27 août 2008 à 15:20
3
Merci
tu en bosses en vb.net non?
pourquoi tu utilises ado? plutot que d'utiliser des recordset utilises des dataset ce qui est plus complet sur .net.

Sinon ma réponse est également bonne pour ton TOTO=0 ou 1. tu as plusieurs possibilités, soit tu construis une requete sql avec un count dedans avec les crières 0 ou1 et tu utilises un reader, soit si tu utilises des bindingsources tu utilises filter, soit si tu utilises un dataset ou datatable tu utilises select("TOTO=0), sinon tu utilises des boucles.
si tu restes en ado avec access voici un exemple:
Dim sqlcmd as string ="SELECT Count([tatable].[TOTO]) AS [CountOfTOTO] FROM [tatable] HAVING (((Count([tatable].[TOTO]))=0))"
rst = dbCC.OpenRecordset(sqlcmd, dbOpenSnapshot)
dim Fcount as integer
If rst.RecordCount <> 0
 Fcount =rst.fields("CountOfTOTO")
End If
rst.close
si en .net
Dim connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=taDatabase.mdb;"
Dim connection As New OleDb.OleDbConnection(connectionString)
Dim sqlcmd as string ="SELECT Count([tatable].[TOTO]) AS [CountOfTOTO] FROM [tatable] HAVING (((Count([tatable].[TOTO]))=0))"
Dim Createcmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sqlcmd , connection)
dim myreader As OleDb.OleDbDataReader
dim Fcount as int16
try
myreader = Createcmd.ExecuteReader()
            While myreader.Read()
                count = myreader(0)
            End While
            connection.Close()
catch ex As Exception
MsgBox(ex.Message)
end try

c'est un exemple tu as plein de façon de faire a toi de choisir la meilleur en fonction de ton projet.
@+
youpi :)

Merci youpiyoyo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de youpiyoyo
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 27 août 2008 à 13:49
0
Merci
SAlut,

tu as essayer DoCmd.TransferSpreadsheet... je suis pas sur qu'il supporte 1M de lignes sachant que excel ne peux en contenir que 65536.
sinon pour boucler dans un recordset tu peux faire:
    With rst
        .MoveFirst
        Do Until .EOF
        loop
   end with
rst etant ton recordset. tu as d'autres moyens de faire mais c'est une solution, tu peux faire un while ou un for combiné également avec 65536, a toi de voir et d'adapter.
j'ai pas trop compris cette question:
"lorsque je parcours le recordset:
si le champs TOTO du recordset = 0 alors je met le nombre de ligne correspondantes dans la cellule A1."

de ce que je comprends: tu veux mettre le nombre d'enreigstrement null ou vide dans ta cellule A1 d'excel, c'est ca?
Si c'est le cas pour tu ne fais une requete sql avec count et comme critère IS NULL or "". et tu l'execute avec executenonquery (si tu codes en vb ou c#.net).

Sinon pour ton reporting de access tu peux utilser crystal report.
@+
youpi :)
Commenter la réponse de youpiyoyo
RENU974 7 Messages postés lundi 25 février 2008Date d'inscription 28 août 2008 Dernière intervention - 27 août 2008 à 14:52
0
Merci
bonjour, merci pour ta réponse.

compte tenu du nombre d'enregistrement le transfert spreadsheet ne marchera pas. c'est pour cela que je passe par access, car seul access peut supporter un grand nombre de lignes.

ensuite tu n'a pas compris car j'ai mal expliqué:

si le champs TOTO du recordset est égal à une valeur cad 0 ou 1 par exemple. alors je met dans la cellule A1 le nombre d'enregistrement pour les quelle la condition sur ce chazmps est remplie.

en simple: j'ai combien d'enregistrements qui correspondent au champs TOTO=0
Commenter la réponse de RENU974
RENU974 7 Messages postés lundi 25 février 2008Date d'inscription 28 août 2008 Dernière intervention - 28 août 2008 à 07:50
0
Merci
salut, vbnet je ne connais pas .


 


merci pour ton exemple ado je vais passer comme ca.


le rpoblème des boucles c'est qu'il faut que je crée une variable de comptage pour chaque critère et dans mon cas c'est assez lourd (environ 20 critères donc 20 variables)


dans tous les cas tu m'as donné l'occasion de regarder de plus près VB.net.


j'en profite pour poser une autre question:

je n'arrive pas à me connecter à une table oracle depuis VB :

en fait dans access , nous pouvons créer un lien vers une table, celle ci étant volumineuse, le lien est mieux que d'importer la table entière.
dans access , cette liaison se manifeste par un rond vert-bleu.

n'arrivant pas à me connecter à ce lien , en fait je fais une requête  création de table sur ce lien avec mes critères puis je me connecte en vb sur le résultat de cette requête pour sortir le reporting.
connais tu le code VB pour se connecter directement à ce lien de table et créer un recordset directement ?

merci pour ton aide.
Commenter la réponse de RENU974
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 1 sept. 2008 à 15:25
0
Merci
tu es dans la section [infomsgf_VB-NET-VB-2005_40.aspx VB.NET et VB 2005]c'est pour cela que je pensais que tu étais en .net.
oracle je ne connais pas désolé, regarde dans le designer de connection de visual.
pour ton histoire de lien, si ta table est volumineuse fait une requete sql en select (aide toi de access si tu as besoin) avec tes critères et importe le résultat dans une table de ton dataset.
Si tu n'es pas en .net je pourrais difficilement t'expliquer en vb6 sachant que je n'est jamais codé avec ce language, uniquement vba autre que .net. sinon utilises la première méthode ado que je t'ai donné.

@+
youpi :)
Commenter la réponse de youpiyoyo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.