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

VB.NET Discussion :

Comment faire prendre en charge la fenêtre sources de données par mon projet ?


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Comment faire prendre en charge la fenêtre sources de données par mon projet ?
    Bonjour,

    Ma question n'est peut être pas au bon endroit, mais quand on débute à mon âge (65 ans) on a peut être des excuses, au moins à présenter

    Comme vous pouvez le voir dans la capture d'écran ci-dessous, la fenêtre Sources de données n'est pas prise en charge par le projet !
    Toute la doc lue aujourd'hui ne m'a pas éclairé sur ce problème car à chaque fois on nous dit d'ouvrir cette fenêtre qui justement n'est pas prise en charge !

    Bref comment faire qu'elle soit enfin prise en charge histoire de progresser un petit peu ?

    Je suis sous Windows 10, Visual Studio 2022 et je programme en VB.

    A vous lire
    Alain

    Nom : Capture d’écran 2023-04-01 162541.png
Affichages : 293
Taille : 18,3 Ko

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    mars 2005
    Messages
    2 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2005
    Messages : 2 438
    Points : 4 696
    Points
    4 696
    Par défaut
    Bonjour et bienvenue,

    Avez-vous essayé avec un projet Winform ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour Popo,

    Oui c'est bien un projet windows form !

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 306
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    Personnellement je n'utilise pas ce genre d'objets qui Va a l'encontre des trois Tiers ; Client, Métier,Base de Données.
    Client :=interface utilisateur
    Métier := règles de gestion des informations
    Base de Données := connexion requêtes.

    L'utilisation de dataset lie le formulaire à la base de données ce qui n'est pas conseillé dans le cadre de la maintenance curative et évolutive.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Mon seul souci à l'heure actuelle est d'utiliser une base de données en lieu et place de la lecture séquentielle de fichiers suivi d'un traitement algorithmique afin de sélectionner les données pertinentes.
    L'utilisation de requêtes semble quand même plus pertinente et certainement plus rapide.

    Je lis la doc, mais sincèrement je reste un peu pommé.
    Alors que je vois la base de données, je ne sais pas comment y aboutir; bon c'est une base Access car c'est ce que je maîtrise le plus facilement et de toute manière ce n'est que pour une utilisation locale.
    Nom : Capture d’écran 2023-04-04 073901.png
