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

Bases de données Delphi Discussion :

Requete insert ne s'execute pas depuis Delphi!


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut Requete insert ne s'execute pas depuis Delphi!
    Bonjour,
    Quand je fais des acces de base de données depuis delphi en utilisant les composants ADO, les requetes de type select sont bien executées alors que celles d'insert ne sont pas executée. Lors du débogage delphi quand je visualise le text de ma requete je vois que la requete est correcte à 100% (elle s'xecute meme quand je le fé manuellement) mais elle est pas executé par delphi!!!
    Est ce qu'il s'agit d'une option du composant qui permet les select et qui interdit les insert??? Bref je n'en sais rien
    Merci de bien vouloir m'aider

  2. #2
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Salut,

    tu pourrais me donner la requête que tu essaies d'exécuter ?

  3. #3
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Je viens d'y penser,

    Est-ce que tu utilises bien la commande suivante après ta requête ?


  4. #4
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour

    il serait surtout intéressant de spécifier avec quel type de SGBD vous travaillez.

    Certains comme Oracle, SQL Server, demande de valider (commit) la transaction après tout autre ordre DML de type insert, update, delete, merge.

    @

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    voici le code où je fais ma mise a jour dans la base de données, et en effet j'utilise un execsql:
    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
     
    procedure TF_Main.AddExportStatus(DealID: integer; FileName: string);
    var
      ADOUp : TADOQuery;
    begin
      ADOUp := TADOQuery.Create(Application);
      try
        ADOUp.Connection := ADOConnectionParams;
        ADOUp.SQL.Text   := Format(RS_SQL_AddExportStatus, [DealID, QuotedStr(FileName)]);
        ADOConnectionParams.BeginTrans;
        try
          ADOUp.ExecSQL;
          ADOConnectionParams.CommitTrans;
        except
          On E:Exception do
          begin
            ADOConnectionParams.RollbackTrans;
            MessageDlg(E.Message, mtWarning, [mbOk], 0);
          end;
        end;
      finally
        ADOUp.Free;
      end;
    end;
    je suis sous oracle 10, je note que lors de l'execution de cette procedure, ça ne passe pas par le RollBackTrans donc il n'y a pas d'annulation d'execution de requetes. Sinon pourquoi l'utilisation de execsql peut me poser de problemes Merci...

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    Salut,
    En fait L'insert est fait, mais pas dans la bonne base de données que j'ai precisé au composant. C'est vraiment trop louche, j'ai precisé au composant que la base de dnnées soit base1@server1, je trouve que l'insertion a été faite dans base2@server2, sacahant qu'au début le composant était reglé sur base2@server2 et que j'ai fait la modif pour que ca travaille sur base1@server1!!!! pourkoi alors il prend pas en compte de cette modif!!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Essayes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AdoQuery.Active := False;
      AdoQuery.Connection := ....
      AdoQuery.Active := True;

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    Merci
    j'ai essayé mais comme ca c est pire car ca renvoi une erreur Base de donnée alors que avant ca s'execute mais pas dans la bonne base de données.

    En fait si j ai bien compris vous m'avez dedmandé de faire comme ceci non?

    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
     
    procedure TF_Main.AddExportStatus(DealID: integer; FileName: string);
    var
      ADOUp : TADOQuery;
    begin
      ADOUp := TADOQuery.Create(Application);
      try
        ADOUp.Active:=false;
        ADOUp.Connection := ADOConnectionParams;
        ADOUp.Active := True;
        ADOUp.SQL.Text   := Format(RS_SQL_AddExportStatus, [DealID, QuotedStr(FileName)]);
        ADOConnectionParams.BeginTrans;
        try
          ADOUp.ExecSQL;
          ADOConnectionParams.CommitTrans;
        except
          On E:Exception do
          begin
            ADOConnectionParams.RollbackTrans;
            MessageDlg(E.Message, mtWarning, [mbOk], 0);
          end;
        end;
      finally
        ADOUp.Free;
      end;
    end;

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bon personnellement je suis sur Delphi que depuis quelques jours, et je ne me suis jamais servi des composants ADO.. Mais si j'ai tout suivi, on te dit de faire :

    ADOUp.Active:=false;
    ADOUp.Connection := ADOConnectionParams;
    ADOUp.Active := True;
    Tu dois désactiver la connection à la base courante, indiquer à quelle connection tu veux te connecter, ADOConnectionParams doit alors contenir les infos du BON SERVEUR, ensuite tu réactives la connection.. Le INSERT qui suit devrait donc normalement s'opérer sur la bonne BD..

    Donc si dans le "ADOConnectionParams" de
    ADOUp.Connection := ADOConnectionParams;
    S'il y a les bons paramètres du serveur 1, ca devrait fonctionner...

    J'ai bon ^^ ?

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    1- Le AdoQUp.Active := True; ne sert à rien et ca risque te générer une erreur car c'est l'équivalent de AdoQUp.Open;. Et vu que tu crées dynamiquement ton TAdoQuery, ca sert a rien de l'activer vu qu'il est vide.
    Le Active := False ne sert a rien non plus, pour les même raison que plus haut.

    2- Quel pilote utilises tu ? ODBC ? Pilote direct à oracle ?

    3- Juste avant le ExecSQL rajoute cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Showmessage(AdoQUp.connection.ConnectionString);
    Et vérifie que les paramètres sont correctes, dans le cas contraire, vérifie que tu n'ai pas en dur dans ton code quelques choses qui modifie le ConnectionString

Discussions similaires

  1. [SQL] requete INSERT INTO ne marche pas
    Par mimagyc dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/08/2007, 11h48
  2. [ADO] Requete qui ne s'execute pas dans une transaction
    Par Faboul dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/07/2007, 13h30
  3. Réponses: 1
    Dernier message: 03/05/2007, 11h21
  4. Requete insertion dans une table sous delphi?
    Par EssaiEncore dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/01/2006, 15h12
  5. executer dos depuis requete sql
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/11/2004, 14h15

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