ca c'est pas une erreur de traitement , c'est une mise a jour non faite
et si tu ne fais pas un Post , pas de mise a jour .
Si ton appli 'merde' c'est parce que le programmeur merde
j'ai souvent fait des 'moulinettes' de ce style pour être sur de mon fait
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
Salut !
Faut penser à appeler Append (ajout), Insert (insertion) ou Edit (modification) suivi d'un post pour valider.
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Un nouvel élément rentre en compte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 tmp3:=calculDate(tmp2, leJour, leMois, lAnnee, tmp1); FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=tmp3; FormGestion.TableParc.Post; showmessage(DateTimetoStr(FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime)); FormGestion.TableParc.Next;
La date qu'il s'affiche est 31/12/1899, qui a pour valeur NULL.
Donc tmp3:=0 ? ou null
est-il testé ?
Quid de l'idée de faire un SQL du genre
ce qui ferait grosso modo la même chose en plus efficace
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UPDATE TABLEPARC SET DATE_GARANTIE=DATE_ACHAT + GARANTIE
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
tmp3 est à sa valeur c'est le champ de la base qui est à NULL.
Après j'ai déjà pensé à faire
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE TABLEPARC SET DATE_GARANTIE=DATE_ACHAT + GARANTIE
Le problème c'est qu'il ajoute la garantie aux jours et non aux années.
Par exemple si la date d'achat est le 15/09/1999 et que la garantie est à 3 ans, la date de garantie est au final égale à 18/09/1999 et non 15/09/2002. C'est dailleurs pour ça que j'ai voulu spliter la date.
et comment dans notre boule de cristal on peut savoir que la valeur de garantie est en année ?
ceci dit cela devient un problème Access et non Delphi pour ce calcul
quant à la forme
c'est du béton . Donc comme essai une suggestion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 table.Open; while not table.EOF do begin table.Edit; Table.fieldbyName('unchamp').asInteger:=1; Table.post; Table.Next; end; table.Close;
et si la maj du champ se fait bien , il s'agira bien du retour de fonction qui est branlant
Code : Sélectionner tout - Visualiser dans une fenêtre à part FormGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=Date;
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
Beh si tu veux quand je fais
Ca me rentre une date dans la abse et elles s'affichent dans la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE TABLEPARC SET DATE_GARANTIE=DATE_ACHAT + GARANTIE
Parcontre quand je fais
rien ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 FormGestion.TableParc.Open; while notFormGestion.TableParc.Eof do begin FormGestion.TableParcEdit; mGestion.TableParc.FieldByName('DATE_GARANTIE').AsDateTime:=Date; etc .....
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE TABLEPARC SET DATE_GARANTIE=DATE_ACHAT + (GARANTIE*365)
Ca marche niquel !!!!
Maintenant qu'on y est, savez vous comment dans ma requete SQL je peut dire
SELECT* WHERE (DATE_GARANTIE< (La date d'aujourd'hui) );
moi je le ferais avec un paramètre bien que le SQL (à ce que je pense) dispose d'une fonction date qui retourne la date système
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT* WHERE (DATE_GARANTIE<:date_ce_jour );
Bon courage ou Bonne Chance (selon le contexte)
Mon blog sur WordPress
Effectivement comme en excel il ya la fonction now qui marche sous access.
Et par la même occasion j'ai trouvé la fonction year quir récupère les années d'une date.
Je vais essayer de faire YEAR(DATE_GARANTIE)=YEAR(DATE_ACHAT)+GARANTIE
Pour faire une fonction plus propre, par la même occasion dans mon select je mettrais DATE_GARANTIE<:now()
EDIT=> YEAR(DATE_GARANTIE)=YEAR(DATE_ACHAT)+GARANTIE
Marche pas: erreur dans le update, mais <now()
Me retourne Erreur SQL générale, et il s'agit de la deuxième requête.
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 } Query1.close; Query1.SQL.Clear; req1:='UPDATE TableParc SET DATE_GARANTIE=DATE_ACHAT'; Query1.SQL.Add(req1); Query1.ExecSQL; Query1.close; Query3.close; Query3.SQL.Clear; req3:='UPDATE TableParc SET YEAR(DATE_GARANTIE)=(YEAR(DATE_ACHAT)+GARANTIE)'; Query3.SQL.Add(req3); Query3.ExecSQL; Query3.close;
Et dans le message d'erreur il m'affiche également que c'est une erreur d'appel du UPDATE.
J'ai essayé de tout mettre en une requête, avec un AND, mais la date qui s'affiche après est 31/12/1899.
Avez-vous une idée ?
et bien sur , comme d'habitude tu ne donnes pas toutes les informations !!
quelle est la valeur de REQ3
en mode debug quelle est la valeur de Query3.SQL.Text (ligne 14)
un peu de rigueur !
qu'est ce que c'est que ça ?J'ai essayé de tout mettre en une requête, avec un AND,
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
OOps mais aussi quelle idée de passer par une variable
Pour ce qui est du SQL
je crois bien que ce ne soit pas possible le terme de gauche doit être un champ , pas une fonction sur un champ
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2'UPDATE TableParc SET YEAR(DATE_GARANTIE)=(YEAR(DATE_ACHAT)+GARANTIE)'
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
C'est également ce que j'ai remarqué puisque c'est quand j'ajoute au terme de gauche YEAR() que ça merde.
Je vais laisser Garantie*365
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