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 :

Transcription d'une requete SQL


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut Transcription d'une requete SQL
    Bonjour,
    J'ai un problème de transcription SQL.
    Je suis sous visual studio c# express et mes bases de données sont sous ORACLE.

    Voici ma requete que je n'arrive pas à transcrire.
    Faire UPDATE de la table <visu> de la colone DATE avec pour valeur une "date_nouvelle" à condition que "date_nouvelle" soit la nouvelle "date" entrée par l'utilisateur dans un datagridview et qui provient de la table <tab>.

    Merci

    EDIT : Si mon explication n'est pas assez clair voici le synoptique :

    Table <tab>
    15/04/07 ===l'utilisateur veut le changé en 18/07/07===
    16/04/07
    ...

    Donc <tab> devient :
    18/07/07
    16/04/07
    ...

    <Visu> contient
    15/04/07
    15/04/07
    16/04/07
    ...

    Donc étant donnée que <tab> est modifier, je voudrai que <visu> devienne
    18/07/07
    18/07/07
    16/04/07
    ...
    Voila.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Les requêtes pour Oracle se font en SQL :
    UPDATE nom_de_la_table SET nom_du_champ_a_modifier = nouvelle_valeur [, ...] WHERE nom_du_champ_a_comparer = ancienne_valeur [AND ...]

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Merci de ta réponsz Astartee mais je le savais.
    En fait mon problème (car j'ai reussi à comprendre un peu mieu le mecanisme) est le suivant :
    j'ai dans un dataset, une table "date" et une table "visu". La table "date" contient les valeurs de la requete : select date from <matable> group by date. Et la table "visu" les valeurs de la requete : select * from <matable>.
    J'affiche dans un datagridview la table "date".
    Je souhaite des que je change la valeur dans le datagridview la date, quel soit changé au niveau de la table "visu".

    Au final la table "visu" et ses modifications, sont renvoyés à la base de donnée ORACLE.

    PROBLEME :
    Je ne sais pas comment faire pour extraire la date initialement rentré dans la table "date" pour quel devienne la variable date_ancienne.
    Cela me servira à faire la condition si date_ancienne correspond à la date dans "visu" la remplacé par la date actuelle.

    merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Je me doutais un peu que ça ne devait pas être ça, mais j'ai soigneusement répondu à ta "question"
    J'ai un problème de transcription SQL. Voici ma requete que je n'arrive pas à transcrire.


    Dans les DataRow d'une DataTable sont stockés les valeurs du champ avant modification tant qu'on n'a pas effectué d'AcceptChanges (ou de Update avec un DataAdapter), on les récupère avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    leDataRowConcerné[nom_de_la_colonne, DataRowVersion.Original]
    ou
    leDataRowConcerné[index_de_la_colonne, DataRowVersion.Original]

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Merci de ta réponse Astartee... Mais cela ne fonctionne pas
    voici mon code, peux tu me dire ou je me suis trompé?

    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
     
                string sql = "Select * From <MaTable>";
                DataRow rowdate;
                rowdate = tab_date.NewRow();
     
                try
                {
                    OracleDataAdapter OracleDA_visu = new OracleDataAdapter(sql, connexion);
                    connexion.Open();
     
                    string Stringcmd = "Update <MaTable> SET DATE = :@NewDATE WHERE DATE= :@OldDATE";
                    OracleCommand UpdateDate = new OracleCommand(Stringcmd, connexion);
                    UpdateDate.CommandType = CommandType.Text;
                    UpdateDate.Parameters.Add("@NewDATE", OracleDbType.Date, rowdate["DATE", DataRowVersion.Current], ParameterDirection.Input);
                    UpdateDate.Parameters.Add("@OldDATE", OracleDbType.Date, rowdate["DATE",DataRowVersion.Original], ParameterDirection.Input);
                    UpdateDate.ExecuteNonQuery();
                    tab_date.AcceptChanges();
     
                    OracleCommandBuilder commandBuilder = new OracleCommandBuilder(OracleDA_visu);
                    OracleDA_visu.UpdateCommand = commandBuilder.GetUpdateCommand();
     
                    OracleDA_visu.Update(tab_visu);
                    tab_visu.AcceptChanges();
                    OracleDA_visu.Dispose();
    }
    Erreur rencontrée : Pas de valeur Original ( ou pas de valeur current )


    NOTA : j'utilise un dataGridView. Le problème vient peut etre de la.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Tant que le DataRow n'est pas ajouté dans la table, les valeurs "current" et "original" ne sont pas accessibles. Seule la valeur "proposed" est accessible ; il s'agit d'ailleurs de la valeur par défaut de la colonne tant qu'on ne modifie pas la valeur du champ dans cette ligne.


    Ton code me perturbe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataRow rowdate;
    rowdate = tab_date.NewRow();
    Là, une nouvelle ligne est créée, qui n'appartient pas encore à la table mais qui possède le bon nombre de colonnes etc... Elle est prête à être remplie (pour l'instant elle contient les valeurs par défaut définies pour chaque colonne, c'est-à-dire DbNull.Value si aucune valeur par défaut n'a été re-définie après la création de la colonne) et ajoutée à la table par l'instruction tab_date.Rows.Add(rowdate).
    => pourquoi appeler la commande d'Update sur cette ligne ? pour faire un test ? ça ne marche pas parce que la ligne n'appartient pas à la table, et d'ailleurs elle est "vide" en quelque sorte - mieux vaut prendre une ligne qui appartient déjà à la table et a bien été modifiée (sinon la valeur "original" n'existera pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tab_date.AcceptChanges();
    [...]
    OracleDA_visu.Update(tab_visu);
    tab_visu.AcceptChanges();
    Après l'instruction AcceptChanges(), les modifications effectuées dans la table sont acceptées (comme le dit si bien le nom de la fonction...) ce qui signifie que les modifications deviennent définitives : les lignes modifiées ne sont plus considérées comme modifiées, toutes les lignes sont "unmodified", les anciennes valeurs stockées dans la valeur "original" sont oubliées, les lignes supprimées le sont définitivement, etc.
    Donc il est complètement inutile d'appeler Update après AcceptChanges : il ne se passera rien. De plus il est encore inutile d'appeler AcceptChanges après Update, car une fois les modifications envoyées à la base de données les modifications dans la DataTable sont elles aussi acceptées définitivement : même effet qu'un AcceptChanges, mais après avoir envoyé les modifications à la base de données. (sauf en cas d'erreur, mais dans ce cas il n'est pas souhaitable de faire "comme si" tout s'était bien passé en appelant AcceptChanges !)

    Si le but est de définir une commande d'Update sur mesure, pourquoi ne pas la définir complètement (il ne faudra peut-être pas modifier uniquement la date) et la mettre dans le DataAdapter en tant que UpdateCommand ? Dans ce cas, on peut laisser tomber le CommandBuilder, et effectuer toutes les opérations d'un coup en un appel de Update.
    Quelle est la particularité du champ "date" ? Pourquoi as-tu voulu lui réserver un traitement spécial, avec une commande UpdateDate définie "à part" ?

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

Discussions similaires

  1. pb d'execution d'une requete sql
    Par pit9.76 dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/06/2004, 12h03
  2. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  3. date d'une requete sql
    Par innosang dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/04/2004, 09h27
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Une requete SQL unpeux difficile !!
    Par nil dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/03/2004, 12h32

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