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

Accès aux données Discussion :

Probleme de nom de champs et de table lors de l'update de ma db


Sujet :

Accès aux données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Probleme de nom de champs et de table lors de l'update de ma db
    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.

    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")
    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
    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")
    'Mise a jour
    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.

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Le developpement est un art et il faut travailler dans les règles de l'art.

    Ne pas utiliser les espaces, @,-,+ dans le nom d'un objet d'une base de données.

    Utilise une vrai requête update que tu vas lancer à travers la méthode ExecuteNonQuery d'un objet Command. Eviter les binding car l'on ne maîtrise pas ce qui se passe.

    Merci.

    Un conseil :

    Ouvre la connection juste au moment ou tu joue la requête et deconnecte toi par la suite pour des raisons de performances.
    A mon avis, tu n'es pas obligé d'ouvrir la connection lorsque tu travailles avec un dataadapter.

Discussions similaires

  1. [Conception] Mettre a jour tout les champs d'un table lors d'un update
    Par metatron dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/09/2006, 15h29
  2. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 16h55
  3. Modifier nom de champ d'une table Paradox 7
    Par teska dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/11/2004, 13h09
  4. nom des champs d'une table
    Par K-ZimiR dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2004, 14h21
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00

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