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 :

Problème d'insertion de données Delphi et Sql server


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut Problème d'insertion de données Delphi et Sql server
    Salut je suis nouveau dans l'utilisation de sql serveur lorsque je veux faire des insertion de mon application à la base de données ça ne passe pas
    J'utilise comme requêtes SQL : INSERT INTO PERSONNEL (IDPERS,NOMPERS, PRENOMSPERS) VALUES (IDPERS,NOMPERS, PRENOMSPERS)
    Dans mon bouton
    FDQUERY. PREPARED:TRUE ;
    FDQUERY. PARAMBYNAME (IDPERS).VALUE:= ÉDIT. TEXT;
    LORSQUE J'EXECUTE on me met paramètres non trouvé

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 579
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par colonel098 Voir le message
    J'utilise comme requêtes
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO   PERSONNEL (IDPERS,NOMPERS, PRENOMSPERS) VALUES (IDPERS,NOMPERS, PRENOMSPERS)
    il manque déjà les ':' pour indiquer les paramètres le bon SQL aurait été
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO   PERSONNEL (IDPERS,NOMPERS, PRENOMSPERS) VALUES (:IDPERS,:NOMPERS,:PRENOMSPERS)
    je présume que IDPERS est un index unique ? peut être même primaire ?

    ensuite outre le fait qu'il est toujours plus agréable d'avoir le code balisé (le bouton # permet d'indiquer un bloc de code)
    il y a déjà des erreurs dont le fait que si la query a déjà été préparée que se passe t-il ?
    voici une manière de faire
    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
     
    AQuery:=TFDQuery.Create(nil);
    try
    with FDQuery do
      begin
         Connexion:=FDConnexion;
         // gestion transaction si besoin
         SQL.Text:='INSERT INTO   PERSONNEL (IDPERS,NOMPERS, PRENOMSPERS) VALUES (:IDPERS,:NOMPERS,:PRENOMSPERS)';
         ParamByName('IDPERS').asString:=Edit1.Text;
         ParamByName('NOMPERS').asString:=Edit2.Text;
         ParamByName('PRENOMPERS').asString:=Edit3.Text;
         try 
          ExecSQL;
          // commit de la transaction
         except
           on E:Exception do begin
              // gestion erreur
              // rollback de la transaction
           end;
         end;
      end;
    finally
       FDQuery.Free;
    end;
    Puisqu'il s'agit certainement de Firedac au vu du nom il y a aussi d'autres manières
    Directe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDConnexion.ExecSQL('INSERT INTO   PERSONNEL (IDPERS,NOMPERS, PRENOMSPERS) VALUES (:I,:N,:P)',[Edit1.Text,Edit2.Text,Edit3.Text]);
    moins directe avec un ensemble (fdQuery) déjà existante 'SELECT IDPERS,NOMPERS, PRENOMSPERS FROM PERSONNEL' et un fdUPDateSQL bien renseigné (en utilisant les wizards *) pour le faire "à la manière BDE" avec
    * au passage profitez en pour voir les différents SQL proposés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FDQUery.Insert;  // ou Append 
    FDQuery.FieldByName('IDPERS').asString:=Edit1.Text;
    FDQuery.FieldByName('NOMPERS').asString:=Edit2.Text;    
    FDQuery.FieldByName('PRENOMPERS').asString:=Edit3.Text;
    FdQuery.Post;
    un data source,ou en option des liveBindings ,une bonne gestion des évènements onxxxxError ajoutée, des DBEdit pour remplacer les Editx.text
    et on arrive à faire du code robuste

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut
    Merci avec ton aide j'ai réglé mon problème s' était pour effectuer les trigger sur ma table personnes

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Par défaut
    moins directe avec un ensemble (fdQuery) déjà existante 'SELECT IDPERS,NOMPERS, PRENOMSPERS FROM PERSONNEL' et un fdUPDateSQL bien renseigné (en utilisant les wizards *) pour le faire "à la manière BDE" avec
    * au passage profitez en pour voir les différents SQL proposés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FDQUery.Insert;  // ou Append 
    FDQuery.FieldByName('IDPERS').asString:=Edit1.Text;
    FDQuery.FieldByName('NOMPERS').asString:=Edit2.Text;    
    FDQuery.FieldByName('PRENOMPERS').asString:=Edit3.Text;
    FdQuery.Post;
    un data source,ou en option des liveBindings ,une bonne gestion des évènements onxxxxError ajoutée, des DBEdit pour remplacer les Editx.text
    et on arrive à faire du code robuste [/QUOTE]

    Parlant du code présente on faire appel à la fonction ApplyUpdate donc la table sera mise en cache . Mais le problème je n'arrive pas à faire de trigger plus que je serai obligé de le composant DBEdit . Car avec SQL server je n'arrive pas à faire de trigger sur la table en faisait cette programmation
    On me dit que cette table est utilisé

  5. #5
    Membre confirmé
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    Bonjour,

    Avec FireDac, on peut même faire une substitution du nom de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FDQuery1.SQL.Text := 'SELECT * FROM &TabName';
    FDQuery1.MacroByName('TabName').AsRaw := 'Orders';
    FDQuery1.OPEN;
    Source : http://docwiki.embarcadero.com/RADSt...Text_(FireDAC)

    Mais attention, adopter ce comportement peut présenter ensuite des problèmes de portabilité. On ne peut pas en faire autant avec d'autres connecteurs notamment les connecteurs de Lazarus même si UniDac -qui est compatible Lazarus/VCL/FMX- possède aussi une MacroByName mais je ne sais pas si elle fonctionne sur le nom de la table. A vérifier. Je le ferai dès que j'aurai un petit peu de temps.

    Cordialement. Zac.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/10/2009, 08h51
  2. Réponses: 1
    Dernier message: 30/04/2009, 17h17
  3. Réponses: 2
    Dernier message: 14/05/2004, 14h32
  4. problème d'insertion de données
    Par Falgan dans le forum ASP
    Réponses: 2
    Dernier message: 06/04/2004, 09h29
  5. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58

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