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

VB.NET Discussion :

Mise à jour DB Access: Aucune valeur donnée pour un ou plusieurs des paramètres requis


Sujet :

VB.NET

  1. #1
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut Mise à jour DB Access: Aucune valeur donnée pour un ou plusieurs des paramètres requis
    Bonjour,

    Décidément, mettre à jour une base de données Access depuis Visual Basic n'est pas de tout repos.

    J'essaye d'insérer des records dans une table sur base d'une table créée en mémoire.

    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
      Function CopyToDB(ByRef tblSource As DataTable, ByVal strDbFile As String) As Boolean
        Dim adapter As OleDbDataAdapter
        Dim connection As New OleDbConnection
        Dim ds As New DataSet
        Dim fi As New FileInfo(strDbFile)
        Dim strConnect As String = ""
        Dim strInsertCommand As String
        Dim strTable As String = ""
        Dim tblDest As DataTable
     
        If Not fi.Exists Then
          MsgBox(String.Format("The file {0} doesn't exist", strDbFile))
          Return False
          Exit Function
        End If
     
        Select Case fi.Extension.ToUpper
          Case ".ACCDB"
     
            strConnect = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Jet OLEDB:Database Password={1};", strDbFile, "ThePassword")
            strTable = "CounterParty"
            connection.ConnectionString = strConnect
     
            Try
              connection.Open()
     
              adapter = New OleDbDataAdapter("SELECT * FROM " & strTable & ";", connection)
              Dim cmdBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
              adapter.Fill(ds)
              tblDest = ds.Tables(0)
     
              strInsertCommand = "INSERT INTO CounterParty (ID, Name, NickName, AccountNumber, AccountCountry) VALUES (?, ?, ?, ?, ?)"
              adapter.InsertCommand = New OleDbCommand(strInsertCommand)
     
              For Each record As DataRow In tblSource.Rows
     
                tblDest.ImportRow(record)
                'Stop
                Debug.Print(String.Join("|", tblDest.Rows(tblDest.Rows.Count - 1).ItemArray))
                adapter.Update(tblDest) ' <== Erreur ici
              Next
     
            Catch ex As Exception
              MsgBox(ex.Message)
              Return False
            End Try
     
            Return True
          Case Else
            Return False
        End Select
     
      End Function
    Erreur au moment de l'Update:
    Aucune valeur donnée pour un ou plusieurs des paramètres requis.
    J'ai d'abord essayé de faire l'update à la fin de la boucle.
    Comme ça ne fonctionnait pas, je l'ai mis dans la boucle et pas mieux.

    J'ai expressément réduit le nombre des champs dans les 2 tables et n'en ai gardé que 5 pour éviter les champs spéciaux tels que Mémo et AutoNumber.

    Quoi que je tente, j'ai toujours cette foutue erreur.

    Les cas trouvés sur Google sont toujours liés à des Queries complexes ou mal formulées.
    Dans mon cas, la commande INSERT INTO a été réduite au plus simple.

    Merci à ceux qui voudront bien se pencher sur ce problème.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    A priori c'est parce que tes paramètres figurent bien dans la requête SQL, mais tu ne les as pas ajoutés à ton DataAdapter. Je pense qu'un truc de ce genre devrait solutionner ton cas :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    adapter.InsertCommand.Parameters("NomParam1").Value = "La Valeur"
    Tu dois donc ajouter 5 lignes comme ceci (une par paramètre), en remplaçant "NomParam1" et "La Valeur" par ce qui va bien, juste après la ligne 33 du code que tu as posté.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Merci de ta réponse.

    Mais...

    Au départ, mon code était comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              For Each record As DataRow In tblSource.Rows
     
                tblDest.ImportRow(record)
              Next
     
              adapter.Update(tblDest)
    Avec un CommandBuilder pour générer l'InsertCommand automatiquement.
    Malheureusement, dans la vraie DB, il y a un champ nommé "Currency" qui me provoquait un erreur de syntaxe dans la commande INSERT INTO.
    J'ai donc récupéré la String générée par le CommandBuilder pour mettre Currency entre crochets.
    Plus d'erreur de syntaxe mais le message d'erreur ci-dessus.
    J'ai alors simplifié les tables source et destination et n'ai gardé que 5 champs simples.

    Je me trompe ou, si je suis ce que tu me proposes, tous les records auront le même contenu?

    Je peux déplacer ta proposition dans la boucle For Next mais, dans ce cas, je ne vois pas à quoi sert la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                tblDest.ImportRow(record)
    De même que je ne vois pas à quoi peut servir un CommandBuilder s'il faut écrire, pour chaque record, les valeurs des paramètres.

    Vu qu'avec mes tables simplifiées, je n'ai plus de problème de syntaxe, je vais réessayé le code avec le CommandBuilder.

    Si quelqu'un a une autre piste, qu'il n'hésite pas.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bon ben...

    Le CommandBuilder fonctionne à merveille s'il n'y a pas à retravailler l'InsertCommand.

    Vu que je n'ai pas la possibilité de modifier la base de donnée de destination, je me suis tapé la liste des paramètres avec leurs valeurs et exit le CommandBuilder.

    Bref, résolu mais frustrant.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. aucune valeur donnée pour un ou plusieurs des paramètres requis
    Par rec82 dans le forum Bases de données
    Réponses: 14
    Dernier message: 10/06/2016, 12h59
  2. Aucune valeur donnée pour un ou plusieurs des paramètres requis
    Par bboy_lil_mak dans le forum Bases de données
    Réponses: 8
    Dernier message: 10/06/2016, 12h40
  3. [XL-2013] Requête SQL Select / Aucune valeur donnée pour un ou plusieurs des paramètres requis
    Par StarLord77 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2015, 12h52
  4. Delphi : Aucune valeur donnée pour un ou plusieurs des paramètres requis
    Par bboy_lil_mak dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/07/2013, 00h11
  5. Réponses: 9
    Dernier message: 01/06/2011, 14h33

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