IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[Access] Comment acceder aux requêtes enregistrées ?


Sujet :

Accès aux données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut [Access] Comment acceder aux requêtes enregistrées ?
    bonjour a tous

    j'aimerais pouvoir acceder au requetes sotckées dans access par vb.net ( ADO.net )
    je pensais que peut etre l'objet dataset me permettrait d'y acceder mais je ne trouve rien .
    comment pourrais je de plus acceder a un listing des tables présentes dans ma bd ?


    merci d'avance,

    dyree
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Pour le listing des tables, y a toujours moyen de faire une requête comme ceci dans Access

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select type,name from MSysObjects where type=1
    Au niveau de tes requêtes access que tu voudrais pouvoir "piloter" depuis VB.NET, je ne pense pas que ce soit possible en ADO.NET. Par contre, il te reste toujours la possibilité d'utiliser DAO en ajoutant la dll à ton projet mais dans ce cas, je ne sais pas si VB.NET est vraiment indiqué à partir du moment où tu bypasses complètement ADO.NET

    A toi de voir.

    J'ai trouvé ceci pour toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    private void GetTableListing()
    {
     try
     {
      DataTable dbSchema = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
       new object[] {null, null, null, "TABLE"});
     
     
      TablesListBox.Items.Add("Select");
     
     
      foreach(DataRow row in dbSchema.Rows)
      {
       TablesListBox.Items.Add(row["TABLE_NAME"].ToString());
      }
     
     
      TablesListBox.SelectedIndex = 0;
     }
     catch (OleDbException ex)
     {
      ErrorsLabel.Text = ex.Message;
     }
     catch (InvalidOperationException ex)
     {
      ErrorsLabel.Text = ex.Message;
     }
     catch (ArgumentException ex)
     {
      ErrorsLabel.Text = ex.Message;
     }
    }
    En gros, va voir du côté de la méthode GetOleDbSchemaTable de OleDbConnexion

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    merci beaucoup.

    Pour les requete eenregistré sous access, je pense que c'est dommage, car je ne souhaite pas les piloter mais juste pouvoir les executer. apres tout les requete ne sont que des ligne de string. j'aurais pensé qu'il existait un moyen

    merci encore pour ton aide
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Je vais peut être te dire une bêtise car je suis étonné que stéphane qui est bien plus compétent en SGBD que moi ne t'en ai pas parler mais ces requêtes enregistrées sont tout de même nominatives, donc ne serait-il pas vraiment prossibles de les traiter comme des procédures stockées pour les executer soit Utilisation des procédures stockées avec une commande
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par neguib
    Je vais peut être te dire une bêtise car je suis étonné que stéphane qui est bien plus compétent en SGBD que moi ne t'en ai pas parler mais ces requêtes enregistrées sont tout de même nominatives, donc ne serait-il pas vraiment prossibles de les traiter comme des procédures stockées pour les executer soit Utilisation des procédures stockées avec une commande
    Il n'y a pas de procédures stockées en Access, les requêtes ne sont pas considérées comme telles. A ma connaissance, la seule possibilité de pouvoir réellement manipuler (modifier leur structure, les invoquer) les objets access (requêtes, modules etc...) est d'utiliser DAO. Via OleDB, je ne pense pas qu'il soit possible de faire plus que de "simples" ordres SQL.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    re bonjour,

    Je viens de voir que l'on pouvait aisement avec ADO ( qui me semble etre le successeur de DAO ) executer une requete a distance.

    La syntaxe serait aussi simple que :

    Select * From marequete

    pour ma part je cherche a en obtenir une liste de toute les requete en vb.net.
    je ne sias pas si cela reste faisable .
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par dyree
    re bonjour,
    pour ma part je cherche a en obtenir une liste de toute les requete en vb.net.
    je ne sias pas si cela reste faisable .
    C'est justement là que tu vas avoir besoin de DAO pour manipuler les querydef, tabledef etc... qui sont des objets internes à Access. Exemple de code VBA manipulant les querydefs (liste)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim db As DAO.Database, qd As DAO.QueryDef
     
    Set db = CurrentDb
    For Each qd In db.QueryDefs
     Debug.Print qd.Name
     
    Next

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par dyree
    ... pour ma part je cherche a en obtenir une liste de toute les requete en vb.net..
    de quoi parles-tu ce n'est en fait que du SQL dont tu as besoin dans ce cas (ce n'est pas propre à .Net) ensuite ADO.Net te permet de l'implémenter via le framework
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par neguib
    de quoi parles-tu ce n'est en fait que du SQL dont tu as besoin dans ce cas (ce n'est pas propre à .Net) ensuite ADO.Net te permet de l'implémenter via le framework

    Je pense qu'il parle des requêtes intégrées à Access, c'est à dire, celles qui ont été créées directement dans access via le query builder. Notre ami voudrait pouvoir obtenir la liste de toutes ces requêtes dans une application VB.NET.

    Si c'est bien de cela qu'il s'agit, il peut comme je l'ai dit, soit utiliser DAO, soit s'il s'agit d'une simple liste et rien d'autre (ça m'étonnerait car jene vois pas l'intérêt), il peut toujours requêter une des table systèmes d'access


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub listTableDefs()
     
     
    Dim db As DAO.Database, td As TableDef
     
    Set db = CurrentDb
     
    For Each td In db.TableDefs
     Debug.Print td.Name
    Next
     
    End Sub
    MSysAccessObjects
    MSysACEs
    MSysObjects
    MSysQueries
    MSysRelationships

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 121
    Points : 56
    Points
    56
    Par défaut
    encore une fois merci beaucoup
    vous m'avez tout les deux grandement aidé. Merci . Je pense avoir ma réponse

    j'aurais peut etre encore une question.

    j'ai donné les droits de lecture sur mes tables ( en particulier Msysquery ) mais autant pour afficher le nom de toute les tables de ma base a partir de vb.net me semble facile, autant quand je regarde le contenu de ma table Msysquery je ne sais pas comment l'utiliser.

    L'idée finale, si cela peut vous idée serait d'avoir un Dropdownlist qui afficherai toute les requete presente sous la base access, et lorsque l'on en choisirait une, il l'executerait .
    "One should never increase, beyond what is necessary,
    the number of entities required to explain anything."

  11. #11
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    En programme console et en C# ça donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.OleDb;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                const int MsAccessQueryObjectType=5;
                OleDbConnection conn=null;
                try
                {
                    conn = new OleDbConnection
    (System.Configuration.ConfigurationManager.ConnectionStrings
    ["AccessDB"].ToString());
                    conn.Open();
                    OleDbCommand cmd = new OleDbCommand("SELECT name
     FROM MSysObjects WHERE type=@type", conn);
                    OleDbParameter type = new OleDbParameter();
                    type.ParameterName = "@type";
                    type.OleDbType = OleDbType.Integer;
                    type.Value = MsAccessQueryObjectType;
                    cmd.Parameters.Add(type);
                    OleDbDataReader Queries = cmd.ExecuteReader();
                    while (Queries.Read())
                    {
                        Console.WriteLine(Queries["name"]);
                    }
                    Queries.Close();
     
                }
                catch (OleDbException e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    if (conn != null && conn.State ==
     System.Data.ConnectionState.Open) conn.Close();
                    Console.ReadLine();
                }
     
     
            }        
        }
    }
    En VBA, il est très facile de te créer une procédure qui crée un fichier reprenant tout le contenu des tables systèmes, en analysant un peu les données, c'est très facile de savoir qu'est-ce qui correspond à quoi.

    Voici une petite procédure que j'ai pondue qui pourra sans doute t'aider dans tes prochaines recherches, tu fais un copier/coller dans un module d'une DB access et pour l'exécuter, tu invoques le debugger (CTRL+G) et tu fais un

    ? GetSystemInfo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Option Compare Database
    Public Function GetSystemInfo()
     Dim db As DAO.Database, r As Recordset, td As TableDef
     Dim line As String * 50
     line = String(50, "-")
     Set db = CurrentDb
     
     Open "MsAccessInternal.txt" For Output As #1
     For Each td In db.TableDefs
        Print #1, td.Name & vbCrLf & line
        Set r = db.OpenRecordset("SELECT * FROM " & td.Name)
        While Not r.EOF
            For j = 0 To r.Fields.Count - 1
                Print #1, r.Fields(j).Name & vbTab & r(j)
            Next j
            r.MoveNext
        Wend
     Next
     
     Print #1, "Voici les requêtes de la base de données" & vbCrLf & line
     Set r = db.OpenRecordset("SELECT name FROM MSysObjects WHERE
     type=5")
     While Not r.EOF
        Print #1, r!Name
        r.MoveNext
     Wend
     
     r.Close
     db.Close
     Close #1
    End Function
    Le fichier résultant de cette procédure est bien sûr "MsAccessInternal.txt" et il sera généré dans le répertoire où se trouve ta DB
    Si avec ça tu t'en sors pas, je change de métier

Discussions similaires

  1. Réponses: 14
    Dernier message: 05/05/2006, 09h39
  2. [VB.Net] Comment accéder aux fonctions du C++ ?
    Par devmat dans le forum Services Web
    Réponses: 2
    Dernier message: 17/03/2006, 20h27
  3. Réponses: 6
    Dernier message: 04/12/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo