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

Macros et VBA Excel Discussion :

XL to SQL Server error : no value given for one or more required parameters error


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur génie industriel
    Inscrit en
    Novembre 2016
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur génie industriel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 88
    Par défaut XL to SQL Server error : no value given for one or more required parameters error
    Hello tout le monde !

    J'essaie de transferer d'automatiser le transfer de donnees d'une base XL a SQL server

    Seulement je rencontre l'erreur no value given for one or more required parameters error

    J'ai pense a l'ID qui doit s'autoincrementer automatiquement mais meme en le rajoutant dans la requete l'erreur persiste
    des idees ?

    Par avance merci

    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
     
    Sub to_sqlserver()
     
    Table = "Hires"
    parameters (Table) ' save table column parameters into tb_param
    List = SelectCol(tb_param, 2, list_header) ' select column names : Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8
    List = SelectCol(tb_param, 5, list_values) ' select as much "?" as column names : ?,?,?,?,?,?,?,?
     
    maintable (Table) 'select table values into tb_main
    datadb = "dbo.HRHirescopy"
     
    strSQL = "INSERT INTO " & datadb & _
    " (ID," & list_header & ") " & _
    "VALUES ((SELECT ISNULL(MAX(ID) + 1, 0) FROM " & datadb & ")," & list_values & ");"
     
    MsgBox (strSQL)
     
    pServer = "Servername"
    pCatalog = "DBname"
     
    strConn = "Provider=SQLOLEDB" & _
    ";Initial Catalog=" & pCatalog & _
    ";Data Source=" & pServer & _
    ";Integrated Security=SSPI"
     
    Set conn = New ADODB.Connection
    conn.Open strConn
     
    Set cmd = New ADODB.Command
     
    cmd.ActiveConnection = conn
    cmd.CommandType = adCmdText
    cmd.CommandText = strSQL
     
    ' Loop on the values to be transferred
    For i = 2 To UBound(tb_main, 1)
        For j = 2 To UBound(tb_main, 2)
            ' Loop on the column parameters to be transferred
            For k = 2 To UBound(tb_param, 1)
            If LCase(tb_main(1, j)) = LCase(tb_param(k, 2)) Then
                cmd.parameters.Append _
                cmd.CreateParameter(tb_param(k, 2), tb_param(k, 3), adParamInput, _
                Len(tb_main(i, j)), tb_main(i, j))
            End If
            Next
        Next
    cmd.Execute ' ERROR OCCUR HERE
    Next
     
    conn.Close
    Set conn = Nothing
     
    End Sub

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Si ID est une colonne autoincrémentée dans ta table SQL, tu ne dois mentionner ni le champ ni la valeur dans la requête d'insertion.

    Tu dis que tu incorpores des données d'Excel, mais dans ta requête sql, je vois un insert qui va chercher les valeur dans un select sur une dbo.table (donc dans ton sql serveur).

    Il faudrait que tu recomposes le texte de ta commande sql et que tu vérifies que tu as bien autant de valeurs passées que de colonnes dans la liste des colonnes.

    Peut-être as-tu des problèmes avec des valeurs (dates, valeurs numériques, texte) que le moteur de données ne sait pas interpréter (virgule au lieu du point comme séparateur numérique, mauvais séparateur de date, apostrophes et autres valeurs à échapper dans du texte) mais sans voir la chaine sql reconstituée, c'est un peu compliqué.


    Perso, je préfère utiliser des paramètres ADODB, comme je l'illustre dans ces billets de blog (ça parle d'Access mais c'est identique pour sql serveur).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Femme Profil pro
    Ingénieur génie industriel
    Inscrit en
    Novembre 2016
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur génie industriel

    Informations forums :
    Inscription : Novembre 2016
    Messages : 88
    Par défaut
    La seule valeur qui est recuperee dans le select est l'ID (plus grande valeur +1) c'est pour ca que ma requete va chercher dans la database, et j'ai bien en effet autant de valeurs (8 + ID donc 9).

    exemple d'une ligne avec le datatype

    type 200 = char
    type 133 = date

    200 200 200 200 200 133 200 133
    123456 Dupond,Jack DUPONJ00 11111 Branch Manager 43997 0660 - Irvine 44012

    et merci pour le lien je vais explorer la methode proposee !

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je trouve perso que ton code est difficile à lire et, du coup, difficile à ausculter. Manifestement, tu utilises des variables déclarées et valorisées ailleurs que dans la procédure que tu donnes. Difficile donc de savoir à quoi ça sert, et difficile donc de reproduire le code. Je ne comprends pas bien pourquoi tu vas chercher l'ID dans une autre table, mais je ne connais pas configuration de ta base SQL. Je répète que si ton ID est autoincrémenté, tu ne dois pas le passer à chaine SQL

    C'est pour cela que, perso, j'aime bien écrire des procédures courtes, paramétrées et qui ne font qu'une chose. Ca permet de tester chaque partie du code indépendamment des autres et de mieux comprendre l'enchainement des actions réalisées.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Microsoft OLE DB Provider for SQL Server error '80040e31'
    Par Webselect dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/09/2007, 17h44
  2. "No value given for one or more required parameters", et pourtant si !?
    Par Astartee dans le forum Accès aux données
    Réponses: 1
    Dernier message: 29/05/2007, 14h07
  3. Internal SQL Server error ?
    Par vincenteraptor dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2006, 15h29
  4. Réponses: 1
    Dernier message: 28/04/2006, 20h36
  5. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46

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