Affichages : 232
Taille : 9,0 Ko

    Je cherche pour le moment à être en mesure de récupérer des données dans une base de données, voire de la créer "from scratch" à partir du code.
    Bref je suis un grand débutant dans ce domaine avec les questions qui vont bien ADO, DBO, utilisation base SQL, Access ou autre ?
    Mais ça ce sera pour plus tard.

  6. #6
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    novembre 2014
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : novembre 2014
    Messages : 235
    Points : 147
    Points
    147
    Par défaut
    Pour ne pas lier le programme j'utilise une recherche d’arborescence propriétaire comme celle ci-dessous. Le code est générique il faut l'adapter à chaque besoin bien sur :

    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
    50
    51
    52
    53
    54
    Public Sub LoadFileTest()
     
            'Affichage des fenêtres roots
            TreeView_Explorer.Visible = True
                TxtBx_Path.Visible = True
                ValidateRoot.Visible = True
     
                AddSpecialAndStandardFolderImages()
     
                AddDriveRootNodes()
     
     
        End Sub
     
     Public Sub AddSpecialAndStandardFolderImages() 'private
     
            AddImageToImgList(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Folder")
     
            Dim SpecialFolders As New List(Of Environment.SpecialFolder)
     
            'peut être supprimer
            'With SpecialFolders
            '    .Add(Environment.SpecialFolder.Desktop)
            '    .Add(Environment.SpecialFolder.MyDocuments)
            '    .Add(Environment.SpecialFolder.Favorites)
            '    .Add(Environment.SpecialFolder.Recent)
            '    .Add(Environment.SpecialFolder.MyMusic)
            '    .Add(Environment.SpecialFolder.MyVideos)
            '    .Add(Environment.SpecialFolder.Fonts)
            '    .Add(Environment.SpecialFolder.History)
            '    .Add(Environment.SpecialFolder.MyPictures)
            '    .Add(Environment.SpecialFolder.UserProfile)
            'End With
            'fin de ce qui peut être supprimé
     
            For Each sf As Environment.SpecialFolder In SpecialFolders
                AddImageToImgList(Environment.GetFolderPath(sf))
            Next
     
     Private Sub AddDriveRootNodes()
            'affiche les disques de l'ordinatuer
            For Each drv As DriveInfo In DriveInfo.GetDrives
                AddImageToImgList(drv.Name)
                Dim DriveNode As New TreeNode(drv.Name)
                With DriveNode
                    .Tag = drv.Name
                    .ImageKey = drv.Name
                    .SelectedImageKey = drv.Name
                    .Nodes.Add("Empty")
                End With
                TreeView_Explorer.Nodes.Add(DriveNode)
            Next
     
        End Sub
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Personnellement je n'utilise pas ce genre d'objets qui Va a l'encontre des trois Tiers ; Client, Métier,Base de Données.
    Client :=interface utilisateur
    Métier := règles de gestion des informations
    Base de Données := connexion requêtes.

    L'utilisation de dataset lie le formulaire à la base de données ce qui n'est pas conseillé dans le cadre de la maintenance curative et évolutive.
    OK je veux bien, mais comment faites vous ?
    J'apprend !

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par excalybur Voir le message
    Pour ne pas lier le programme j'utilise une recherche d’arborescence propriétaire comme celle ci-dessous. Le code est générique il faut l'adapter à chaque besoin bien sur : ...
    Merci excalybur, malgré un petit défaut, un "end sub" oublié , je vais tester.

  9. #9
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 306
    Points : 2 022
    Points
    2 022
    Par défaut
    Citation Envoyé par SiksikAlain Voir le message
    OK je veux bien, mais comment faites vous ?
    J'apprend !
    Bonjour,

    tu trouvera dans ce lien un petit projet qui interface une base Access TEST.accdb;
    il est composé:

    1. une classe "Connexion.vb" qui contient les fonction minimale pour interroger la base do données ACCESS.
      tu y trouveras le objets de connexion et de requêtage.
      tu y trouveras des surcharge de méthode entre autre;
    2. une classe "Form1Metier.vb" qui hérite de la classe Connexion pour communiquer entre la base Access et la From1
    3. et enfin la From1
    4. et bien entendu la base TEST.accdb


    https://gitlab.com/dysorthographie/b...ccess-main.zip

    je reste disponible pour toutes information.
    PS je suis en VS2019

  10. #10
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,

    tu trouvera dans ce lien un petit projet qui interface une base Access TEST.accdb;
    ...
    je reste disponible pour toutes information.
    PS je suis en VS2019
    Merci bien,
    Ca a l'air parfait, en tout cas suffisamment complet pour moi.
    Il ne me reste qu'à appliquer et modifier pour mes besoins perso.

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Soucis avec OleDb non pris en charge !
    Bonjour,

    J'ai un "gros" souci, en fait je ne comprends pas pourquoi OleDb n'est pas pris en charge ?
    Voir la copie d'écran ci-dessous.

    Système :
    - Windows 11 64 bits.
    - Visual Studio 2022; même souci avec Visual studio 2019
    - Langage Visual Basic
    - Projet Windows Forms

    PC:
    - 4 disques durs de 2To
    - 32 Go de RAM
    - Carte Graphique : NVIDIA GeForce GTX 1070
    - processeur 64 bit Intel, 4Cpu de 3.1Ghz

    Il y avait le même soucis avec Windows 10 !

    Bref je cherche simplement à atteindre une base de données par programme et à l'heure actuelle ça semble impossible !
    J'aurais préféré Microsoft Access que je maîtrise, mais au point où j'en suis n'importe quel système de base de données fera affaire.
    Je tiens à préciser que j'avais rédigé des programmes qui fonctionnaient bien sur d'anciennes versions de Visual Studio, mais qui ne fonctionnent plus !

    Outre ce simple test, j'ai tout le texte du Maharabata plus d'autres textes en sanskrit en bases Microsoft Access. (plusieurs bases >1Go)
    Sans compter d'autres données auxquelles je souhaite accéder par programme externe et non via VBA.
    Mon idée est de simplement stocker les données dans la base et de générer les requêtes (ajout, suppression, modification, consultation, sélection d'un enregistrement,...) via le programme.
    Pourquoi utiliser un programme externe ?
    Car les algorithmes sont identiques, seules les les noms de table et de champs changent !

    Questions :
    - comment faire ou comment configurer Visual Studio pour avoir accès à OldDb comme avant ?
    - ou par quoi remplacer OleDb pour accéder à une base de données ?
    - ou peut-on accéder directement à une base en l'intégrant au projet (voir Test.accdb) et comment accéder aux données ?

    Bref vrai/faux débutant même à 65 ans, après plus de 20 ans sans programmer réellement !

    PS: @Thumb down en fait je n'ai pas réussi à faire fonctionner votre programme, mais merci pour l'information.

    Nom : PB_OleDb.jpg
Affichages : 170
Taille : 156,4 Ko

  12. #12
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    novembre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 563
    Points : 2 790
    Points
    2 790
    Par défaut
    Bonjour,
    Peut-être qu'il manque un NEW ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim UneCommande As New OleDbCommand
    ....

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bien essayé mais non ça ne change rien car le type même oledbcommand n'existe pas !
    Bon j'admets ne rien comprendre à l'erreur signalée dans la fenêtre des erreurs.

    Nom : Capture d’écran 2023-05-20 164732.png
Affichages : 164
Taille : 98,4 Ko

  14. #14
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    novembre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 563
    Points : 2 790
    Points
    2 790
    Par défaut
    Bonjour,

    Je ne comprends pas ce qui ne va pas ...

    Peux-tu nous envoyer une copie d'écran montrant l'explorateur de solution bien développé ? De la manière illustrée ci-dessous.
    Il serait intéressant de nous montrer aussi la page "Application" (le 1er onglet des propriétés du projet).

    Je vois dans les premiers messages de cette discussion, que tu avais commencé un projet avec DB intégrée. Je me demande si ton projet actuel n'a pas été écrit sur le projet précédent et que c'est cela qui perturberait l'OleDB. Si tel est le cas, il te suffit de repartir d'un projet neuf de type Windows Form pour ne plus avoir de problème.

    Explorateur de solution :
    Nom : ExPloSolution.jpg
Affichages : 165
Taille : 53,0 Ko

    Onglet application :
    Nom : Applic.jpg
Affichages : 164
Taille : 114,6 Ko

    Attention ta chaîne de connexion va donnet une erreur à l exécution car il manque un backslash entre le chemin et le nom de la DB. Ceci n'a bien entendu rien à voir avec ton erreur actuelle


  15. #15
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 306
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    Je comprends pas !

    Dans le lien que je t'es fournir tu as un exemple parlant de ce qu'il faut faire.

    La parti métier herite de la partie base de données.

    C'est la partie métier que tu déclarés dans ta form avec l'instruction New.

    Dans la partie métier tu défini les méthodes qui interroge la partie base de données.

    Sur la parti base de données toutes les méthodes qui sont en relation avec la base de données existe tu n'a pas à intervenir déçu.

  16. #16
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Je comprends pas !... déçu.
    Ben justement c'est la partie base de données qui pose problème !

    Citation Envoyé par Phil Rob Voir le message
    Bonjour,

    Je ne comprends pas ce qui ne va pas ...
    Merci pour la chaine de connexion, mais ce n'est pas le problème et je m'en serais aperçu rapidement car c'est une erreur courante chez moi au début.
    Je me borne à récupérer le nom du chemin de la base directement dans la barre de l'explorateur de fichier, c'est pour faire un test et dès que ça marche à peu prés, je deviens plus portable, via "FileSystem.CurDir()".
    Vous pensez bien qu'avant de faire appel à vous j'ai tenté pleins de trucs et entre autre créer de nouveaux projets vierges histoire de voir si ça changeait quelque chose, hé bien non c'est pareil !
    J'ai aussi tenté de recompiler de vieux sources qui marchaient bien, et qui ne compilent plus toujours pour la "même" raison : dans OleDb il n'y a plus rien !
    Nom : OleDbVide.jpg
Affichages : 157
Taille : 28,3 Ko

    J'ai fais les hard copy d'écran demandées et je précise que je n'ai rajouté aucune référence autres que celles générées par Visual studio !
    C'est pareil pour tous les nouveaux projets créés.
    En entête du code je préfère rajouter des "Imports" et aimant ce qui est lisible, je privilégie "Data.OleDb.OleDbCommand" à simplement "OleDbCommand"
    J'ai la version Visual Studio Community, mais je ne pense pas que ça change quoi que ce soit.

    Nom : Capture d’écran 2023-05-21 083659.png
Affichages : 156
Taille : 42,5 Ko

    Nom : Capture d’écran 2023-05-21 083630.png
Affichages : 156
Taille : 43,6 Ko

    Nom : Capture d’écran 2023-05-21 083114.png
Affichages : 158
Taille : 59,8 Ko Nom : Capture d’écran 2023-05-21 083148.png
Affichages : 158
Taille : 57,7 Ko Nom : Capture d’écran 2023-05-21 083223.png
Affichages : 158
Taille : 63,1 Ko Nom : Capture d’écran 2023-05-21 083251.png
Affichages : 158
Taille : 60,7 Ko

  17. #17
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    novembre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 563
    Points : 2 790
    Points
    2 790
    Par défaut
    Bonjour,

    Il y a Windows Forms .Net FrameWork et .Net Core (https://dotnet.microsoft.com/en-us/d...d=getdotnetsdk).

    Ton projet est du type .Net Core (Net 7.0) (Le Net FrameWork va jusque 4.8).
    Cela n'est pas installé chez moi et je ne peux tester, ni évaluer, l'origine de ton problème. Il me faut d'abord installer le nécessaire.
    J'y regarderai ...

    En attendant, il sera sans doute utile de consulter les tutos proposés sur le site de Microsoft, auxquels on accède après chargement du .NET 7.0 SDK (v7.0.302) - Windows x64 Installer (en supposant que tu charges le NET 7.0).

    Par ailleurs, si tu n'as pas de raison de développer en NET 7.0, tu peux refaire un nouveau projet mais de type .Net FrameWork, en Net 4.8. Bien sûr ce type de projet est obsolète mais peut-être pas pour tout le monde, cela dépend de l'objectif du projet et de l'avenir auquel on le destine (s'il doit durer 10 ans, il vaut mieux travailler avec la technologie au gout du jour).
    ...

    Nom : WinForm.jpg
Affichages : 158
Taille : 56,7 Ko

  18. #18
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : octobre 2020
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Avec le framework 4.7 ça marche ou du moins il y a bien un OleDb complet !

    Par contre comme c'est fait pour durer, c'est d'ailleurs pourquoi je reprends ces codes, je vais explorer la piste du rechargement et de ses tutos.

    Je vous tiens au courant

  19. #19
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 1 306
    Points : 2 022
    Points
    2 022
    Par défaut
    Bonjour,
    chez moi ça fonctionne en VS2022
    Nom : Sans titre.png
Affichages : 148
Taille : 57,1 Ko

    quand un type d'objet est souligné en rouge positionne ta souri dessus et affiche la correction dans ton cas installer.
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    Imports System.Data.OleDb
     
     
     
    Public Class Form1
        Private Mt As Form1Metier
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Mt = New Form1Metier("C:\Git Projets\baseaccess\BaseAccess\bin\Debug\BDD\TEST.accdb")
            Dim dt As DataTable = Mt.LireTable1
        End Sub
    End Class
    Public Class Form1Metier
        Inherits Connexion
        Public Sub New(ByVal Fichier As String)
            MyBase.New(Fichier) 'ascenseur
        End Sub
     
     
     
     
     
     
        Public Function LireTable1() As DataTable
            Return DataReaderToDataTable(Execute("Select * from Table1"), "Table1")
        End Function
        Sub MajTable1(ByRef MyTable As DataTable)
            Dim lstRemoved As Integer() = MyTable.Rows.Cast(Of DataRow)().Where(Function(g) g.RowState = DataRowState.Deleted).Select(Function(t) Integer.Parse(t("Id", DataRowVersion.Original).ToString())).ToArray()
            If (lstRemoved.Count() > 0) Then
                Execute($"DELETE FROM {MyTable.TableName} WHERE [ID] in ({String.Join(",", lstRemoved)})")
            End If
     
     
     
     
            For Each d As DataRow In MyTable.Rows.Cast(Of DataRow)().Where(Function(g) g.RowState = DataRowState.Modified OrElse g.RowState = DataRowState.Added)
                Select Case d.RowState
                    Case DataRowState.Modified
                        UpdateTable1(d("ID").ToString, d("NOM").ToString, d("Prénom").ToString, MyTable.TableName)
                    Case DataRowState.Added
                        InsertTable1(d("NOM").ToString, d("Prénom").ToString, MyTable.TableName)
                End Select
                'If d.RowState <> DataRowState.Added Then d.AcceptChanges() Else d.SetAdded(True)
     
     
                d.AcceptChanges()
     
     
            Next
            MyTable = LireTable1()
        End Sub
        Private Sub UpdateTable1(ID As String, Nom As String, Prénom As String, Table As String)
            Dim prm() As ParamCmd = {New ParamCmd, New ParamCmd, New ParamCmd}
            With prm(0)
                .Name = "@Nom" : .Size = 255 : .Type = ConstType.adWChar : .Value = Nom
            End With
            With prm(1)
                .Name = "@Prénom" : .Size = 255 : .Type = ConstType.adWChar : .Value = Prénom
            End With
            With prm(2)
                .Name = "@ID" : .Size = 16 : .Type = ConstType.adBigInt : .Value = ID
            End With
            Execute($"UPDATE [{Table}] SET [Nom] =?,[Prénom]=? WHERE [Id]=?", prm)
        End Sub
        Sub InsertTable1(Nom As String, Prénom As String, Table As String)
            Dim prm() As ParamCmd = {New ParamCmd, New ParamCmd}
            With prm(0)
                .Name = "@Nom" : .Size = 255 : .Type = ConstType.adWChar : .Value = Nom
            End With
            With prm(1)
                .Name = "@Prénom" : .Size = 255 : .Type = ConstType.adWChar : .Value = Prénom
            End With
            Execute($"Insert into [{Table}] ([Nom],[Prénom]) Values(?,?)", prm)
        End Sub
    End Class
     
     
     
     
    Public Class Connexion
        Public Structure ParamCmd
            Public Name As String
            Public Type As ConstType
            Public Direction As ConstDirection
            Public Size As Long
            Public Value As String
        End Structure
        Public Enum ConstDirection
            adParamUnknown = 0      '    Indique que la direction du paramètre est inconnue.
            adParamInput = 1        '    Par défaut. Indique que le paramètre représente un paramètre d'entrée.
            adParamOutput = 2       '    Indique que le paramètre représente un paramètre de sortie.
            adParamInputOutput = 3  '    Indique que le paramètre représente à la fois un paramètre d’entrée et de sortie.
            adParamReturnValue = 4  '    Indique que le paramètre représente une valeur de retour.
        End Enum
        Public Enum ConstType
            adEmpty = 0             '    Indicates an eight-byte signed integer (DBTYPE_I8).
            adSmallInt = 2          '    Indicates a binary value (DBTYPE_BYTES).
            adInteger = 3           '    Indicates a Boolean value (DBTYPE_BOOL).
            adSingle = 4            '    Indicates a null-terminated character string (Unicode) (DBTYPE_BSTR).
            adDouble = 5            '    Indicates a four-byte chapter value that identifies rows in a child rowset (DBTYPE_HCHAPTER).
            adCurrency = 6          '    Indicates a string value (DBTYPE_STR).
            adDate = 7              '    Indicates a currency value (DBTYPE_CY). Currency is a fixed-point number with four digits to the right of the decimal point. It is stored in an eight-byte signed integer scaled by 10,000.
            adBSTR = 8              '    Indicates a date value (DBTYPE_DATE). A date is stored as a double, the whole part of which is the number of days since December 30, 1899, and the fractional part of which is the fraction of a day.
            adIDispatch = 9         '    Indicates a date value (yyyymmdd) (DBTYPE_DBDATE).
            adError = 10            '    Indicates a time value (hhmmss) (DBTYPE_DBTIME).
            adBoolean = 11          '    Indicates a date/time stamp (yyyymmddhhmmss plus a fraction in billionths) (DBTYPE_DBTIMESTAMP).
            adVariant = 12          '    Indicates an exact numeric value with a fixed precision and scale (DBTYPE_DECIMAL).
            adIUnknown = 13         '    Indicates a double-precision floating-point value (DBTYPE_R8).
            adDecimal = 14          '    Specifies no value (DBTYPE_EMPTY).
            adTinyInt = 16          '    Indicates a 32-bit error code (DBTYPE_ERROR).
            adUnsignedTinyInt = 17  '    Indicates a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (DBTYPE_FILETIME).
            adUnsignedSmallInt = 18 '    Indicates a globally unique identifier (GUID) (DBTYPE_GUID).
            adUnsignedInt = 19      '    Indicates a pointer to an IDispatch interface on a COM object (DBTYPE_IDISPATCH).
            adBigInt = 20           '    Indicates a four-byte signed integer (DBTYPE_I4).
            adUnsignedBigInt = 21   '    Indicates a pointer to an IUnknown interface on a COM object (DBTYPE_IUNKNOWN).
            adFileTime = 64         '    Indicates a long binary value.
            adGUID = 72             '    Indicates a long string value.
            adBinary = 128          '    Indicates a long null-terminated Unicode string value.
            adChar = 129            '    Indicates an exact numeric value with a fixed precision and scale (DBTYPE_NUMERIC).
            adWChar = 130           '    Indicates an Automation PROPVARIANT (DBTYPE_PROP_VARIANT).
            adNumeric = 131         '    Indicates a single-precision floating-point value (DBTYPE_R4).
            adUserDefined = 132     '    Indicates a two-byte signed integer (DBTYPE_I2).
            adDBDate = 133          '    Indicates a one-byte signed integer (DBTYPE_I1).
            adDBTime = 134          '    Indicates an eight-byte unsigned integer (DBTYPE_UI8).
            adDBTimeStamp = 135     '    Indicates a four-byte unsigned integer (DBTYPE_UI4).
            adChapter = 136         '    Indicates a two-byte unsigned integer (DBTYPE_UI2).
            adPropVariant = 138     '    Indicates a one-byte unsigned integer (DBTYPE_UI1).
            adVarNumeric = 139      '    Indicates a user-defined variable (DBTYPE_UDT).
            adVarChar = 200         '    Indicates a binary value.
            adLongVarChar = 201     '    Indicates a string value.
            adVarWChar = 202        '    Indicates an Automation Variant (DBTYPE_VARIANT).
            adLongVarWChar = 203    '    Indicates a numeric value.
            adVarBinary = 204       '    Indicates a null-terminated Unicode character string.
            adLongVarBinary = 205   '    Indicates a null-terminated Unicode character string (DBTYPE_WSTR).
        End Enum
        Public Enum CommAdo
            dCmdUnspecified = -1    '    Does not specify the command type argument.
            adCmdText = 1           '    Evaluates CommandText as a textual definition of a command or stored procedure call.
            adCmdTable = 2          '    Evaluates CommandText as a table name whose columns are all returned by an internally generated SQL query.
            adCmdStoredProc = 4     '    Evaluates CommandText as a stored procedure name.
            adCmdUnknown = 8        '    Default. Indicates that the type of command in the CommandText property is not known.
            adCmdFile = 256         '    Evaluates CommandText as the file name of a persistently stored Recordset. Used with Recordset.Open or Requery only.
            adCmdTableDirect = 512  '    Evaluates CommandText as a table name whose columns are all returned. Used with Recordset.Open or Requery only. To use the Seek method, the Recordset must be opened with adCmdTableDirect. This value cannot be combined with the ExecuteOptionEnum value adAsyncExecute.
        End Enum
        Private cnx As OleDbConnection = Nothing
        Private _Fichier As String
        Protected Sub New(ByVal Fichier As String)
            _Fichier = Fichier
        End Sub
        Protected Function OpenConnexion()
            '"Provider=Microsoft.ACE.OLEDB.14.0
            Dim GenereCSTRING As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _Fichier & ";"
            cnx = New OleDbConnection(GenereCSTRING)
            Try
                cnx.Open()
                Return True
            Catch ex As Exception
                Return ex.Message
            End Try
        End Function
        Protected Function Execute(ByVal Sql As String) As OleDbDataReader
            If cnx Is Nothing Then OpenConnexion()
            Using cmd As New OleDb.OleDbCommand(Sql, cnx)
                Try
                    Return cmd.ExecuteReader()
                Catch ex As Exception
                    Return Nothing
                End Try
            End Using
        End Function
        Protected Function Execute(ByVal Sql As String, ByVal Param As Object) As OleDbDataReader
            If cnx Is Nothing Then OpenConnexion()
            Using cmd As New OleDb.OleDbCommand(Sql, cnx)
                For Each c As Object In Param
                    If c.Size <> 0 Then cmd.Parameters.Add(c.Name, c.Type, c.Size).Value = c.Value
                Next
                Try
                    Return cmd.ExecuteReader()
                Catch ex As Exception
                    Return Nothing
                End Try
            End Using
        End Function
        Protected Function DataReaderToDataTable(DR As OleDbDataReader) As DataTable
            Using TD As DataTable = New DataTable
                TD.Load(DR)
                Return TD
            End Using
        End Function
        Protected Function DataReaderToDataTable(DR As OleDbDataReader, TableName As String) As DataTable
            Using TD As DataTable = New DataTable
                TD.Load(DR)
                TD.TableName = TableName
                Return TD
            End Using
        End Function
        Public Sub CloseConnexion()
     
     
            cnx.Close()
            cnx.Dispose()
            cnx = Nothing
        End Sub
     
     
        Protected Overrides Sub Finalize()
     
     
            MyBase.Finalize()
        End Sub
    End Class

  20. #20
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    novembre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 563
    Points : 2 790
    Points
    2 790
    Par défaut
    Bonjour,

    De toute évidence, il manque une librairie. Le problème n'est pas exceptionnel.
    https://stackoverflow.com/questions/...ized-in-vb-net

    Et de fait, il suffit d'installer le NuGet adéquat et tout rentre dans l'ordre.

    Nom : OleDb3.jpg
Affichages : 139
Taille : 139,6 Ko

    Très bonne journée à tous ....

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/05/2015, 05h20
  2. [XL-2003] Comment faire rapidement pour que la fenêtre Propriétés soit solidaire de tout le bloc VBA
    Par Un Internaute dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2015, 11h51
  3. Impossible de rajouter une source de données dans mon projet
    Par iviewclear dans le forum Visual Studio
    Réponses: 6
    Dernier message: 31/10/2012, 14h56
  4. Réponses: 7
    Dernier message: 14/12/2007, 09h02
  5. Réponses: 8
    Dernier message: 17/08/2006, 16h16

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