begin process at 2010 02 10 07:45:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Base de données

 > 

MySQL

 > 

Edit apres un append dans une boucle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Edit apres un append dans une boucle

vendredi 29 septembre 2006 à 16:16:08 | Edit apres un append dans une boucle

epeichette

Bonjour,

Je souhaite effectuer une opération très simple : Mettre à jour les données d'un champ d'un enregistrement.

Je lis dans une table Paradox des infos qui sont ensuite enregistrées dans une table MySQL.
L'accès à la base de données MySQL se fait par ODBC et la table en question est déclarée en TADOTable.
L'accès à la base de données Paradox se fait par BDE et la table en question est déclarée en TTable.

Voici mon source :
(Toutes les déclarations sont correctement faites)

Code :
Table001.First;
while not Table001.Eof do
begin
notices.Append;
notices.Fields[1].AsString := Table002.Fields[3].AsString;
...
notices.Post;
id_notice := notices.fields[0].AsInteger;
... xtmp_ved est initialisée ...
if notices.Locate('ID_Notice', id_notice, [loCaseInsensitive]) then
begin
notices.Edit;
notices.Fields[8].AsString := IntToStr(xtmp_ved);
notices.Post;
end;

...
Table001.Next;
end;

Et voilà l'erreur obtenue :
Citation:
La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut être changé depuis leur dernière lecture.

L'erreur est obtenue après que 2 ou 3 enregistrements soient correctement traités. La partie APPEND fonctionne parfaitement bien. C'est le EDIT qui semble être problématique (en gras). Il semble que ce soit un problème de positionnement mais bon....

Merci par avance pour l'aide que vous pourrez m'apporter.
lundi 2 octobre 2006 à 11:45:07 | Re : Edit apres un append dans une boucle

pers

Membre Club
selon moi du fait que tu travailles avec le table.EOf  et en même temps des append sur la même table peut poser des problèmes.  Ton edit devrait se situer dans une autre boucle...
mercredi 4 octobre 2006 à 15:15:38 | Re : Edit apres un append dans une boucle

pers

Membre Club
ce serait quand même super d'avoir une réaction non ???

mercredi 4 octobre 2006 à 15:33:08 | Re : Edit apres un append dans une boucle

epeichette

Bonjour,


excuse moi, mon silence vient du fait que j'était occupé sur un autre projet ces jours-ci. En fait je reprend le travail d'un collègue et je débute en delphi.

Donc dans cette boucle T001.of en plus d'alimenter ma table Notices, j'alimente d'autres tables  à partir de mon ID_Notice qui vient d'être enregistré et notament une table vedette, qui me donne de nouvelles informations pour mettre à jour mon enregistrement de Notices que j'ai créé plus haut. Je ne vois pas comment je pourrai faire autrement que de faire la mise à jours de l'enregistrement dans  la boucle : pour traiter vedette il faut que je connaisse l'ID_Notice en cours et donc que j'ai fait mon enregistrement dans Notices et je ne peux pas traiter le champs 8 de Notices sans être passer par mon algo de vedette. Je tourne donc en rond...

Maintenant il existe peut être une autre méthode delphi pour faire ce que je veux. J'ai essayé de faire la mise à jour de ma table Notices avec une requête sql mais cela prend vraiment trop de temps.
Si quelqu'un peut m'expliquer une alternative, j'en serais ravie
mercredi 4 octobre 2006 à 15:52:50 | Re : Edit apres un append dans une boucle

retaks666

Tu fais un:
id_notice := notices.fields[0].AsInteger;
...
notices.Locate('ID_Notice', id_notice, [loCaseInsensitive]) then

Mais logiquement, tu n'as pas changé de ligne, a moins que si dans la partie de ton code que tu n'as pas affiché. Si tu n'as pas fait d'autres insértion entre temps, pourquoi ne pas essayer quelque chose comme:

Table001.First;
while not Table001.Eof do
  begin
     notices.Append;
     notices.Fields[1].AsString := Table002.Fields[3].AsString;
    ... xtmp_ved est initialisée ...
     notices.Fields[8].AsString := IntToStr(xtmp_ved);

     notices.Post;
       ...
     Table001.Next;
  end;
mercredi 4 octobre 2006 à 16:57:50 | Re : Edit apres un append dans une boucle

epeichette

Je ne suis pas sur mais si j'ai bien compris, tu me propose de faire l'enregistrment dans la table notices en une fois après avoir initialisé xtmp_ved. Mon problème est que je dois connaitre le ID_Notice pour initialiser xtmp_ved. Comment faire pour connaitre la valeur de ID_Notice si je ne l'est pas enregistré avant et fait un post avant xtmp_ved ?
mercredi 4 octobre 2006 à 17:16:42 | Re : Edit apres un append dans une boucle

