Éviter d'Ajouter des Enregistrements en Double (SAP ABAP)
Je m essaie d'écrire si l'instruction à donner de message d'erreur si l'utilisateur essaie d'ajouter un numéro d'identification.Lorsque j'essaie d'entrer id j'obtiens l'erreur .jusqu'ici, il s ok, mais quand je tape un autre id no et de remplir les champs(nom,prénom, adresse etc...) il ne va pas à la base de données.
METHOD add_employee.
DATA: IT_EMP TYPE TABLE OF ZEMPLOYEE_20.
DATA:WA_EMP TYPE ZEMPLOYEE_20.
Data: l_count type i value '2'.
SELECT * FROM ZEMPLOYEE_20 INTO TABLE IT_EMP.
LOOP AT IT_EMP INTO WA_EMP.
IF wa_emp-EMPLOYEE_ID eq pa_id.
l_count = l_count * '0'.
else.
l_count = l_count * '1'.
endif.
endloop.
If l_count eq '2'.
WA_EMP-EMPLOYEE_ID = C_ID.
WA_EMP-EMPLOYEE_NAME = C_NAME.
WA_EMP-EMPLOYEE_ADDRESS = C_ADD.
WA_EMP-EMPLOYEE_SALARY = C_SAL.
WA_EMP-EMPLOYEE_TYPE = C_TYPE.
APPEND wa_emp TO it_emp.
INSERT ZEMPLOYEE_20 FROM TABLE it_emp.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
TITEL = 'INFO'
TEXTLINE1 = 'Record Added Successfully.'.
elseif l_count eq '0'.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
EXPORTING
TITEL = 'INFO'
TEXTLINE1 = 'Selected ID already in database.Please type another ID no.'.
ENDIF.
ENDMETHOD.
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr que je suis l'obtention de votre explication. Pourquoi êtes-vous essayer de ré-insérer toutes les entrées dans la table? Vous êtes juste essayer d'insérer
C_ID
etc si il n'existe pas encore? Pourquoi avez-vous besoin de toutes les entrées existantes pour qui?Si oui, jetez que choisir et la boucle complètement, vous n'en avez pas besoin. Vous avez un peu d'options...
Il suffit de lire la table avec votre entrée unique
Utiliser un modifier déclaration
Cela va écraser les entrées en double avec de nouvelles données (non champs de clé peut changer cette façon), il l'habitude de l'échec. Pas besoin d'un popup.
Attraper les exceptions SQL au lieu de faire dump
Si la mise à jour échoue en raison d'une exception, vous pouvez toujours vous rattraper et de faire face à des situations exceptionnelles.
Je pense qu'il y a un bug lors de l'ajout dans la table interne 'IT_EMP" et l'insertion dans 'ZEMPLOYEE_20 table.
Supposons que vous ajoutez le premier temps et puis vous insérez. Mais lorsque vous ajoutez la deuxième fois, vous aurez 2 dossiers dans "IT_EMP" qui vont être inséré dans 'ZEMPLOYEE_20'. C'est parce que vous n'avez pas actualiser ou effacer la table interne et là, vous aurez une erreur à l'exécution.
Selon Documentation SAP sur " l'Insertion de Lignes dans les Tables ':
Peut-être le bon sens ici est d'essayer d'insérer la zone de travail directement, mais avant, vous devez vérifier si l'enregistrement existe déjà à l'aide de la clé primaire.
Vérifier la documentation de SAP sur cette question en cliquant sur le lien avant de.
D'autre part, une fois
l_count
est zéro, en raison del_count = l_count * '0'.
que la valeur ne sera jamais de changement à tout autre numéro que vous n'aurez pas à ajouter ou insérer de nouveau.pourquoi êtes-vous récupérer toutes les entrées de zemployee_20 ?
Vous pouvez directement vérifier si le 'id' existe déjà ou non à l'aide de select unique. Si elle existe, puis afficher un message, si non, ajouter.
Il est recommandé de récupérer un seul champ lorsque son besoin et non pas l'ensemble de la table avec asterisc *
En outre, l_count n'est pas seulement inutile, mais aussi de la mauvaise mise en œuvre.
Vous pouvez utiliser directement la requête d'insertion,si le sy-subrc d'échec de soulever le message d'erreur.