merci Beaucoup M. Sergio Je vais essayer et vous revenir
vraiment ça n'a toujours pas marché mais je penses que le code que vous aviez envoyé insert les données avant de contrôler si la clé existe déjà.
voici le message que ça affiche: #23000 Duplicate entry'PV003-2020-05-19-00:00:00-Sortie' for key 'Primary'
mais maintenant ça fini le processus
Bonjour,
Compte tenu du message obtenu contenant "Duplicate" et du code proposé if Pos('DUPLICATE',E.Message)>0 then, peut-être suffirait-il de s'affranchir de la casse : if Pos( 'duplicate', LowerCase(E.Message) ) > 0 then...
Et de vérifier que l'exception est bien montrée à l'exécution, en dehors de l'EDI, et pas juste en mode débogage.
C'est d'ailleurs bien le principe du code de tenter l'insertion et d'intercepter l'exception levée en cas d'erreur pour cause de doublon pour faire à la place en seconde intention une mise à jour sur cette clef.
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
if AnsiContainsText(E.Message,'duplicate') then ne serait pas mal non plus
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Ne serait il pas mieux de contrôler le doublon en if...then et de Else en insertion??? sinon par rapport à votre code l'insertion des données vient en If...then puis je me demande si ce n'est pas à cause de ça que je n'ai pas encore la solution
La fonction Try...except on E:Exception do a réussi à poursuivre le processus mais le problème de contrôle de doublon continue
il semble que vous n'aviez pas encore perçu mon problème. C'est au faites le contrôle de doublon sans qu'il ne m'affiche erreur que je recherche. la logique du code c'est que lorsqu'il trouve la clé il procède à la modification des quantités liés à cette clé.
Ça : Tous ceux qui t'on répondu ici l'on compris !
C'est toi qui ne prend pas la peine de nous lire correctement : tu copie/colle bêtement tout ce qu'on te donne sans prendre le temps de voir ce qu'il faut adapter à ton cas en espérant que ça va marcher du premier coup !
Déjà on est pas en face de ton code et on peut pas intervenir directement dessus sinon ça ferait belle lurette que le problème serait réglé !
Tu n'a pas pris la peine de lire ce que tourlourou a dit à propos de l'exemple avec le try except que je t'ai posté et de la correction qu'il propose (et il a raison), je le cite :
Que dire de plus... On n'est pas magiciens, on donne juste des conseils, mais il faut encore se donner la peine de lire, d'examiner, de tester, d'adapter, et pas attendre la solution miracle qui tombe par hasard !!Bonjour,
Compte tenu du message obtenu contenant "Duplicate" et du code proposé if Pos('DUPLICATE',E.Message)>0 then, peut-être suffirait-il de s'affranchir de la casse : if Pos( 'duplicate', LowerCase(E.Message) ) > 0 then...
Et de vérifier que l'exception est bien montrée à l'exécution, en dehors de l'EDI, et pas juste en mode débogage.
C'est d'ailleurs bien le principe du code de tenter l'insertion et d'intercepter l'exception levée en cas d'erreur pour cause de doublon pour faire à la place en seconde intention une mise à jour sur cette clef.
Et surtout se documenter !!!!
C'est pourtant pas les tutoriels et les FAQ qui manquent ici !!!
Tout le monde a compris que vous souhaitiez faire.
Vous gérer des mouvements de stock, vous prenez les données d'une commande (un vente) ce qui donne un sortie de stock, vous souhaitez n'avoir qu'une seule ligne de sortie par jour donc si elle existe déjà, vous devez fusionner.
C'est extrêmement basique.
un doute sur Datetimepicker1.DateTime, un TDateTimePicker en Kind à dtkDate, la partie Time n'est pas à Zéro en général mais contient l'heure courante
J'utiliserais Datetimepicker1.Date ou alors DateOf(Datetimepicker1.DateTime) à la fois pour la recherche que pour l'insertion
Votre code avec des Locate et un DateOf
Si problème de uses manquants :
VarArrayOf est dans l'unité Variants
DateOf est dans l'unité DateUtils
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 Tampon1.First; While not Tampon1.Eof do begin If Produit.Locate('CodPro', VarArrayOf([Tampon1.Fields[0].asstring]), []) then begin Produit.Edit; Produit.FieldByName('Stock').AsFloat := Produit.FieldByName('Stock').AsFloat-Tampon1.Fields[3].asfloat; Produit.Post; end; Vente.AppendRecord([Edit5.Text, Tampon1.Fields[0].AsString, Tampon1.Fields[3].AsFloat, Tampon1.Fields[5].Asfloat, Tampon1.Fields[6].Asfloat]); som := som + Tampon1.Fields[6].AsInteger; //Tot := Tot + Tampon1.Fields[7].AsInteger; tampon.First; If tampon.Locate('CodTam', VarArrayOf([Tampon1.Fields[0].asstring]), []) then begin tampon.Edit; tampon.Fields[3].AsFloat := tampon1.FieldByName('QteFin').AsFloat; tampon.Post; end; Stocker.First; if Stocker.Locate('CodPro;DatStock;Nature', VarArrayOf([Tampon1.Fields[0].AsString, DateOf(Datetimepicker1.DateTime), 'Sortie']), []) then begin Stocker.Edit; Stocker.FieldByName('Qte').AsFloat := Stocker.FieldByName('Qte').AsFloat + tampon1.FieldByName('Qte').AsFloat; Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat; Stocker.FieldByName('Heure').AsString := edit12.Text; Stocker.Post; end else begin Stocker.Insert; Stocker.FieldByName('CodPro').AsString := Tampon1.Fields[0].AsString; Stocker.FieldByName('DatStock').AsDateTime := DateOf(Datetimepicker1.DateTime); // DateTime ? Stocker.FieldByName('Heure').AsString := edit12.Text; Stocker.FieldByName('Nature').AsString := 'Sortie'; Stocker.FieldByName('QteIni').AsFloat := tampon1.FieldByName('QteIni').AsFloat; Stocker.FieldByName('Qte').AsFloat := tampon1.FieldByName('Qte').AsFloat; Stocker.FieldByName('QteFin').AsFloat := tampon1.FieldByName('QteFin').AsFloat; Stocker.Post; end; Tampon1.Next; end;
Ne doutez pas des membres à comprendre votre problème mais plutôt de votre capacité à analyser les solutions proposées.
Par exemple, sergio_is_back évoque la différence entre une exception et une notification d'exception, comprenez-vous ces notions ?
Avez-vous correctement utiliser les blocs try..except, permettez-nous d'en douter car vous sembliez ne pas connaitre cet élément fondamental du langage.
Peut-être que vous devriez reprendre les bases du langage avant de vous lancer dans cette exercice.
Vous insistez à utiliser des composants obsolètes au lieu de passer un recodage en SQL qui est aussi fondamental pour MySQL, pourquoi ne pas aussi approfondir cela ?
Avec Delphi 7 et MySQL, j'utiliserais MyDAC de Devart CoreLab, cela vous ouvrira plus de possibilité que le BDE.
LA manipulation de date / time étant un élément particulier en SQL, confondre Date, Time et DateTime est vite repérer (à mon avis le seul problème)
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
Vraiment merci infiniment à vous tous pour votre appui. je viens d'avoir un plus grâce à vous.
Bonjour les amis!!!
j'ai le sentiment que j'ai été lâché. Mr Sergio et bien les autres aussi.
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Bonjour Mr Sergio. Oui je suis étudiant c'est pourquoi je sollicite votre expertise pour réussir dans le programme que je suis entrain d'écrire.
merci pour votre appui mais vous savez j'ai essayé le code de Mr ShaiLeTroll mais ça persiste toujours
Pour tout vous dire je n'accroche pas à votre demande, les informations fournies sont parcellaires, l'organigramme du programme inexistant et, à mon avis, totalement à revoir.
Et toute suggestion de SQL en lieu et place de lecture en boucle à carrément été écartée pour je ne sais quelle raison inepte.
Apprenez puisque étudiant que plus des deux tiers d'un programme est résolu en expliquant clairement le besoin, cela veut dire (entre autre) fournir la structure des tables
Vous vous rendez compte qu'il a fallu déduire de vos divers post et du code ce que vous vouliez et je ne suis même pas sûr que cela soit vraiment le bon traitement !
Rien que ça, ça me fait peur ! J'ai l'impression que le problème est encore plus en amontLa boucle est lié à une table tampon que j'ai créé mais qui prends les données qui correspondent aux données de la table stocker
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Oui Mr Sergio SQL n'est pas ecarté, si vous aviez une solution avec SQL proposé là moi sinon, si j'avais la possibilité de vous envoyé la structure de la table je vais vous l'envoyer. merci
On a l'impression que vous attendez la réponse sans la chercher, une réponse a été donnée, en général, lorsque le sujet n'est plus alimenté c'est que c'est résolu, on l'oublie et l'on passe à un autre sujet plus récent.
Pour ma part, j'ai pensé que c'était une migration d'un vieux programme genre en Paradox vers MySQL, avec une logique complexe accumulée à cause de son ancienneté que vous faisiez évoluer dans l'état sans trop comprendre ce que vous faisiez.
Si c'est un projet scolaire, il est évident qu'il faut revoir tout ça !
Vous devriez retourner voir votre professeur et reprendre ce que l'on vous a enseigné, j'espère que c'est en SQL que l'on vous forme.
Nous pourrons vous aider pour des éléments techniques mais veuillez développer votre autonomie.
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
Même si Paradox il y avait, Paradox supportait quand même un SQL minimum. Cette histoire de tampon me paraît bien tarabiscotée
jeVous devriez retourner voir votre professeur et reprendre ce que l'on vous a enseigné, j'espère que c'est en SQL que l'on vous forme.
Nous pourrons vous aider pour des éléments techniques mais veuillez développer votre autonomie.
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager