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:
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...).