Bonjour à tous,
j'ai une table listant des lignes de facture dans une base Access, la clé primaire est composée du numéro de facture et du numéro de ligne donc je ne peux pas avoir d'identifiant en auto-increment. J'ai une appli que j'ai développé avec delphi qui est censé me créer des commandes et leur lignes.
Voilà le code de la procédure qui me crée mes lignes de commande :
Le problème c'est que de manière aléatoire j'ai des lignes qui sont créées avec le même numéro de ligne que la précédente. En faisant du pas à pas je vois que le code s'exécute comme il le devrait et je n'arrive pas à trouver d'ou cela peut venir.
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 procedure TFormCommande.AjoutLigne(code:string); var noCmd, designation, date, depot, codeFrn : string; noLigne, pxUnit, totLigneHT : integer; begin noLigne := 0; //Récupération de l'article concerné QueryPiece.SQL.Text := 'SELECT * FROM Piece WHERE Code ="' + code + '"'; QueryPiece.Open; //Construction de la ligne de commande noCmd := lbNoCmd.Caption; QueryCommande.SQL.Text := 'SELECT Date, CodeTiers, Depot FROM [Entete commande fournisseur] WHERE Code = "' + noCmd + '"'; QueryCommande.Open; QueryNoLigne.SQL.Text := 'SELECT MAX(NumeroLigne) as ligne FROM [Ligne Commande Fournisseur] WHERE CodeDocument = "' + noCmd + '"'; QueryNoLigne.Open; noLigne := 1 + QueryNoLigne.FieldByName('ligne').AsInteger; date := QueryCommande.FieldByName('Date').AsString; designation := QueryPiece.FieldByName('Nom').AsString; pxUnit := QueryPiece.FieldByName('PrixAchat').AsInteger; codeFrn := QueryCommande.FieldByName('CodeTiers').AsString; depot := QueryCommande.FieldByName('Depot').AsString; QueryCommande.Close; //Ajout de la ligne à la table Ligne Commande Fournisseur QueryLigneCmd.SQL.Text := 'SELECT * FROM [Ligne Commande Fournisseur]'; QueryLigneCmd.Open; QueryLigneCmd.Insert; QueryLigneCmd.FieldByName('CodeDocument').AsString := noCmd; QueryLigneCmd.FieldByName('NumeroLigne').AsInteger := noLigne; QueryLigneCmd.FieldByName('CodeArticle').AsString := code; //type QueryLigneCmd.FieldByName('Designation').AsString := designation; QueryLigneCmd.FieldByName('PrixUnitaire').AsInteger := pxUnit; QueryLigneCmd.FieldByName('CodeTiers').AsString := codeFrn; QueryLigneCmd.FieldByName('DateDocument').AsString := date; QueryLigneCmd.FieldByName('depot').AsString := depot; QueryLigneCmd.Post; QueryLigneCmd.Close; //Actualisation de la grille ligne de commande QueryLigneCmd.SQL.Text := 'SELECT CodeArticle as Code, Designation as Désignation, PrixUnitaire as [Prix Unitaire], Quantite as Qté, NumeroLigne FROM [Ligne Commande Fournisseur] WHERE CodeDocument = "' + noCmd + '"'; QueryLigneCmd.Open; //Ajustement taille colonne DBGridLigneCommande.Columns[0].Width := 80; DBGridLigneCommande.Columns[1].Width := 185; DBGridLigneCommande.Columns[2].Width := 65; DBGridLigneCommande.Columns[3].Width := 40; DBGridLigneCommande.Columns[4].Visible := false; end;
Si quelqu'un à une idée ou a déjà fait face au même genre de problème je suis tout ouïe ! ^^
Merci d'avance.
Partager