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

C# Discussion :

Desactiver mot-cle Date dans un Insert


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Points : 114
    Points
    114
    Par défaut Desactiver mot-cle Date dans un Insert
    Bonjour,

    J'ai un formulaire avec une combo et un datagridview. La combo contient des noms de fonds, et la datagridview contient les performances du fond selectionne. La table contenant les performances contient le champ Date, que je ne peux pas modifier.

    Or, ceci pose un probleme lors de l'insertion d'un nouveau champ dans le datagridview (Syntaxe error in insert into statement). Je cherche donc une methode pour ajouter, detruire et supprimer des enregistrements dans mon datagridview, puis mettre a jour la base . Le code suivant fonctionne (ajout, suppression, edition), a condition que je triche en modifiant le champ Date en tDate dans ma base de test.

    J'utilise la methode Update sur mon datagridview pour enregistrer les enregistrements: methode btn_Save_Click

    J'apprecierais egalement toute suggestion pour ameliorer ce code (debutant)

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.Collections;
     
    namespace FundIHM_V2
    {
        public partial class Form1 : Form
        {
            private OleDbConnection conn;
            DataSet myDataset;
            OleDbDataAdapter adapterDataGrid;
            OleDbDataAdapter adapterCombo;
            OleDbCommandBuilder commandBuilderDataGrid;
     
            public Form1()
            {
                InitializeComponent();
     
                // titre de la fenêtre
                this.Text = "Fund IHM V_2";
                // dimensions de la fenêtre
                this.Size = new System.Drawing.Size(1000, 500);
     
                this.conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=Q:\\Dev\\testDB.mdb;");
     
                try
                {
                    this.conn.Open();
                }
     
                catch (Exception exp)
                {
                    Console.WriteLine(exp.Message);
                }
     
                //Associer Combo/datagridview au dataset, puis formater les colonnes du datagridview
                buildCmbFundList();
            }
     
            // fonction de test
            public static void Main(string[] args)
            {
                // on affiche le formulaire
                Application.Run(new Form1());
            }
     
            //Associer Combo/datagridview au dataset, puis formater les colonnes du datagridview
            private void buildCmbFundList()
            {
                adapterCombo = new OleDbDataAdapter("Select * From Mastername Order By MasterName", conn);
                adapterDataGrid = new OleDbDataAdapter("select ID, tDate, Return, FundsManaged, NAV, LastUpdated from Performance where ID=2;", conn);
                commandBuilderDataGrid = new OleDbCommandBuilder(adapterDataGrid);
     
                //contiendra les noms des funds et la performance d'un seul
                myDataset = new DataSet();
     
                try
                {
                    adapterCombo.Fill(myDataset, "Combo");
                    adapterDataGrid.Fill(myDataset, "DataGrid");
                }
     
                catch (Exception exp){
                    Console.WriteLine(exp.Message);
                }
     
     
                //liens dataset, composant graphique
                this.cmbFundName.DataSource = myDataset.Tables[0];
                this.dataGridView_FundList.DataSource = myDataset.Tables[1];
     
                //formater les colonnes du datagridview
     
    //Code de formatage
     
            }
     
            //changer les performances dans le datagridview en fonction de la selection du fund dans la combo
            private void cmbFundName_SelectionChangeCommitted(object sender, EventArgs e)
            {
                this.conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=Q:\\Dev\\testDB.mdb;");
                OleDbDataAdapter adapterDataGrid = new OleDbDataAdapter("select ID, tDate, Return, FundsManaged, NAV, LastUpdated from Performance where ID=" + cmbFundName.SelectedValue.ToString() + ";", conn);
     
                myDataset.Tables[1].Clear();
                adapterDataGrid.Fill(myDataset, "DataGrid");
     
            }
     
            //Envoyer les modifications du datagridview vers la base
            private void btn_Save_Click(object sender, EventArgs e)
            {
                try
                {
                    this.Validate();
                    adapterDataGrid.Update(myDataset.Tables[1]);
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
     
            }
     
            //ajouter l'ID du found dans la colonne cachee du datagridview avant envoie vers la base
            private void dataGridView_FundList_UserAddedRow(object sender, DataGridViewRowEventArgs e)
            {
                this.dataGridView_FundList.CurrentRow.Cells[0].Value = this.cmbFundName.SelectedValue.ToString();
                this.dataGridView_FundList.CurrentRow.Cells[5].Value = DateTime.Now;
            }
     
            private void dataGridView_FundList_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {
                this.dataGridView_FundList.CurrentRow.Cells[5].Value = DateTime.Now;
            }
        }
    }
    D'avance merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est bien pour éviter ce genre de problème qu'en général, on ne mets pas de mot clé en nom de table ou de champs

    mais il y a une solution quand meme
    mettre le nom d'objet entre crochets
    [date]

    par contre il me semble que tu ouvres ta connexion un peu tôt
    (pas sur car je vois rien avec la syntaxe c#, je fais du vb moi)
    m'enfin une connexion doit s'ouvrir juste avant de lire dedans et doit etre fermée juste après l'avoir utilisé
    genre le tout dans la meme sub quitte à l'ouvrir 50x par minute mais pas l'ouvrir au chargement de la fenetre, et la fermer 15min après
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    c'est bien pour éviter ce genre de problème qu'en général, on ne mets pas de mot clé en nom de table ou de champs

    mais il y a une solution quand meme
    mettre le nom d'objet entre crochets
    [date]
    Et c'est bien la le probleme: je n'ai pas acces a la requete en insertion, ce qui fait que la solution etait inapplicable. J'ai trouve des exemples me permettant d'ecrire la requete associee a l'insertion, et applique ta solution. La methode btn_Save_Click est donc modifiee ainsi


    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
    //Envoyer les modifications du datagridview vers la base
            private void btn_Save_Click(object sender, EventArgs e)
            {
                try
                {
                    this.Validate();
                    adapterDataGrid.InsertCommand = new OleDbCommand("Insert into Performance (ID, [Date], Return, FundsManaged, NAV, LastUpdated) Values (?, ?, ?, ?, ?, ?)");
                    adapterDataGrid.InsertCommand.Parameters.Add("@ID", OleDbType.Integer, 5, "ID");
                    adapterDataGrid.InsertCommand.Parameters.Add("@Date", OleDbType.DBDate, 5, "Date");
                    adapterDataGrid.InsertCommand.Parameters.Add("@Return", OleDbType.Double, 10, "Return");
                    adapterDataGrid.InsertCommand.Parameters.Add("@FundsManaged", OleDbType.Double, 10, "FundsManaged");
                    adapterDataGrid.InsertCommand.Parameters.Add("@NAV", OleDbType.Double, 10, "NAV");
                    adapterDataGrid.InsertCommand.Parameters.Add("@LastUpdated", OleDbType.DBDate, 5, "LastUpdated");
                    adapterDataGrid.Update(myDataset.Tables[1]);
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
     
            }
    Citation Envoyé par sperot51 Voir le message
    par contre il me semble que tu ouvres ta connexion un peu tôt
    (pas sur car je vois rien avec la syntaxe c#, je fais du vb moi)
    m'enfin une connexion doit s'ouvrir juste avant de lire dedans et doit etre fermée juste après l'avoir utilisé
    genre le tout dans la meme sub quitte à l'ouvrir 50x par minute mais pas l'ouvrir au chargement de la fenetre, et la fermer 15min après
    Merci pour cette remarque. J'adapterai le code en consequence, et modiferai la methode ci-dessus pour ne pas a avoir a inserer une nouvelle requete a chaque appel de la fonction.

    Merci.

    ++

    Sandrew

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

Discussions similaires

  1. [AC-2007] problème date dans un insert
    Par sihamelm dans le forum VBA Access
    Réponses: 5
    Dernier message: 01/11/2012, 11h50
  2. Mot Cle "N" dans ma requete SQL
    Par rgarnier dans le forum SQL
    Réponses: 12
    Dernier message: 21/07/2009, 11h09
  3. Réponses: 9
    Dernier message: 20/11/2008, 18h24
  4. mot cle invisible dans l'index(workshop help html)
    Par bbelle08 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 17/08/2007, 09h32
  5. Pb de conversion de date dans un Insert
    Par Oncle_Pete dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/03/2007, 14h07

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