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 :

Sauvegarder la valeur d'un TEXTBOX dans la base de données


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Par défaut Sauvegarder la valeur d'un TEXTBOX dans la base de données
    Bonjour tout le monde!

    Je me demande comment on pourrait sauvegarder la valeur entrée par l'utilisateur dans un textbox dans la cellule correspondante de ma base de données.

    Voici mon code:
    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
    Imports System
    Imports System.Data.OleDb
    Imports System.IO
     
     
    Public Class Form2
        Dim choix As Integer
        Dim numdossier As String
     
        Private Sub btn_fin_Click(sender As Object, e As EventArgs) Handles btn_fin.Click
            Dim myConnection As OleDbConnection
            Dim myCommand As OleDbCommand
            Dim mySQLString As String
     
            myConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\user\Documents\processus_anomalies.accdb")
            myConnection.Open()
            MsgBox(myConnection.State)
            mySQLString = "INSERT INTO processus_anomalies(workfile_realise,numero_dossier) VALUES (M,numdossier)"
            myCommand = New OleDbCommand(mySQLString, myConnection)
            myCommand.ExecuteNonQuery()
        End Sub
     
        Private Sub TB_numdossier_TextChanged(sender As Object, e As EventArgs) Handles TB_numdossier.TextChanged
            numdossier = TB_numdossier.Text
     
        End Sub
     
     
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            choix = 0
        End Sub
     
     
     
     
        Private Sub RB1_1_Click(sender As Object, e As EventArgs) Handles RB1_1.Click
            choix = 1
        End Sub
     
     
        Private Sub RB1_2_CheckedChanged(sender As Object, e As EventArgs) Handles RB1_2.CheckedChanged
            choix = 2
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Btn_1.Click
            Select Case choix
                Case 1
                    Dim M As String = InputBox("Date fin de tâche", "Timing")
                    TB1.Text = M
                    TB1.TextAlign = HorizontalAlignment.Center
                    TB1.BackColor = Color.Green
                Case 2
                    Dim N As String = MsgBox("Bon courage!", vbInformation + vbOKOnly, "Rappel")
            End Select
        End Sub
     
     
    End Class


    C'est au niveau de : mySQLString = "INSERT INTO processus_anomalies(workfile_realise,numero_dossier) VALUES (M,numdossier)"
    Quand j'y mets des valeurs précises: Values('05/03/2014', '345') ça fonctionne, mais quand j'y mets les variables M, vu que par la suite j'appellerais une boucle qui reprendra d'autres valeurs et devra les noter dans la base, ça fonctionne plus!


    Merci d'avance pour votre aide.
    Bonne journée !

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Dans un premier temps, ça ne marche pas car M et NumDossier sont interprétés comme du texte, la requête n'affichera pas la valeur de la requête. Il faut concatener avec l'opérateur &.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mySQLString = "INSERT INTO processus_anomalies(workfile_realise,numero_dossier) VALUES (" & M & "," & numdossier & ")"
    Et dans un second temps, je te conseille d'utiliser les requêtes paramétrées, ça évite des erreurs de typage et ça apporte plus de sécurité. (En revanche dans une requête paramétrées, les paramètres peuvent apparaitre comme du texte à l'oeil, mais par la suite la requête sera interprétée et les paramètres seront remplacés par leurs valeurs respectives)
    Selon le type de base de données, le caractère qui précède le paramètre (@ dans l'exemple) peut différer, pour Access je ne sais plus si c'est @ ou : à toi de voir lequel fonctionne ... ^^

    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
                Dim myConnection As OleDbConnection
                Dim myCommand As OleDbCommand
                Dim mySQLString As String
     
                myConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\user\Documents\processus_anomalies.accdb")
                myConnection.Open()
                mySQLString = "INSERT INTO processus_anomalies(workfile_realise,numero_dossier) VALUES (@M, @numdossier)"
                '
                'Ou
                '
                mySQLString = "INSERT INTO processus_anomalies(workfile_realise,numero_dossier) VALUES (:M, :numdossier)"
     
                myCommand = New OleDbCommand(mySQLString, myConnection)
     
                With myCommand.Parameters
                    .AddWithValue("@M", M)
                    .AddWithValue("@numdossier", numdossier)
                    '
                    'Ou
                    '
                    .AddWithValue(":M", M)
                    .AddWithValue(":numdossier", numdossier)
                End With
     
                myCommand.ExecuteNonQuery()
                myConnection.Close()

    Je te conseille de regarder ce tuto et la FAQ sur les requêtes paramétrées.

    Bon code


    EDIT: Merci rv26t, apparement le caractère sous Access n'est ni @ ni : mais ? ^^

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Il faut utiliser les requêtes paramétrées. Voir Tuto ou Faq.
    Cela prendra mieux en compte le format date.
    Pour acces le caractère est ? les paramètres doivent être ajoutés dans l'ordre d'apparition dans la requête.
    [Edit] Grillé par _Ez3kiel. (Je laisse puisqu'il y a un petit complément d'info)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Bonjour,

    Il faut utiliser les requêtes paramétrées. Voir Tuto ou Faq.
    Cela prendra mieux en compte le format date.
    Pour acces le caractère est ? les paramètres doivent être ajoutés dans l'ordre d'apparition dans la requête.
    [Edit] Grillé par _Ez3kiel. (Je laisse puisqu'il y a un petit complément d'info)

    Merci pour la précision sur le fait que les paramètres doivent être ajoutés dans l'ordre d'apparition dans la requête, j'avais zoublié.

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Merci pour la précision sur le fait que les paramètres doivent être ajoutés dans l'ordre d'apparition dans la requête, j'avais zoublié.
    C'est sérieux ça ? Y a pas une correspondance qui se fait entre le nom du paramètre dans la requête et le nom du paramètre dans l'objet command ?

    Encore un point en moins pour access si c'est bien le cas...

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    C'est sérieux ça ?
    bien sur,
    Citation Envoyé par Kropernic Voir le message
    Y a pas une correspondance qui se fait entre le nom du paramètre dans la requête et le nom du paramètre dans l'objet command ?
    Non, c'est uniquement la position qui compte.
    La requête doit s'écrire ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mySQLString = "INSERT INTO processus_anomalies (workfile_realise,numero_dossier) VALUES (?, ?)"
    Ensuite on renseigne les paramètres.
    Après tu peux mettre ?workfile et ?dossier pour que ce soit plus parlant, mais cela n'intervient pas, seul le ? compte.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ce le fait donc un gros point négatif à ajouter à ma liste des raisons de ne pas utiliser access (et plus généralement ms office) pour développer des applications .NET.

    Liste que je ressors régulièrement à mon chef ^^.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    As-tu essayé avec oracle pour voir le comportement ? (inverser l'ordre de déclaration des paramètres par rapport à la requête)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ah mais j'aime pas oracle non plus ^^.

    Ici (ie. là où je bosse), c'est .NET et MS SQL Server. Ce qui me semble logique vu que les deux viennent de microsoft.

    Notre maison mère utilise oracle et les rares requêtes que je dois faire sur le server, je trouve ça mal foutu. Déjà rien que ce qu'il faut faire pour avoir une date, c'est de la folie ! (maintenant, j'ai pas accès à la définition de leurs tables donc c'est peut-être là que le bas blesse)

    Pour l'anecdote, j'ai vite été cherché dans un job qui récupère nos ventes dans leur DB, la ligne qui se charge d'avoir la date. Voilà le bousin !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TO_CHAR(TO_DATE(to_char(bon_dat,''YYYYMMDD'')||ltrim(TO_CHAR(MINUTE_ID,''0009'')),''YYYYMMDDHH24MI''),''YYYYMMDD HH24:MI'') as "date_trn"
    Donc y a la date dans une colonne, l'heure dans une autre et ils me concatènent tout ça pour faire une colonne unique dans le résultat (ça par contre c'est bien... Le type datetime n'étant pas fait pour les chiens^^).

    Bref, désolé pour le hors sujet (heureusement, le problème était déjà résolu) mais tout ça pour dire que jusqu'à présent, .NET + MS SQL Server est, de ce que j'ai eu l'occasion d'utiliser, de loin au dessus du lot.

  10. #10
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par rv26t Voir le message
    As-tu essayé avec oracle pour voir le comportement ? (inverser l'ordre de déclaration des paramètres par rapport à la requête)

    Je confirme que c'est la même pour Oracle, les paramètres doivent être ajoutés dans l'ordre d'apparition dans la requête ... (Ce qui m'a valu une bonne prise de tête pour le débug avant que je m'en rende compte ...)

  11. #11
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Comme discuté en mp avec hervé hier soir, j'ai réalisé qu'avec ms sql server, je n'utilise que des procédures stockées. Avec ces dernières, l'ordre d'ajout des paramètres dans l'objet command n'a pas d'importance.

    Mais je vais tester ce qu'il en est avec des requêtes ad hoc. Bien que selon moi, les requêtes en elles-même n'ont rien à faire dans le code de l'application lorsque le sgdb offre la possibilité de les externaliser. Mais c'est un sujet qui pourrait être débattu dans un thread à part.

    EDIT : Je viens de tester avec une requête directement dans le code et l'ordre d'ajout des paramètres dans l'objet sqlcommand n'a pas d'importance. Longue vie à sql server donc ^^.

Discussions similaires

  1. [MySQL] Sélection d'une valeur qui se répète dans une base de données
    Par enahpets dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/07/2009, 22h51
  2. Insertion des valeurs des cases à cocher dans la base de données
    Par ottoayoub dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/05/2009, 00h45
  3. Réponses: 15
    Dernier message: 21/12/2008, 19h31
  4. Réponses: 10
    Dernier message: 12/09/2008, 10h09
  5. Réponses: 2
    Dernier message: 02/11/2007, 18h12

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