Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Edit apres un append dans une boucle [ Base de données / MySQL ] (epeichette)

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é 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 Affichage des données d'une autre table [ par NorexaMS ] BonjourEtant débutant j'ai voulu faire ceci :J'ai crée 02 Tables :CLIENT (ID, NOM, PRENOM, ADRESSE)       ID = Champ entier autoincrémenté PKACHATS (I Filtrage suivant la marche du Edit [ par leader2000 ] Salut à TOUS! <p class comment realiser une recherche avec TadoTable ou relation un a plusieurs en adoquery(SQL) [ par samadblue ] javascript:Insert_Emoticon('/imgs2/smile.gif');Bonsoir tlm ! Aidez Moi svp : Voila le topo: Mon Projet : Base de données ACCESS 2000 Table : Patient Conversion de caractére á ASCII avec 2 edit box (champs de texte) [ par Dancsi27 ] Bonjours tout le monde,J'ai une petite exercice á faire pour l'école oú j'ai une fiche avec un button Quitter et 2 edit box (champs de texte)Le button


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.