Requete SQL Server "dynamique" grâce à une varible

Bonjour,

suite à un lonnnnnng programme je dois pouvoir , à la fin, lancer un requête SQL Server afin d'éditer une base de donnée, le problème est que la requête varie en fonction des données entré par l'utilisateur et du résultat du programme et donc je ne peut pas taper toute les possibilité de requetes (infaisable car infini) donc si vous connaissez le moyen pour faire une requête SQL Server "dynamique" je suis ouvert a tout les propositions

Merci d'avance

Arthur

Personne ne saurait me répondre ? ou il faut que je réexplique mon problème ?

Je tien au courant:

j'avance un peu, je pense qu'il faut que je m'oriente vers une requête SQL commandé par Excel utilisant : INSERT .... SELECT.... FROM OPENROWSET(BULK ...) ou BULK INSERT . Ce n'est pas très facile, actuellement je m'aide des pages suivantes : https://docs.microsoft.com/fr-fr/sql/relational-databases/import-export/examples-of-bulk-import-and-export-of-xml-documents-sql-server

https://docs.microsoft.com/fr-fr/sql/relational-databases/import-export/import-bulk-data-by-using-bulk-insert-or-openrowset-bulk-sql-server

mais je ne comprend pas tout, les dossier XML et les schémas XML

Si une âme charitable passe par ici et veuille bien m'aider sur cela je l'accueil à bras ouvert

Je tien au courant :

Ne comprenant pas trop, une solution "à essayer " m'a été proposer par une personne ultérieur : utiliser les cellules d'une feuille Excel et y faire référence dans le code SQL de l'utilitaire Excel puis mettre a jour la table via la fonction SQL "update", la fonction update passe mais le fait que les champs soit des valeurs de cellules ne passe pas , quelqu'un a une idée ?

Bonjour,

a priori aucun problème pour créer une requête SQL dynamique.

mets un exemple de fichier excel et de requête SQL dynamique à générer.

Bonjour h2so4,

merci de t'intéresser a mon problème et désoler de n'avoir pas pu te répondre dans l'immédiat.

Ci-joint le fichier demandé "censuré" un peu car il contient des données confidentielle mais le problème est "simple" (a expliquer ) il faut que je fasse une requête qui modifie une base de donné en fonction de variable entrer et "calculer" au cour de l'userform pour cela je voulais utiliser la commande UPDATE mais je n'arrive pas a y inclure des variables, faut-il passer par des cases du classeur ainsi que la requête dans une case ? si possible ne pas le faire car j'aimerai que rien ne puisse être changé par erreur.

Encore merci de t'intéresser a mon problème.

Arthur

bonjour,

merci de mettre la commande SQL statique à rendre dynamique.

un exemple de code pour créer un SQL dynamique sur base de ton fichier

Sub aargh()
tablename="test"
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        fn = Split("champ1,champ2,champ3,champ4,champ5,champ6,champ7,champ8,champ9,champ10,champ11,champ12,champ13,champ14,champ15", ",")
        For i = 1 To dl
            Sql = "UPDATE " & tablename & " SET "
            For j = 1 To 15
                Sql = Sql & fn(j - 1) & "='" & .Cells(i, j) & "'" & IIf(j = 15, "", ",")
            Next j
            MsgBox Sql
        Next i
    End With
End Sub

Merci de ta réponse,

mettre une commande SQL statique à rendre dynamique ?

je veut faire une requête UPDATE

la requête statique (selon moi) serait : UPDATE tbl_Client SET *colonne (me souvient plus trop il y en a trop xD) =

et la valeur serai après le "=" serai la partie dynamique.

Encore merci de ton aide ,je m'en vais tout de suite comprendre ton code.

En attendant ta réponses.

Arthur

re-bonjour,

il faut a minima que je sache quels sont les noms des colonnes et quelles variables ou quelles cellules je dois utiliser pour associer une valeur à ces colonnes.

Re,

les infos sont : table : tbl_projet

colonne : tResponsable

il faudrait aussi un where qui vérifie que la valeur de la colonne PtrIdClient est égale a la variable no_client, la valeur de la colonne IdProjet égale la variable no_dossier et que seulement dans ce cas la on peut remplacer la valeur de tResponsable par la variable nouveau_responsable .

Encore et encore une fois merci de ton aide.

Arthur

Edit: faut t'il aussi que je te précise la base de donnée ? (base de donnée : BDDChacal_TEST , je suis sur un serveur test puis apres il faudra que j'enlmeve le _TEST afin d'etre sur celui en service)

re-bonjour,

je reformule ma demande.

montre moi l'instruction SQL que tu veux avoir. Indique-moi dans cette instruction quelles sont les parties variables et indique-moi où prendre les valeurs de ces parties variables.

Okkkkk désoler je ne l'avait pas compris comme ça,

je reformule donc :

UPDATE tbl_projet

SET tResponsable = nouveau_responsable

WHERE PtrIdClient = no_client & IdProjet = no_dossier & tResponsable = responsable_actuel

ou no_client, no_dossier, nouveau_responsable et responsable_actuel sont tous les quatre des variables utilisé dans mon userform

Arthur

bonjour,

voici le code qui permet de générer le sql dynamique.

comme je ne pense pas que le & soit une syntaxe correcte je les ai remplacés par AND. à adapter s'il s'avère que c'est incorrect.

Sql = "UPDATE tbl_projet Set tResponsable = '" & nouveau_responsable & "' WHERE PtrIdClient = '" & no_client & "' AND IdProjet = '" & no_dossier & "' AND tResponsable = '" & responsable_actuel & "'"

MsgBox Sql

merci de ta réponse cela fonction parfaitement maintenant il me faut l=juste trouver comment ouvrir une connexion à la base de donné pour cela j'ai trouvé le code :

Dim conn As ADODB.Connection, rst As ADODB.Recordset, fld As ADODB.Field

Set conn = New ADODB.Connection

With conn

.Provider = "SQLOLEDB.1;user ID=nomutilisateur;initial Catalog=nomdetabase;data source=nomdetasource"

.Open

End With

mais je ne sait pas trop si SQLOLEDB.1 doit rester ou si je dois mettre quelque chose d'autre, et pour le nom d'utilisateur apres il ne faudrait pas insérer un mdp ? du genre :

...... .Provider ="..........;userId=nomutilisateur;password=motdepasse;............"

merci de ton aide

Arthur

EDIT: ceci im Connect As Object, Recordset As Object

Set Connect = CreateObject("ADODB.Connection")

Set Recordset = CreateObject("ADODB.RecordSet")

Connect.Open "Driver={SQL Server};Server=A42APTECP02;Database=BDDChacal_TEST;Uid=" & identifiant & ";Pwd=" & mdp & ";"

With oRs

.Open Sql, Connect 'Create the recordset.

Set .ActiveConnection = Nothing 'Disconnect the recordset.

End With

me donne l'erreur 80040e4d

EDIT: comme c'est un autre probleme cette question a été déplacé dans ce topic : https://forum.excel-pratique.com/excel/erreur-80040e4d-t101526.html

Rechercher des sujets similaires à "requete sql server dynamique varible"