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 :

Probleme Insertion dans BDD avec dbaccess


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Probleme Insertion dans BDD avec dbaccess
    Bonjour

    je me permet de vous solliciter car ca fait un peu de temps que je bloque sur mon problème.

    voici mon code qui pose probleme :

    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
     
    // ECRITURE DANS LA BASE DE DONNEES
    procedure TFicheGet.EcrireBDD(var data: TstringList);
    var
      SQLMsg: string;
    begin
      SQLQuery1.Params[0].Clear;
      SQLQuery1.Params[0].AsString := data.values['EVENTDATA_TIMESTAMP'];
      SQLQuery1.Params[1].AsString := data.values['EVENTDATA_NAME'];
      SQLQuery1.Params[2].AsString := data.values['EVENTDATA_TYPE'];
      SQLQuery1.Params[3].AsString := data.values['OBJECTDATA_NAME'];
      SQLQuery1.Params[4].AsString := data.values['OBJECTDATA_TYPE'];
     
      SQLMsg := 'INSERT INTO DGFEVT(EVENTDATA_TIMESTAMP,EVENTDATA_NAME,EVENTDATA_TYPE,OBJECTDATA_NAME,OBJECTDATA_TYPE) VALUES (:EVENTDATA_TIMESTAMP, :EVENTDATA_NAME, :EVENTDATA_TYPE, :OBJECTDATA_NAME, :OBJECTDATA_TYPE)';
      SQLQuery1.sql.Add(SQLMsg); // Stockage de la requete dans le sql
      FilDeLeau.Lines.Add('Requête ajoutée dans sqlquery');
      SQLQuery1.ExecSQL; // Exécution de la requete stockée
      FilDeLeau.Lines.Add('Requête exécutée');
      SQLQuery1.sql.Clear; // Nettoyage des requetes stockées
      FilDeLeau.Lines.Add
        ('Connexion fermée - Fin de la procédure Traitement des données');
    end;
     
    // PROCEDURE DE TRAITEMENT DU CONTENU DE LA REQUETE
    procedure TFicheGet.TraitementData(var DataList: String);
    var
      sl: TstringList;
    begin
      sl := TstringList.Create;
      sl.Text := DataList;
     
      if sl.values['OBJECTDATA_TYPE'] = 'GLOBAL_EVENT' then
      begin
        // Ajout dans le mémo 2
        EcrireMemo2(sl);
        FilDeLeau.Lines.Add('Evenement global MemoEcrit');
        // traitement base
        EcrireBDD(sl);
        FilDeLeau.Lines.Add('Ecriture dans base terminée');
      end;
      // Tous les événements affichés dans le mémo 3
      EcrireMemo3(sl);
      sl.free;
      FilDeLeau.Lines.Add('Liste de données de la requete libérée');
    end;
     
    // SUR EVENEMENT DE RECEPTION D'UNE REQUETE
    procedure TFicheGet.HttpCli1DocData(Sender: TObject; Buffer: Pointer;
      Len: Integer);
    var
      str: ARRAY [0 .. 9] OF string;
    begin
      setstring(str[I], PAnsichar(Buffer), Len);
      FilDeLeau.Lines.Add('DocData n° ' + inttostr(I));
      Memo1.Lines.Clear;
      Memo1.Lines.Add(str[I]);
      TraitementData(str[I]);
      if I = 10 then
        I := 0;
      I := I + 1;
    end;
    Au départ, j'effectue un get qui me permet de faire un monitoring d'événements à travers le réseau. Je me sers donc de l'événement DocData pour traiter le message que je reçois (au format texte).

    Le probleme que j'ai, c'est lorsqu'un événement est de type GLOBAL_EVENT, il doit être inséré en base de données. et le problème est que la premiere fois qu'un GLOBAL_EVENT est activé, il rentre bien en base. mais le 2eme événement de type GLOBAL_EVENT reste bloqué dans la procédure d'insertion EcrireBDD.
    De plus, lors de ce "blocage", le memo1 se se "clear" pas, mais il se remplit quand même.

    Je n'arrive pas à trouver la cause du probleme. Quelqu'un pour me conseiller?

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Code PASCAL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query1.Active := False;
    Query1.Parameters.ParamByName('EVENTDATA_TIMESTAMP').Value := data.values['EVENTDATA_TIMESTAMP'];
    Query1.ExecSQL;

    Sinon tu devrais passer le SQL avant d'affecter les paramètres.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Attention aussi à CheckParams
    Fais-tu des AddParams ou CreateParams manuellement ?
    Evite Params[Indice] préfère ParamByName, c'est plus fiable si tu changes l'ordre dans ta requête !
    le "Params[0].Clear()" ne sert à rien ou alors tu confonds avec "Params.Clear()" et là, il évident que rien de fonctionnera !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci à vous 2.

    Je vais creuser dans vos directions.

    Je tiens à préciser que j'arrive à ajouter des enregistrements dans ma base, ça n'est pas un probleme.

    Le soucis est que je ne peux en ajouter qu'un seul par démarrage de mon programme... Lors du premier passage dans la procédure EcrireBDD, ca se passe bien. Au deuxième passage, ben ca bloque dans la procédure au niveau de l'execSQL.

    Et j'ai affecté manuellement mes params dans le composant posé sur ma fiche. Ces params n'ont pas vocation à être changés, les balises transmises par ma requete http étant systématiquement les mêmes.

    enfin, effectivement, le param[0].clear ne sert à rien, ca faisait juste partie de mes tests...

    Je vous informerai ce soir de la suite
    Merci!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut


    subtilité du Paramcheck associé à la remarque "Tu devrais passer le sql avant d'affecter les parametres" et la réponse est bonne.

    J'ai quand même dû lire attentivement l'aide de paramcheck (Normal !) pour comprendre, ce n'est pas évident...

    En conclusion ce qui bloquait étaient les valeurs des paramètres qui ne changeaient pas, du coup l'insertion était n'était pas réalisée?

    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
    procedure TFicheGet.EcrireBDD(var data: TstringList);
    var
      SQLMsg: string;
    begin
     
      SQLQuery1.Active := false;
      SQLMsg := 'INSERT INTO DGFEVT(EVENTDATA_TIMESTAMP,EVENTDATA_NAME,EVENTDATA_TYPE,OBJECTDATA_NAME,OBJECTDATA_TYPE) VALUES (:EVENTDATA_TIMESTAMP, :EVENTDATA_NAME, :EVENTDATA_TYPE, :OBJECTDATA_NAME, :OBJECTDATA_TYPE)';
      SQLQuery1.sql.Add(SQLMsg); // Stockage de la requete dans le sql
      FilDeLeau.Lines.Add('Requête ajoutée dans sqlquery');
     
      SQLQuery1.Params.ParamByName('EVENTDATA_TIMESTAMP').Value :=
        data.values['EVENTDATA_TIMESTAMP'];
      SQLQuery1.Params.ParamByName('EVENTDATA_NAME').Value :=
        data.values['EVENTDATA_NAME'];
      SQLQuery1.Params.ParamByName('EVENTDATA_TYPE').Value :=
        data.values['EVENTDATA_TYPE'];
      SQLQuery1.Params.ParamByName('OBJECTDATA_NAME').Value :=
        data.values['OBJECTDATA_NAME'];
      SQLQuery1.Params.ParamByName('OBJECTDATA_TYPE').Value :=
        data.values['OBJECTDATA_TYPE'];
      FilDeLeau.Lines.Add('Paramètres modifiés');
      SQLQuery1.ExecSQL; // Exécution de la requete stockée
      FilDeLeau.Lines.Add('Requête exécutée');
      SQLQuery1.sql.Clear; // Nettoyage des requetes stockées
      FilDeLeau.Lines.Add
        ('Connexion fermée - Fin de la procédure Traitement des données');
    end;
    Merci encore

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

Discussions similaires

  1. [MySQL] Insertion dans bdd avec pdo
    Par linouchka dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 24/06/2014, 14h49
  2. probleme d'insertion dans db avec ma classe mysql
    Par diblasio dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2009, 14h52
  3. probleme d'insertion dans mysql avec java
    Par hypothese dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/09/2008, 12h02
  4. probleme d'insertion dans table avec cle secondaire
    Par pseudobidon57 dans le forum SQL
    Réponses: 1
    Dernier message: 01/06/2007, 13h46
  5. [CKEditor] Probleme pour afficher le code html apres insertion dans bdd
    Par Pepito2030 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 28/12/2006, 21h52

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