Requete SQL sous VB6 [Résolu]

Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
- - Dernière réponse : guilleto
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
- 12 mai 2010 à 14:26
Bonjour à toutes et tous,

depuis 2 jours j'essaie tous les codes sources que je trouve sur le site et je préfère poser une question car je n'y arrive toujours pas.

J'ai créer un fichier .mdb avec 18 Champs à partir de plus de 500 Fichiers .txt !

Je voudrais pouvoir effectuer une ou plusieurs requête SQL sur cette base mais cela ne fonctionne pas !

Pourriez-vous m'aider ? Et de préférence avec des commentaires afin que je ne vous ennuie pas trop avec des questions idiotes ?

Voici un bout de code qui ne fonctionne pas (chez moi tout du moins) :
Dim db As Database
Dim rst As Recordset
Set Db = Workspaces(0).OpenDatabase(Dateiname)
Set rst = Db.TableDefs("Reports_List").OpenRecordset(dbOpenTable)
rst.OpenRecordset "SELECT DISTINCT N1 , COUNT(*) FROM Reports_List GROUP BY N1"



Par avance merci

Olivier
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
3
Merci
Salut,

Je suis bien d'accord, mais si tu change tout le temps de code, sans comprendre d'où viennent les problèmes, tu ne progresseras pas plus...

Dans le bout de code que tu nous montres là, c'est le "dbOpenTable" qui ne va pas : il ne s'applique pas à une requête SQL, mais pour "ouvrir" une table, du coup :
Set Rs = DB.OpenRecordset("NomDeTable", dbOpenTable)

Si tu veux exécuter une requête SQL (je te le recommande, ce sera bien plus efficace que de récupérer toutes les données d'une table !), essaye sans le second paramètre (ca fait belle lurette que je n'ai pas fait du DAO, mais il me semble bien qu'il n'était pas obligatoire).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Merci cs_DARKSIDIOUS 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

ne fonctionne pas


Soit plus précis si tu veux de l'aide : qu'est-ce qui ne fonctionne pas ? Tu as des erreurs ? Si oui, lesquelles ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
Merci DarkSidious pour cette réponse rapide.

En fait que j'essaie n'importe quel bout de code cela me fait systématiquement des erreurs.

