Bonsoir à tous.
Avant toute chose, je tiens à dire que j'ai farfouillé sur google, que j'ai fais plusieurs forums, que j'ai fais plusieurs recherches...bref, que je ne viens pas ici sans m'être renseignée avant.
Voilà,
Ma question est peut-être stupide...mais je ne trouves pas de résultat.
Pour un travail scolaire, je dois faire un projet delphi-sql.
Ce projet est un cahier de recettes virtuel.
On peut y ajouter/modifier/supprimer des recettes de cuisine.
J'ai bien commencé le projet..et j'arrive à une toute petite impasse.
Petite, mais qui me bloque à plusieurs endroits.
Je m'explique.
L'ajout de la recette en lui-même fonctionne très bien.
C'est ensuite, l'ajout des ingrédients qui pose un problème.
En effet, tant que la recette n'est pas créée, je ne peux pas y ajouter les ingrédients.
Cependant, j'ai trouvé la parade à ce soucis-là, et je récupère l'id de la dernière recette entrée pour ajouter les ingrédients.
(à coups d'onglets
étape 1 : ajout détail
étape 2 : ajout ingrédients
....)
J'ai un query ajout recette (qui fonctionne) :
Le code récupération de l'ID (qui devrait me retourne le bon)
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 procedure TFmCompte.AjoutRecette(Titre, Texte, Temps_prep, Difficulte_prep: string; Prix_Prep, NbrePersonne, id_Personne, id_Origine:integer); begin Query_Ajouter_Recette.SQL.Clear; Query_Ajouter_Recette.SQL.Add('INSERT INTO trecettes (NomRecette, Recette, Prix, Temps, Difficulte, NbrePersonne, idPersonne, idOrigine)'); Query_Ajouter_Recette.SQL.Add('VALUES (:Titre, :Texte, :Prix_Prep, :Temps_prep, :Difficulte_prep, :NbrePersonne, :id_Personne, :id_Origine)'); Query_Ajouter_Recette.ParambyName('Titre').asString:=Titre; Query_Ajouter_Recette.ParambyName('Texte').asString:=Texte; Query_Ajouter_Recette.ParambyName('Prix_Prep').asInteger:=Prix_Prep; Query_Ajouter_Recette.ParambyName('Temps_prep').asString:=Temps_prep; Query_Ajouter_Recette.ParambyName('Difficulte_prep').asString:=Difficulte_prep; Query_Ajouter_Recette.ParambyName('NbrePersonne').asInteger:=NbrePersonne; Query_Ajouter_Recette.ParambyName('id_Personne').asInteger:=id_Personne; Query_Ajouter_Recette.ParambyName('id_Origine').asInteger:=id_Origine; Query_Ajouter_Recette.ExecSQL; end;
Le code ajout des ingrédients avec l'id récupéré (qui devrait fonctionner) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TFmCompte.RecupIdApresAjout(); var id_Recette:integer; begin Query_Ajouter_Recette.SQL.Clear; Query_Ajouter_Recette.SQL.Add('SELECT max(idRecette) FROM trecettes'); Query_Ajouter_Recette.open; id_Recette:=Query_Ajouter_Recette.fields[0].asInteger; end;
Mais...dans mon code bouton...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TFmCompte.AjoutIngredientRecette(genreProduit: string; idRecette, idIngredient, Nombre:integer); begin Query_Ajouter_Recette.SQL.Clear; Query_Ajouter_Recette.SQL.Add('INSERT INTO tcontenir (idRecette, idIngredient, Nombre, genreProduit)'); Query_Ajouter_Recette.SQL.Add('VALUES (:idRecette, idIngredient, :Nombre, :GenreProduit)'); Query_Ajouter_Recette.ParambyName('idRecette').asInteger:=idRecette; Query_Ajouter_Recette.ParambyName('idIngredient').asInteger:=idIngredient; Query_Ajouter_Recette.ParambyName('Nombre').asInteger:=Nombre; Query_Ajouter_Recette.ParambyName('genreProduit').asString:=genreProduit; Query_Ajouter_Recette.ExecSQL; end;
Comment préciser que je veux l'id récupéré dans la seconde procédure pour la mettre dans la troisième ?
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 procedure TFmCompte.BtAjouterUnIngredientClick(Sender: TObject); var GenreIngredient, Ingredient : string; idIngredient, NbreIngredient : integer; begin NbreIngredient :=StrToInt(EdNombreIngredient.text); GenreIngredient :=CbExtension.items[CbExtension.itemindex]; Ingredient := DBLC_Ajout_Ingredient_Recette.Text; idIngredient:= DBLC_Ajout_Ingredient_Recette.KeyValue; LbListeIngredient.items.add(IntToStr(NbreIngredient) + GenreIngredient + Ingredient); RecupIdApresAjout(); AjoutIngredientRecette(GenreIngredient, idRecette, idIngredient, NbreIngredient); end;
Comme solution, pour le moment, j'écris le code de la récupération de l'ID directement dans l'ajout de l'ingrédient..
Mais j'ai besoin de ce même code dans l'ajout de l'image de la recette et dans l'ajout du type de recette..
Et réécrire chaque fois le même code n'est pas l'idéal pour ce genre de code..
C'est très bête, mais je bloque !
Merci d'avance...
Partager