Construction dynamique de requête sql (VB.Net)

Signaler
Messages postés
92
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
9 août 2004
-
Messages postés
5
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
9 avril 2010
-
Bonjour,
Je souhaite réaliser la mise à jour d'une base Access via un formulaire et une fonction générique qui utilise une requête créée dynamiquement.
Comment puis-je faire si je récupère les noms de champ et les valeurs à mettre dans la bd dans une autre fonction?

 For Each Controle In nom_page.Controls(1).Controls
        'Récupération de l'ID du contrôle cournat
         nomchamp = Controle.ID
         If Left(nomchamp, 4) Like "Text" Then
                nom = nomchamp.Remove(0, 4)
                'Parcours des colonnes récupérées dans le datatable
                For Each objDataCol In objDataTable.Columns
                    nom_champ = objDataCol.ColumnName
                    If nom_champ.Equals(nom) Then
                        texte = nom_page.Controls(1).FindControl("Text" + nom)
                        valeur = texte.Text
                        sql2 = rq.ConstrRequete(nom_champ, valeur)
                    End If
                    Exit For
                Next
            End If
Next


J'espère avoir été assez claire et merci d'avance pour vos réponse

Cordialement,
Suffren

6 réponses

Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

G pas compris la question...

:question)
Messages postés
92
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
9 août 2004

Bonjour,
Je souhaite mette à jour une base Access 2000 avec une requête définie dynamiquement par parcours des textbox de mon formulaire mais le contenu de la requête donne :
Update client Set Num_client,Nom="Yagudin",Adresse="Yebelevnyedf",Ville="St Pétersbourg",type_service="Patinage" Where Num_client= 15;

Je voudrais enlever le champ Num_client car il est en lecture seule (il ne doit pas être modifié).
La requête se construit avec trois chaîne de caractères de la façon suivante :

EnteteSQL = "Update client Set "
FinSQL = " Where Num_client= " & IDClient & ";"

'Parcours des contrôles de la page
For Each Controle In nom_page.Controls(1).Controls
     nomchamp = Controle.ID
      If Left(nomchamp, 4) Like "Text" Then
            nom = nomchamp.Remove(0, 4)
            For Each objDataCol In objDataTable.Columns
                  texte = nom_page.Controls(1).FindControl("Text" & nom)
                  If texte.ReadOnly = False Then
                        valeur = texte.Text
                        MilieuSQL = VerifType(objDataCol, valeur)
                        Exit For
                  Else
                        Exit For
                  End If
                  Exit For
             Next
             'Marche pour les string
              ListeChgts = ListeChgts & nom & MilieuSQL & ","
              'ListeChgts = ListeChgts & nom & "=""" & valeur & ""","
    End If
Next

'On enlève la dernière virgule superflue
ListeChgts = Left(ListeChgts, Len(ListeChgts) - 1)

sql2 = EnteteSQL & ListeChgts & FinSQL


Auriez-vous une idée pour ne plus avoir le champ Num_client?
Cordialement,
Suffren
Messages postés
44
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
15 juin 2006

Soit j'ai pas compris, soit la réponse est simple, mais il semble qu'il suffise juste de ne pas mettre ce fameux champs dans le set de la requête comme ci dessous

Update client Set nom="Yagudin",Adresse="Yebelevnyedf",Ville="St Pétersbourg",type_service="Patinage" Where Num_client= 15;
Messages postés
92
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
9 août 2004

D'accord mais au vu de la boucle For comment puis-je enlever ce champ alors que c'est le premier textbox qu'il trouve lors du parcours des contrôles de la page?
Cordialement,
Suffren
Messages postés
92
Date d'inscription
vendredi 4 juillet 2003
Statut
Membre
Dernière intervention
9 août 2004

Infos sur la fonction VerifType :

Public Function VerifType(ByRef objDataCol As DataColumn, ByVal valeur As String) As String

If objDataCol.DataType Is System.Type.GetType("System.Integer") Then
       MilieuSQL = "= ' & valeur & ' "
Else 'If objDataCol.DataType Is System.Type.GetType("System.String") Then
      MilieuSQL = "=""" & valeur & """"
End If
Return MilieuSQL
    End Function


Il semble ne tenir compte que du Else mais j'ignore pourquoi.
Cordialement,
Suffren
Messages postés
5
Date d'inscription
jeudi 4 mars 2010
Statut
Membre
Dernière intervention
9 avril 2010

bsr, je suis trés besoin de la requette de authentification login et password et merci urgent svp en (vb.net+sql server et vb.net+ access)