Ce que je souhaite faire (si tu peux m'aider) c'est faire une requête avec ou sans DISTINCT sur un ou plusieurs champs et récupérer le résultat.
Le souci c'est que je n'arrive à rien !

Le bout de code présent dans le premier Post n'est qu'un exemple parmi d'autres, si tu en as un qui fonctionne cela me serait d'un grand secours.

Par avance merci

Olivier
Commenter la réponse de guilleto
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Commence par faire ta requête sous Access pour avoir une requête correcte sans erreur de syntaxe et qui te renvoie les données que tu souhaite avoir.

Et ensuite, trouve toi un bout de code qui exécute une requête à la base, et tiens-toi y : si ca ne fonctionne pas, revient nous demander de l'aide en montrant le bout de code en question et en précisant les erreurs qui sont déclenchées.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
Je viens d'essayer sur mon fichier avec cette requête :
SELECT DISTINCT N1 FROM Reports_List GROUP BY N1;

Et cela fonctionne !

Le souci c'est que je n'arrive pas à faire la même chose sous VB6.

Voici le Code :
Public Sub SQL()
  '         1 - Déclaration:
  Dim MaConnexion As Connection
  
  '         2 - Création d 'une instance
  Set MaConnexion = New Connection
  MaConnexion.Provider = "Microsoft.Jet.oledb.4.0"
  MaConnexion.Open MainForm.FileLOGS.Path & "\Reports.mdb"
  
  Dim MaCommande As Command
  Set MaCommande = New Command
  With MaCommande ' Evite de retaper MaCommande sur chaque ligne
        .ActiveConnection = MaConnexion
        .CommandText = "SELECT DISTINCT N1 FROM Reports_List GROUP BY N1"
        .Execute
  End With
  
End Sub


et l'erreur que cela me donne :
'Erreur de Compilation: Utilisation incorrecte du mot clé New' sur cette ligne :
Set MaConnexion = New Connection


Que dois-je faire pour corriger ce problème ?

J'ai trouvé ce code ici.

Par avance merci

Olivier
Commenter la réponse de guilleto
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Le code me semble correct.

Est-ce que tu as bien rajouté la dépendance vers ADO dans les références de ton projet ?

Sinon, essaye ainsi :
Dim MaConnexion As ADODB.Connection
Set MaConnexion = New ADODB.Connection

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
En référence j'ai ajouté :
Microsoft DAO3.6 Object Library
Microsoft ActiveX Data Objects 2.8 Library
Microsoft ADO Ext. 2.8 for DLL ad Security

Je pense pas que cela puisse être autre chose !

Olivier
Commenter la réponse de guilleto
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Enlève la référence à DAO (Microsoft DAO3.6 Object Library ) c'est sûrement elle qui rentre en conflit avec ADO (Microsoft ActiveX Data Objects 2.8 Library)
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
Bonjour DarkSidious,

En fait c'est l'ordre des Références qui compte ... ! Etrange !

Le morceau de code ci dessous passe mais j'aimerais savoir comment récupérer le résultat ?
  '         1 - Déclaration:
  Dim MaConnexion As Connection
  
  '         2 - Création d 'une instance
  Set MaConnexion = New Connection
  MaConnexion.Provider = "Microsoft.Jet.oledb.4.0"
  MaConnexion.Open Chemin$ & "\DataFile.mdb"
  
  Dim MaCommande As Command
  Set MaCommande = New Command
  With MaCommande ' Evite de retaper MaCommande sur chaque ligne
        .ActiveConnection = MaConnexion
        .CommandText = "SELECT DISTINCT N1 FROM Reports_List GROUP BY N1"
        .Execute
  End With


Par avance merci

Olivier
Commenter la réponse de guilleto
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

L'ordre des références compte, mais ca ne sert à rien de garder des références dont tu n'as pas besoin : si tu utilises ADO, pas besoin des références vers DAO, et inversement par exemple.

Pour récupérer les valeurs, il te faut passer par un Recordset :
Dim oRecordset As Recordset

With MaCommande ' Evite de retaper MaCommande sur chaque ligne
.ActiveConnection = MaConnexion
.CommandText = "SELECT DISTINCT N1 FROM Reports_List GROUP BY N1"
Set oRecordset = .Execute
End With

Et ensuite :
MsgBox oRecordset.fields("N1").value
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
Merci pour l'info,

Cela me donne le message d'erreur suivant : (3021)

Bizarrement le nombre d'enregistrement est de -1 !!

Je viens de m'apercevoir que la création et l'ouverture de ma base n'étaient pas faite avec la même manière ADO et ODBC !!

Voici le Code que j'utilise pour la création :
  Dim DB As Database
  Dim rst As Recordset
  
  Dim ReportsData
  
  Set DB = Workspaces(0).CreateDatabase(Chemin$ & "\Reports.mdb", dbLangGeneral)
  Set ReportsData = DB.CreateTableDef("Reports_List")
  With ReportsData
    .Fields.Append .CreateField("N1", dbText)
  End With
  DB.TableDefs.Append ReportsData
  Set rst = DB.TableDefs("Reports_List").OpenRecordset(dbOpenTable)
  
  Do
    FileNumber = FreeFile
    Open Feuille.FileLOGS.Path & "" & Feuille.FileLOGS For Input As #FileNumber
      Cpt = Cpt + 1
      Do While Not EOF(1)
        Input #1, MyString
          rst.AddNew
          DoEvents
          rst(0) = MyString
          rst.Update
          rst.MoveLast
        End If
      Loop
    Close #FileNumber
  Loop
  DB.Close


Et le code pour la lecture :
 Dim DB As Database, Rs As Recordset
    Dim StrSQL As String, I As Integer
    StrSQL = "SELECT DISTINCT N1 FROM Reports_List GROUP BY N1"
    Set DB = OpenDatabase(Chemin$ & "\Reports.mdb")
    Set Rs = DB.OpenRecordset(StrSQL, dbOpenTable)
    I = 1
    Message = ""
    Do Until Rs.EOF
        Message = Message & Rs("FullName") & " | "
        I = I + 1
        Rs.MoveNext
      Loop
      MsgBox Message
    Rs.Close
    DB.Close

Ainsi que le nouveau message d'erreur que cela m'affiche :

Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet 'SELECT ....'. Assurez-vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès.

Le nom et le chemin sont bons !

Par avance merci

Olivier
Commenter la réponse de guilleto
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Comme je te l'ai déjà dit : choisit une technologie et un bout de code correspondant, et tiens toi y, sinon tu t'en sortira pas : si à chaque fois tu nous montre un bout de code différent, comment veux-tu qu'on puisse t'aider ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
En effet,

Mais lorsqu'on ne connait pas vraiment les liens entre Access et VB6, que l'on recherche des codes sources sur le site (comme préconisé dans le règlement du Forum) il est difficile de 'vérifier' si 2 codes utilisent la même approche. Non ?

En gardant le dernier bout de code, qu'est-ce que j'ai mal fait et qui bloque comme cela ?

Par avance merci

Olivier
Commenter la réponse de guilleto
Messages postés
258
Date d'inscription
jeudi 23 octobre 2003
Dernière intervention
20 mars 2013
0
Merci
Merci DarkSidious,
Je suis ton Padawan !

Ca venait bien de là : il ne faut pas de 2ème paramètres !

Encore merci

Olivier
Commenter la réponse de guilleto

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.