插入函数将空记录插入ABAP SAP中的数据库表中
基本上,我正在尝试将表单中的记录插入到数据库表中。不知道为什么它会添加到空记录中插入函数将空记录插入ABAP SAP中的数据库表中,abap,opensql,Abap,Opensql,基本上,我正在尝试将表单中的记录插入到数据库表中。不知道为什么它会添加到空记录中 Here's my codes: *--------------Screen 9003------------------------------------------------------------* MODULE status_9003 OUTPUT. SET PF-STATUS 'PF_PO_INN'. SET TITLEBAR 'PO_TITLE1'. ENDMODULE. modul
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.
它插入一条空记录,如上所示
^当弹出“课程创建”消息时,用户输入记录被添加到数据库中。您没有将值附加到内部表中。而且,如果您使用的是modify语句,则不需要insert语句。如果有带有该键字段的记录,“修改”将更新,否则将插入 应该是这样的:
*-------------------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.
您没有将这些值附加到内部表中。而且,如果您使用的是modify语句,则不需要insert语句。如果有带有该键字段的记录,“修改”将更新,否则将插入 应该是这样的:
*-------------------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.
尝试在插入处放置断点,并查看是否执行了2次。然后将BP放在前面,以确定引发第二次执行的原因。请解释您试图对代码执行的操作。
MODIFY
命令毫无意义,内部表将始终为空。我不明白这段代码如何生成一个空记录,可能它以前在表中?我想在信息准备好之前就有东西触发了。我不久前也遇到过同样的问题。这与ALV事件有关。请尝试在插入处放置断点,并查看是否执行了2次。然后将BP放在前面,以确定引发第二次执行的原因。请解释您试图对代码执行的操作。MODIFY
命令毫无意义,内部表将始终为空。我不明白这段代码如何生成一个空记录,可能它以前在表中?我想在信息准备好之前就有东西触发了。我不久前也遇到过同样的问题。这与ALV事件有关。