Salut,
Voici la classe. Elle fonctionne bien mise à part le DataAdapter..., je suis pas sur d'avoir tout bien codé
<!-- BEGIN TEMPLATE: bbcode_code -->
Code VB.Net :
Imports System
Imports System.Data
Imports System.Data.OleDb
FriendClass AccesOleDb
Private objDataSet AsNew DataSet
Private objDataAdapter AsNew OleDbDataAdapter
Private objCommandBuilder As OleDbCommandBuilder
PublicFunction GetConnection()As OleDbConnection
Dim objConnection As OleDbConnection
Dim strConnection AsString
' Initialisation de la chaîne de paramètres pour la connexion
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & Application.StartupPath & "\Source\Parc Vehicule.mdb;"
' Instanciation d'un objet Connexion
objConnection = New OleDbConnection()
' Donner à la propriété ConnectionString les paramètres de connexion
objConnection.ConnectionString = strConnection
' Retourner l'objet Connexion
Return objConnection
EndFunction
PublicFunction CreateDbCommand(ByVal strCommandText AsString)As OleDbCommand
Dim objCommand As OleDbCommand
objCommand = GetConnection.CreateCommand()
objCommand.CommandType = Data.CommandType.Text
objCommand.CommandText = strCommandText
objCommand.Connection = GetConnection()
' Retourner l'objet Command
Return objCommand
EndFunction
PublicFunction CreateDataAdapter(ByVal strCommandText AsString)As OleDbDataAdapter
' Création du DataAdapter
objDataAdapter.SelectCommand = CreateDbCommand(strCommandText)
' Retourner l'objet DataAdapter
Return objDataAdapter
EndFunction
PublicFunction CreateDataSet(ByVal strRequete AsString, ByVal strNameTable AsString)As DataSet
' Ouvrir la connexion
OpenConnection()
' Remplir le DataSet
CreateDataAdapter(strRequete).Fill(objDataSet, strNameTable)
' Fermer la connexion
CloseConnection()
' Retourner l'objet DataSet rempli
Return objDataSet
EndFunction
PublicFunction CreateDataTable(ByVal strRequete AsString, ByVal strNameTable AsString)As DataTable
Dim objDataTable AsNew DataTable
objDataSet = CreateDataSet(strRequete, strNameTable)
objDataTable = objDataSet.Tables(strNameTable)
Return objDataTable
EndFunction
PublicFunction CreateDataRow(ByVal strNameTable AsString, ByVal alstValeur As ArrayList)As DataRow
Dim objDataRow As DataRow
' Ajout de la nouvelle ligne dans la table du DataSet
objDataRow = objDataSet.Tables(strNameTable).NewRow()
' Insertion des élèments contenus dans la liste, dans la nouvelle ligne
Dim i AsInteger
For i = 0To alstValeur.Count - 1
objDataRow(i) = alstValeur.Item(i)
Next i
' Ajout de la ligne à la table
objDataSet.Tables(strNameTable).Rows.Add(objDataRow)
Return objDataRow
EndFunction
PublicFunction CreateCommandBuilder()As OleDbCommandBuilder
objCommandBuilder = New OleDbCommandBuilder(objDataAdapter)
Return objCommandBuilder
EndFunction
PublicSub UpdateDb(ByVal strNameTable AsString)
objCommandBuilder = CreateCommandBuilder()
' Mise à jour
objDataAdapter.Update(objDataSet, strNameTable)
EndSub
PublicFunction OpenConnection()
' Création de la connexion
Dim objConnection As OleDbConnection
objConnection = GetConnection()
Try
' Ouverture de la connexion
objConnection.Open()
Catch ex As Exception
' Erreur de connexion
CloseConnection()
EndTry
Return objConnection
EndFunction
PublicFunction CloseConnection()
' Création de la connexion
Dim objConnection As OleDbConnection
objConnection = GetConnection()
Try
' Fermeture de la connexion
objConnection.Close()
Catch ex As Exception
EndTry
Return objConnection
EndFunction
EndClass
<!-- END TEMPLATE: bbcode_code -->
Pour exemple du problème:
Dans le formulaire,
- J'importe la classe
- je déclare une nouvelle instance de ma classe
- je charge une 1ère table
<!-- BEGIN TEMPLATE: bbcode_code -->
Code VB.Net :
Dim strFiltreRepertoire AsString
strFiltreRepertoire = "SELECT Tbl_Test.* " & _
"FROM Tbl_Test;"
NewAccess.CreateDataSet(strFiltreRepertoire, "Tbl_Test")
<!-- END TEMPLATE: bbcode_code -->
- Je charge la 2ème table
<!-- BEGIN TEMPLATE: bbcode_code -->
Code VB.Net :
Dim strFiltreVehicule AsString
strFiltreVehicule = "SELECT Tbl_Vehicule.* " & _
"FROM Tbl_Vehicule;"
NewAccess.CreateDataSet(strFiltreVehicule, "Tbl_Vehicule")
<!-- END TEMPLATE: bbcode_code -->
- j'ajoute une ligne à la table Tbl_Vehicule (la 2ème)
<!-- BEGIN TEMPLATE: bbcode_code -->
Code VB.Net :
Dim alstTest AsNew ArrayList
With alstTest
.Add(Me.TextBox1.Text)
.Add(Me.TextBox2.Text)
.Add(Me.TextBox3.Text)
.Add(Me.TextBox4.Text)
.Add(Me.TextBox5.Text)
EndWith
NewAccess.CreateDataRow("Tbl_Test", alstTest)
<!-- END TEMPLATE: bbcode_code -->
- jusqu'ici tout va bien, si regarde la DataTable dans le DataSet je retrouve bien mon ajout
- j'update les modifications
<!-- BEGIN TEMPLATE: bbcode_code -->
Code VB.Net :
NewAccess.UpdateDb("Tbl_Test")
<!-- END TEMPLATE: bbcode_code -->
Et la j'obtiens une erreur
<!-- BEGIN TEMPLATE: bbcode_quote -->
Citation:
DataColumn 'Immatriculation' manquant dans DataTable 'Tbl_Test' pour SourceColumn 'Immatriculation'.
<!-- END TEMPLATE: bbcode_quote -->
Immatriculation appartient à la table Tbl_Vehicule.
Si je charge les tables dans le sens inverse, je ne rencontre pas ce problème.
Voili Voulou ...
Merci pour le coup de main
Gwendal
Afficher la suite