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 :

Connexion accdb avec windows10 64bit


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut Connexion accdb avec windows10 64bit
    Bonjour,
    Voilà mon problème:
    Je développe une application Windows forme. Cette appli ce connecte à une BDD .accdb, et cela fonctionne bien. Cependant, cela ne fonctionne pas sur toutes les configuration.
    Voici un extrait de mon code de connexion et de lecture: (ce que j'apprécie avec cette méthode, est que je travail avec une chaine SQL pour toute mes opération)
    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
     
    Friend ContenuColonne() As String
    Public CheminAplication As String = Application.StartupPath 
    'Déclaration de la variable pour la connection      
    Public cnx As New OleDbConnection
    'Déclaration de la variable pour la connectionstring      
    Private cnxstr As String
    'Déclaration de la variable pour la commande       
    Private cmd As OleDbCommand
     
    Public Sub OpenConnexionBdd()
    	'ouverture de la connexion
            cnxstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CheminAplication & "\BDD.accdb";"
            cnx.ConnectionString = cnxstr
            Try
                cnx.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    End Sub
     
    Public Sub CloseConnexionBdd()
    	'fermeture de la connexion
            Try
                cnx.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    End Sub
     
    Public Sub ReadBdd(ByVal LeChamp As String, ByVal LaTable As String)
            Try
                'Création de la requête sql   
                Dim SQL As String = "SELECT " & LeChamp & " FROM " & LaTable & ";"
                Dim i As Long
                'Création de la commande et on l'instancie (sql)       
                cmd = New OleDbCommand(SQL)
                'On instancie la commande (cmd) à la connection (cnx)       
                cmd.Connection() = cnx
    	    'récupère le contenu de la colonne
                Dim dre As OleDbDataReader = cmd.ExecuteReader()
                i = 0
                ReDim ContenuColonne(i)
                While dre.Read()
                    ReDim Preserve ContenuColonne(i)
                    ContenuColonne(i) = dre(0).ToString()
                    i = i + 1
                End While
                dre.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    End Sub
     
    'lorsque l'on active un radio bouton, la listbox1 est rempli avec ces donnée
    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
            If RadioButton1.Checked = True Then
                Call OpenConnexionBdd()
                Call ReadBdd("Champ2", "Table1")
                Call CloseConnexionBdd()
                ListBox1.DataSource = ContenuColonne
                Label.Text = "Résultats: " & ContenuColonne.Count
             End If
    End Sub
    'Pour exemple, permet de modifier une valeur de la ligne, à vous de modifier selon vos besoins
    Public Sub ModifieValeurBddTable(ByVal valCle As String, ByVal val1 As String, ByVal champ1 As String)
            'création de la SQL
            Dim LesModifs As String = ""
    	'si plusieur valeur à changer, ajoutez des teste en fonction de ce que l'on veux et des paramètre dans la procedure, ou imaginer quelque chose avec un tableau
            If valModele & "" <> "" Then
                LesModifs = LesModifs & champ1 & " = '" & val1 & "', "
            End If
            'suppression de la virgule des de l'espace
            LesModifs = LesModifs.Substring(0, LesModifs.Length - 2)
            Dim SQL As String = "UPDATE Table1 SET " & LesModifs & " WHERE ChampCle = " & valCle & ";"
            'Création de la commande et on l'instancie (sql)       
            cmd = New OleDbCommand(SQL)
            'On instancie la commande (cmd) à la connection (cnx)       
            cmd.Connection() = cnx
            cmd.ExecuteNonQuery()
     End Sub
     'et pour la suppression ou l'insertion, il suffit de mettre la bonne chaine SQL
    Comme je le disais, cela fonctionne bien avec ma configuration (Windows10 64bit, office 32bit, et access database engine 2010 64 bit installé)
    Cependant, cette application devra finir par être exécuté sur des poste qui n'ont pas access database engine d'installer, sans aucun moyen de l'installer.
    Les poste qui devrons l’exécuter sont des poste avec windows10 64bit, et office 32bit ou 64bit standard (sans access), et pas de possibilité de changer les configurations.
    d’où ma question, avez vous une idée de comment le faire?
    Existe-t-il un moyen de mettre des bibliothèque à coté du programme et qu'il utilise la bonne en fonction de la configuration reconnu?
    Ou dois-je seulement changer de chaine de connexion en fonction des configurations rencontré?
    Peut-être que je dois carrément changer de base de donnée, et si c'est le cas, par quoi? et comment le faire?
    Ou avez-vous une autre suggestion?

    Merci d'avance à toute les personnes qui prendrais le temps et la peine de m'expliquer leur idées (sans forcement commenter mon code qui n'est là que pour aider d'autre personne qui chercherais un exemple pour faire une connexion à une base de donnée et cela de la façon la plus simple possible. Sans builder et autre dataset...).

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 236
    Par défaut
    Bonjour,

    Office n'est pas livré par défaut avec le moteur Access donc obligé de l'installer.

    Il est par contre tout à fait possible d'embarquer les dlls du moteur Access dans l'installeur de ton programme et copier les bons fichiers (32 ou 64) selon la config du poste, mais encore faut-il savoir précisément quelles dlls sont installées et dans quel répertoire donc galère...

  3. #3
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    le programme final ne devrait même pas être installer, l'exe est simplement mis dans un répertoire d'un serveur, puis les gens ont simplement un raccourci sur leur bureau.
    Donc si je savais comment avoir ces dlls à mettre dans le même répertoire que l'exe, et comment dans mon projet visual studio y faire référence, cela m'arrangerai bien. Les postes ont tous Windows 10 64bit, pour le reste, si je savais quel dlls et comment y faire référence, normalement cela ne devrai même pas impacter les diverse installation des postes. M'enfin je croie ^^

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    le programme final ne devrait même pas être installer, l'exe est simplement mis dans un répertoire d'un serveur, puis les gens ont simplement un raccourci sur leur bureau
    Sauf erreur de ma part, un exe stocké dans un dossier d'un autre ordi, serveur ou pas, s'exécute dans la mémoire et dans le système du poste qui l'exécute. C'est pourquoi, le même programme peut être exécuté sur la machine qui le stocke (éventuellement sevreur) et sur toutes les ordis qui possèdent la même configuration utile au programme. Ainsi, dans cet exemple, si un des ordis n'a pas d'Access installé, ton programme ne peut fonctionner sur cet ordi.
    Pour ce qui est d'obtenir les dll nécessaires, un package d'installation "Any CPU" devrait trouver lui-même les dll et les mettre dans le package.
    Je crois que l'installation (par package) sur chaque poste serait plus fonctionnel que la mise à disposition sur un dossier partagé.
    J'espère que ceci te mettra sur la bonne piste ...

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    pour des dll .net les mettre à côté de l'exe suffit, pour les dll COM ce n'est pas le cas, il faut les registrer (en général on les met dans Windows\system32)
    ace ole db ca doit être du COM, donc il faudra qu'il soit installé sur chaque poste

    mettre un exe dans un dossier partagé sur un serveur et le lancer sur un autre poste ca fait comme si l'exe était sur le poste client, ca ne voit pas ce qu'il y a d'installé sur le système du serveur (ca serait grave)

    mettre un exe dans un dossier partagé et avoir un raccourci sur le bureau d'autres postes du réseau ca ne se fait pas, il faut installer une copie sur chaque poste (avec un installeur ou pas) et gérer les mises à jour (avec un installer ou pas)
    y a un post pas loin qui parle de ca : Une belle interface ?

    access c'est nul (après tu peux l'utiliser quand même …)

    access n'est pas une base de données réseau optimale pour gérer plusieurs connexions depuis plusieurs postes

    ace ole db existe en standalone (exe qui installe les dll dans Windows et les registre), peut etre en x86 et x64 donc installer le bon selon les OS, après ton programme devra être en AnyCpu pour fonctionner dans les 2 cas
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    comme je l'ai dit plus haut, le chois de la version est déjà fait, car Windows 64bit est installer sur tout les postes par défaut.

    J'ai fait un test du programme sur un PC qui n'a pas access d'installer, et cela ne fonctionne pas. Et je ne pourrais pas changer la configuration des postes. Ça serait vraiment plus simple si c’était le cas.

    mettre un exe dans un dossier partagé et avoir un raccourci sur le bureau d'autres postes du réseau ca ne se fait pas,
    Ça ne se fais pas, mais c'est la seule façon qui m'est laisser. Voilà pourquoi je cherche une solution. Alors je me suis dit qu'il devait bien y avoir une méthode pour lire la base de donnée access sans pour autant devoir installer le moteur access. Et même que je ne souhaite que la lire, car le peut de personne qui aurait un access en écriture, serait des personne qui aurai le moteur access d'installé.

    Peut-être que je devrais changer de BDD, mais remplacer par quoi?
    L'imperatif dans mon problème c'est vraiment que je ne peux changer les PC qui l'utiliserai.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    Citation Envoyé par Macstorm Voir le message
    c'est la seule façon qui m'est laissée
    si on te demandais de peindre un mur avec un marteau tu essayerais quand même en te disant que tu n'as pas le choix ?

    si les utilisateurs ont accès au dossier réseau ils peuvent le copier sur leur machine plutôt que de le lancer depuis un dossier réseau (ou tu peux y mettre un installer qui installe l'exe sur leur machine)
    après ca nécessitera que tu fasses un système de mise à jour


    tu peux utiliser sql server express qui est une base de données réseau, le code nécessaire pour y accéder est inclus dans le Framework (peut etre SQLite aussi si tu veux continuer à faire n'importe quoi)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    si on te demandais de peindre un mur avec un marteau tu essayerais quand même en te disant que tu n'as pas le choix ?
    quoi que tu en pense, il existe des tissus qui retienne la peinture, et j'en utiliserai pour mettre autour du marteau afin de pouvoir faire le bouleau, c'est pas l’idéal, mais c'est mieux que rien, (pendant longtemps MacGyver était mon idole )... Je cherche justement ce tissu...

    Que le programme soit en local ou sur le serveur, ça ne me change pas le problème. Je n'arrive pas à lire la BDD si il n'y a pas access (ou sont moteur) d'installer sur le poste.

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    passe donc sur sql server express (gratuit), ca s'installe sur le serveur et ca fonctionnera depuis le dossier réseau
    en plus c'est une base de données faite pour être multi utilisateur, alors qu'access n'est pas spécialement concu pour
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    Après plein de recherche, voici la synthèse de tout les informations que j'ai trouver:
    Les drivers de gestion d'une base de donnée au format .accdb ne sont pas installés par défaut avec Windows 10 64bits, ni avec un Office sans Access.(Contrairement au drivers pour les .mdb)
    Les drivers en question sont installés uniquement en installant Access ou son monteur.
    Du coup, il n'est pas possible d'utilisé une BDD .accdb sans modifier la configuration de la machine.
    L'une des différence importante entre .accdb et .mdb pour mon cas, est la prise en charge du 64bits dans la gestion même du fichier de donnée.
    Suite à cela, ma solutions à été la suivant:
    Le faite est que dans ce que je cherche à faire avec ma BDD, qu'elle soit 64bits ou 32bits n'a pas d'importance.
    Don j'ai convertie ma base de donnée au format .mdb, en faisant un simple "Enregistrer sous..."
    Et sous Visual Studio, dans la gestion de mon projet à l'onglet de la compilation, j'ai sélectionné "AnyCPU" sans oublier de coché "Préférer 32bits".
    Puis dans mon code, j'ai remplacer dans ma chaine de connexion "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CheminAplication & "\BDD.accdb";"
    par "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & CheminAplication & "\BDD.accdb";"
    La solution d'un serveur SQL aurai pu être bon, cependant le client demandeur est d'un type parano, et même au niveaux du serveur, il ne veux pas que l'on n'y touche. Et donc j'en reviens as ce que j'ai dis plus haut, je ne peux que copier des fichiers dans un dossier partagé et c'est tout. Et donc il me fallait faire un exécutable complétement autonome.

    Merci quand même à tous d'avoir essayer de m'aider.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/02/2016, 00h48
  2. Réponses: 6
    Dernier message: 15/05/2005, 14h11
  3. [web] Connexion http avec ID et PW
    Par Batou dans le forum Web
    Réponses: 2
    Dernier message: 07/03/2005, 08h03
  4. pool de connexion jdbc avec apache
    Par de LANFRANCHI dans le forum Oracle
    Réponses: 9
    Dernier message: 24/01/2005, 16h34
  5. Maintenir une connexion ouverte avec ssh
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 2
    Dernier message: 23/01/2005, 21h39

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