Bonjour a tous,
J'ai un probleme de mise a jours de ma base de donnees access. En fait c'est assez simple a comprendre mais je n'ai trouve aucune solution a mon probleme meme en passant toute une journee dessus.
J'explique:
J'ai une base de donnees access avec juste une table nommee, et c'est ici que commence deja les problemes, "Tab BinMap l'espace pose probleme lors de ma requette. Ensuite j'ai aussi des champs a l'interieur de ma table qui eux posent aussi probleme avec un tiret comme "LE-type".
Etrangement lors d'une simple requette, pour recuperer uniquement des enregistrements cela ne pose aucun probleme si ce n'est que je suis oblige de mettre des crochets dans les differents champs de ma requette.
Par contre lors d'une requete "update", il est impossible de la traiter
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 Dim dsBinMap As New DataSet() Dim conn As OleDbConnection Dim commande As OleDbCommand Dim strSQL As String Dim daBinMap As OleDbDataAdapter Dim strConn As String Dim dtBinMap As DataTable Dim i As Integer Dim intProf As Integer Dim intSubDiv_x As Integer Dim intPos_x As Integer 'Initialisation du jeux de parametres pour la connexion strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CheminDb & ";User Id=admin;Password=;" 'Initialisation de l'instruction SQL strSQL = "SELECT [aisle], [X-adress], [Y-adress], [side], [BinOccupied], [depth], [subdiv-X], [pos-X], [LE-Type], [order] FROM [Tab BinMap] WHERE [aisle] = " & Allee & " and [X-adress] = " & Adresse_x & " and [Y-adress] = " & Adresse_y & " and [side] = " & Cote & " and [BinOccupied] = " & Historique & " ORDER by [depth]" 'Instanciation de l'objet de connexion conn = New OleDbConnection() 'Parametres de connexion pour la propriete connectString conn.ConnectionString = strConn 'Ouverture de la connexion conn.Open() 'Instanciation de l'objet commande commande = New OleDbCommand(strSQL) 'Instanciation de l'objet adapter daBinMap = New OleDbDataAdapter(commande) 'Initialisation de l'objet commande commande.Connection() = conn 'Chargement du dataset daBinMap.Fill(dsBinMap, "Tab BinMap") 'Charger dans la datatable la table contenue dans le dataset dtBinMap = dsBinMap.Tables("Tab BinMap")
'Mise a jour
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 Dim dsBinMap As New DataSet() Dim conn As OleDbConnection Dim commande As OleDbCommand Dim strSQL As String Dim daBinMap As OleDbDataAdapter Dim strConn As String Dim dtBinMap As DataTable Dim drBinMap As DataRow Dim cbBinMap As OleDbCommandBuilder 'Initialisation du jeux de parametres pour la connexion strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CheminDb & ";User Id=admin;Password=;" 'Initialisation de l'instruction SQL strSQL = "SELECT [ID], [LE-Type], [BinOccupied], [order] FROM [Tab BinMap] WHERE [aisle] = " & Allee & " and [X-adress] = " & Adresse_x & " and [Y-adress] = " & Adresse_y & " and [side] = " & Cote & " and [depth] = " & Profondeur & " and [LE-type] = " & Type & " and [pos-X] = " & Pos_x & " ORDER by [depth]" 'Instanciation de l'objet de connexion conn = New OleDbConnection() 'Parametres de connexion pour la propriete connectString conn.ConnectionString = strConn 'Ouverture de la connexion conn.Open() 'Instanciation de l'objet commande commande = New OleDbCommand(strSQL) 'Instanciation de l'objet adapter daBinMap = New OleDbDataAdapter(commande) 'Initialisation de l'objet commande commande.Connection() = conn 'Chargement du dataset daBinMap.Fill(dsBinMap, "Tab BinMap") 'Charger dans la datatable la table contenue dans le dataset dtBinMap = dsBinMap.Tables("Tab BinMap") 'Message signalant que la supression de l'UM n'est pas possible If dtBinMap.Rows.Count = 0 Then 'Si table vide alors... MessageBox.Show("Suppression de l'UM non réalisable", "Vider emplacement", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub Else '...sinon verification que l'emplacement n'est pas déja vide If dtBinMap.Rows(0).Item("BinOccupied") = False Then MessageBox.Show("Emplacement déja vide", "Vider emplacement", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End If End If 'Extraction de l'enregistrement de la requete drBinMap = dsBinMap.Tables("Tab BinMap").Rows(0) 'Modification des differents champs drBinMap("LE-Type") = 2 'Recompilation des donnees modifiees avant le remplissage du dataadapter cbBinMap = New OleDbCommandBuilder(daBinMap) 'Mise a jour daBinMap.Update(dsBinMap, "Tab BinMap") 'Vidage du dataset puis remplissage dsBinMap.Clear() daBinMap.Fill(dsBinMap, "Tab BinMap") dtBinMap = dsBinMap.Tables("Tab BinMap")
daBinMap.Update(dsBinMap, "Tab BinMap")
Arrive a cette instruction je me retrouve avec un message d'erreur "Erreur de syntaxe dans l'instruction UPDATE." Si je supprime tous les tirets dans mes differents champs LE-type -----> LEtype, le traitement de l'instruction se fait.
Mais arrive a l'instruction suivante :
'Mise a jour
daBinMap.Update(dsBinMap, "Tab BinMap")
Je me retrouve avec l'erreur "Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'Tab'. Assurez-vous qu'elle existe et qu'elle est correctement orthographiée." Si je renomme ma table Tab BinMap ------> TabBinMap, le traitement de l'instruction se fait.
Mon enregistrement est bien update et le programme se termine sans erreur.
Donc je me retrouve avec deux problemes, le nom de ma table et le noms des differents champs. Il m'est bien entendu impossible de renommer la table et les champs. Il y a t-il une solution a mon probleme?
Je vous remercie d'avance de votre aide.
Partager