Classe pour Gestion Access, DataAdapter ?

Résolu
Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011 - 15 janv. 2007 à 22:42
Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011 - 16 janv. 2007 à 13:47
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

1 réponse

Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011
16 janv. 2007 à 13:47
Résolu..... Je pars sur une architecture 3 couches... Je verrais bien.

Gwendal
3
Rejoignez-nous