retaks666

humm as tu essayer de récupérer la valeur sans faire de post ?
genre
Table001.First;
while not Table001.Eof do
  begin
     notices.Append;
     notices.Fields[1].AsString := Table002.Fields[3].AsString;
    ... xtmp_ved:=notices.Fields[0].asinteger
     notices.Fields[8].AsString := IntToStr(xtmp_ved);

     notices.Post;
       ...
     Table001.Next;
  end;

Je ne sais pas si ça marche, mais tu peux otujours tester
jeudi 5 octobre 2006 à 09:02:12 | Re : Edit apres un append dans une boucle

epeichette

J'ai testé cette suggestion mais elle ne marche pas car le POST génère l'incrémentation automatique du ID_Notice.
Cette solution fait que nous cherchons toujours à faire une mise à jour de l'enregistrement dont le ID_Notice=00000000000000





jeudi 5 octobre 2006 à 19:03:33 | Re : Edit apres un append dans une boucle

Qualvin

J'ai refait l'exercice et ça me donne vraiment la même chose que Retaks...  Tu n'as peut-être pas enlevé l'utilisation de  id_notice := notices.fields[0].AsInteger;

On utilise pas du tout cette variable (id_notice) c'est la seule chose qui me fait penser que tu es encore sur le 00000

Tu pourrais peut-être utiliser FieldByName('NomDuChamp') au lieu de Fields[x], ça serait peut-être plus fiable, l'ordre des colonnes pourrait changer.

Table001.First;
while not Table001.Eof do
begin
     notices.Append;
     notices.Fields[1].AsString := Table002.Fields[3].AsString;
     ...
     ... xtmp_ved est initialisée ...
     notices.Fields[8].AsString := IntToStr(xtmp_ved);
     notices.Post;
     ...
     Table001.Next;
end;



S'il y a une propriété CachedUpdate sur notices, mets-le peut-être à False


Qualvin

jeudi 5 octobre 2006 à 19:06:51 | Re : Edit apres un append dans une boucle

Qualvin

Si tu fais comme ça, c'est presque impossible que ça ne marche pas, puisque tu n'as pas changé d'enregistrement. Du moins ton problème ne viendrais pas te tes données.

Qualvin

1 2

Cette discussion est classée dans : table, edit, fields, append, notices


Répondre à ce message

Sujets en rapport avec ce message

Recherche dans une DBLookupListBox [ par freeman44 ] J'ai une table (tblUSager) avec un champ nomUsager. J'ai une form (frmUsager) sur laquelle je met : - Un Edit (Edit1) - Une DBLookupListBox (lbxUsager ERREUR 8705 [ par DENNLER ] Je filtre la table puis j'effectue le traitement qui fait que la base (de type DBF) devient vide.Sur la Form j'utilise des composants types TStringFie filtrage table paradox [ par saimslim ] salut tous le monde je veu filtrer ma table comme suit: j'affiche tous les enregistremens que je donne dans des edit ,saufe que j'ai saisir dans un au [TTable][TQuery] edit et post [ par CapToMatteo ] Bonjour, quelle est la différence entre faire un edit sur une TTable et un edit sur un Query ? Le query étant un select * de la table (mais sous c TTable: copier une table dans une autre [ par juan ] Bonjour tous, mon problème aujourd'hui, c'est que j'ai une table Table1 qui est filtrée, j'ai créé une deuxième table Table2 sans aucun enregistrement acces simultanes dans une table [ par belaid52 ] Messieurs bonsoir,J'ai une table qui contient un matricule. Cette table est utilisee et mise a jour par plusieurs personnes en meme temps. Cette rubri Amélioration performance bases Paradox [ par ludo2223 ] Bonjour à tous, Je travaille actuellement sur un logiciel multimédia et j'ai besoin de parcourir l'ensemble d'un répertoire (sous répertoires et fich BatchMove [ par kam_2006 ] Bonjour à tous, J'ai deux bases données:une sur Interbase et l'autre sur Access.j'ai créée un module de données regroupant ces deux bases.Maintenant saisir uniquement des chiffres dans un edit [ par mark15 ] bonjour, je cherche un contole qui me permet a un Tedit d'accepter uniquement des chiffres ou des lettres merci intégration 2 table dans une DBgrid [ par bsamine ] slt,g une question :est ce que je peux intégré deux table dans une Dbgrid?? si oui cimment


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales