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:
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?