【问题标题】:Insert functions inserts an empty record into database table in ABAP SAP插入函数在 ABAP SAP 中的数据库表中插入一条空记录
【发布时间】:2018-01-26 17:40:11
【问题描述】:

基本上,我正在尝试将表单中的记录插入数据库表中。不知道为什么它会添加空记录。

Here's my codes:
*--------------Screen 9003------------------------------------------------------------*

MODULE status_9003 OUTPUT.
  SET PF-STATUS 'PF_PO_INN'.
  SET TITLEBAR 'PO_TITLE1'.

ENDMODULE.


module user_command_9003 input.

  "IF sy-ucomm = 'EXE'.
  IF sy-ucomm = 'CREATE'.
    PERFORM ADD_COURSE.
  ELSEIF SY-UCOMM = 'BACK'.
    PERFORM CLEAR_INPUTS.
    LEAVE TO SCREEN 9001.
  ENDIF.
ENDMODULE.
*-------------------Create course--------------------------------------*
FORM ADD_COURSE.
  DATA  ITAB_ZCMS_COURSES_HD LIKE TABLE OF ZCMS_COURSES WITH HEADER LINE.

  ITAB_ZCMS_COURSES_HD-COURSE_ID = ZCMS_COURSES-COURSE_ID.
  ITAB_ZCMS_COURSES_HD-COURSE_CONTENT = ZCMS_COURSES-COURSE_CONTENT .
  ITAB_ZCMS_COURSES_HD-MUSIC_GENRE = ZCMS_COURSES-MUSIC_GENRE.
  ITAB_ZCMS_COURSES_HD-OPTIONS = ZCMS_COURSES-OPTIONS.
  ITAB_ZCMS_COURSES_HD-COURSE_NAME = ZCMS_COURSES-COURSE_NAME.


  INSERT ZCMS_COURSES FROM ITAB_ZCMS_COURSES_HD.

  MODIFY zcms_courses FROM TABLE ITAB_ZCMS_COURSES_HD.

  SELECT * INTO TABLE  ITAB_ZCMS_COURSES_HD FROM zcms_courses.

  LOOP AT ITAB_ZCMS_COURSES_HD.
    WRITE AT: /1(2) sy-tabix,
    6   ITAB_ZCMS_COURSES_HD-COURSE_NAME,
    20  ITAB_ZCMS_COURSES_HD-COURSE_CONTENT,
    30  ITAB_ZCMS_COURSES_HD-OPTIONS,
    46  ITAB_ZCMS_COURSES_HD-MUSIC_GENRE.
  ENDLOOP.


  "To show that record is added
  MESSAGE 'Course Created.' TYPE 'S'.
ENDFORM.

如上图所示插入一条空记录

^用户输入记录在弹出“Course Created”消息时添加到数据库中。

【问题讨论】:

  • 尝试在INSERT处下断点,看是否执行了2次。然后把 BP 放在前面来确定是什么引发了第二次执行
  • 请解释您要对代码执行的操作。 MODIFY 命令没有意义,内部表总是空的。没看到这段代码怎么会生成空记录,可能之前在表里吧?
  • 我认为在信息准备好之前有些事情正在触发。我前段时间遇到了同样的问题。这与 ALV 事件有关。

标签: abap opensql


【解决方案1】:

您没有将值附加到内部表中。而且,如果您使用修改语句,则不需要插入语句。如果有具有该键字段的记录,修改将更新,否则将插入。

应该是这样的:

*-------------------Create course--------------------------------------*
FORM ADD_COURSE.
  DATA  ITAB_ZCMS_COURSES_HD LIKE TABLE OF ZCMS_COURSES WITH HEADER LINE.
  " filling the header(work area) of the itab
  ITAB_ZCMS_COURSES_HD-COURSE_ID = ZCMS_COURSES-COURSE_ID.
  ITAB_ZCMS_COURSES_HD-COURSE_CONTENT = ZCMS_COURSES-COURSE_CONTENT .
  ITAB_ZCMS_COURSES_HD-MUSIC_GENRE = ZCMS_COURSES-MUSIC_GENRE.
  ITAB_ZCMS_COURSES_HD-OPTIONS = ZCMS_COURSES-OPTIONS.
  ITAB_ZCMS_COURSES_HD-COURSE_NAME = ZCMS_COURSES-COURSE_NAME.
  " Now you filled the itab.
  APPEND ITAB_ZCMS_COURSES_HD. 

  " You don't need insert statement modify will update/insert operations. 
  "INSERT ZCMS_COURSES FROM ITAB_ZCMS_COURSES_HD.

  MODIFY zcms_courses FROM TABLE ITAB_ZCMS_COURSES_HD.

  SELECT * INTO TABLE  ITAB_ZCMS_COURSES_HD FROM zcms_courses.

  LOOP AT ITAB_ZCMS_COURSES_HD.
    WRITE AT: /1(2) sy-tabix,
    6   ITAB_ZCMS_COURSES_HD-COURSE_NAME,
    20  ITAB_ZCMS_COURSES_HD-COURSE_CONTENT,
    30  ITAB_ZCMS_COURSES_HD-OPTIONS,
    46  ITAB_ZCMS_COURSES_HD-MUSIC_GENRE.
  ENDLOOP.


  "To show that record is added
  MESSAGE 'Course Created.' TYPE 'S'.
ENDFORM.

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    相关资源
    最近更新 更多