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

 Delphi Discussion :

insertion à Partir d'un dbgrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Gerant
    Inscrit en
    Janvier 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 31
    Par défaut insertion à Partir d'un dbgrid
    Bonjour!je précise mon idée avant de poser mes questions.Je dispose d'un dbgrid à partir duquel je voudrais saisir des informations dans une base de donnée.Ayez un peu d’indulgence envers moi.Donc sur mon Form y a un sqlconnection, un sqlquery, un datasetprovider, un clientdataset et une datasource.Je fais les liaisons nécessaires, et dans le sqlquery, à la propriété sql, j'écris INSERT INTO CR (CODEP, LIBELLEP, ANNEE1, ANNEE2) VALUES(:CODEP,:LIBELLEP, :ANNEE1, :ANNEE2 ) le remplis aussi la propriété params avec soin et quand je tente de mettre Active à true, j'ai l'erreur ---------------------------
    Erreur
    ---------------------------
    ORA-01400: impossible d'insérer NULL dans ("TP"."CR"."CODEP").
    ---------------------------
    OK
    ---------------------------
    Vous l'aurez compris, je travaille sur oracle!
    Ma question est alors là!pourquoi l'erreur puisque je ne tente même pas une insertion!suis toujours en mode conception!(à moins que quelques choses m'échappent avec les TSQLQuery).
    Et une autre question; pensez-vous que mon idée d'utiliser le dbgrid est bonne?Merci

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par znathan Voir le message
    sur mon Form y a un sqlconnection, un sqlquery, un datasetprovider, un clientdataset et une datasource.Je fais les liaisons nécessaires, et dans le sqlquery, à la propriété sql, j'écris INSERT INTO CR (CODEP, LIBELLEP, ANNEE1, ANNEE2) VALUES(:CODEP,:LIBELLEP, :ANNEE1, :ANNEE2 ) le remplis aussi la propriété params avec soin et quand je tente de mettre Active à true, j'ai l'erreur...
    Rendre active le SqlQuery revient à exécuter la requête à savoir une insertion.
    Aucune valeur de paramètre n'étant défini, on obtient l'erreur dont vous faites part. CQFD !
    Vu les composants mis en jeu, je mettrais dans le Query la requête suivante:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CODEP, LIBELLEP, ANNEE1, ANNEE2 FROM CR
    Je réaliserais les opérations d'insertion, de modification et de suppression depuis le clientdataset (commandes edit, insert, post, delete ...) puis je renverrais à un moment choisi les modifications à la base de données en appelant ApplyUpdates sur le clientdataset ou dans la foulée (en appelant la commande dans l'évènement AfterPost, AfterDelete).
    Pour les détails, je vous renvoie à l'aide de Delphi.
    --
    Philippe.

  3. #3
    Membre actif
    Profil pro
    Gerant
    Inscrit en
    Janvier 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 31
    Par défaut
    Ok!merci de m'avoir répondu!Mais avec le code select, mon dbgrid sera rempli avec les enregistrement de la table; y a t-il un moyen d'éviter cela ou je dois passer par exemple par les StringGrid?

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    S'il s'agit exclusivement d'ajouter de nouveaux enregistrements, une solution est d'utiliser le clientdataset en mémoire, cad sans liaison à une table ou un query mais dont il faudra définir les colonnes (type, taille) en reprenant celles de la table de la base de données à alimenter. Ce clientdataset est relié à la DBGrid via un datasource.

    2 manières de gérer les ajouts :
    1) En fin de traitement, le clientdataset est parcouru et chaque ligne est insérée dans la table via le query (passage des paramètres, appel à ExecSql). Il faudra utiliser un query avec la requête d'insertion dans la table de la base.

    2) A chaque insertion, sur l'évènement AfterPost, la ligne est insérée via le query.
    Attention en cas de mise à jour il faudra utiliser un query avec une requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE CR SET... WHERE....
    Il faudra utiliser les évènements AfterEdit, AfterInsert pour préalablement mémoriser l'opération en cours (insertion ou mise à jour) et le prendre en compte dans l'évènement AfterPost.
    --
    Philippe.

  5. #5
    Membre actif
    Profil pro
    Gerant
    Inscrit en
    Janvier 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 31
    Par défaut
    Merci beaucoup mec!tu me sauves la vie.Merci encore.

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par znathan Voir le message
    Merci beaucoup mec!tu me sauves la vie.Merci encore.
    De rien , mais penses à positionner la balise en cliquant dessus (en bas de l'écran)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/07/2006, 14h17
  2. Remplissage feuille excel à partir d'un dbGrid
    Par izidor dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 22/02/2006, 18h09
  3. Insertion à partir d'un exécute
    Par Portekoi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/02/2006, 11h21
  4. insert à partir d'un script php
    Par illegalsene dans le forum Oracle
    Réponses: 2
    Dernier message: 05/10/2005, 17h01
  5. séléction a partir d'un DBgrid
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/03/2004, 12h08

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