欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > ABAP数据库表的增改查

ABAP数据库表的增改查

2025/4/6 17:24:28 来源:https://blog.csdn.net/miraclemoonbyul/article/details/145769609  浏览:    关键词:ABAP数据库表的增改查

数据表的增改查

接到一个任务,是对数据库表的增改查,增和查现在已经比较熟练了,关键是改,还有一个要求是要求系统能自动更新修改人和修改日期以及时间。

找到数据库表,新增这三个字段

这里另提一句,一般数据库表不建议自己在不确定的情况下修改的,什么数据类型还是数据元素啥的,因为你不知道这个表关联了哪些程序,改了数据类型的话会很麻烦。

数据的查找:

很简单,就是一个最基本的报表的写法

1.定义一个内表用来装数据

2.从数据库表里取数据装入内表

3.alv显示数据

数据的新增

这里我的思路是通过excel上传数据新增数据,那种类似于点个按钮增加的还没研究会(sad)

1.SMW0上传模版

注意要选二进制数据,有一次不小心上传到HTML了结果找不到模版

上传模版之前有提过,就不详细写了

2.显示下载模版按钮

3.显示上传文件的输入框

4.读取excel

我在这里给时间日期以及用户赋了值,记录每次上传的数据

5.ALV显示

这里status = 'X'. 要加上,不然显示不了按钮

6.数据的保存

数据的修改

1.alv选择可以更改

这里第二个值为X的时候表示能够更改

2.获取修改后alv的数据

关键是这段代码,能够及时获取alv更改后的数据,不然,每次都要按一下ctrl s 才能更新gt_itab里的数据。

3.数据的保存

这样就结束辽

遇到了一个小问题,就是在alv界面修改的时候,小数点总是自动往前移,解决方法就是在要修改的字段前加上FIELDCAT_LN-INTTYPE = 'C'.

完整代码:

*&---------------------------------------------------------------------*
*& Report  ZLXY007
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT  ZLXY007.INCLUDE zpub_lvc_func."包含功能模块
INCLUDE <icon>."包含图标定义
TABLES: sscrfields,zboxsize.* 定义类型池
TYPE-POOLS: vrm.
TYPE-POOLS: slis.DATA:BEGIN OF gt_itab OCCURS 0.
INCLUDE TYPE ZBOXSIZE.
DATA:
END OF gt_itab.
DATA gt_itab1 LIKE TABLE OF gt_itab WITH HEADER LINE.DATA ztext1 TYPE string."提示是否保存信息
DATA: functxt TYPE smp_dyntxt."定义动态文本类型变量
* 选择屏幕定义
PARAMETERS p1 RADIOBUTTON GROUP grp1 USER-COMMAND cmd1 DEFAULT 'X'."查询数据
PARAMETERS p2 RADIOBUTTON GROUP grp1   ."修改数据
PARAMETERS p3 RADIOBUTTON GROUP grp1   ."新增数据SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_zcode1  FOR zboxsize-zcode MODIF ID M1,s_zsize1  FOR zboxsize-zsize MODIF ID M1.
SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_zcode2  FOR zboxsize-zcode MODIF ID M2,s_zsize2  FOR zboxsize-zsize MODIF ID M2.
SELECTION-SCREEN END OF BLOCK b2.SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-001.
PARAMETERS:  p_file  LIKE rlgrap-filename OBLIGATORY DEFAULT '.XLS'  MODIF ID M3.
SELECTION-SCREEN END OF BLOCK b3.INITIALIZATION.sscrfields-ucomm  = 'FC01' .functxt-icon_id   = icon_export.  "文本字functxt-icon_text = '下载导入模版'.  "菜单制作器:sscrfields-functxt_01 = functxt.SELECTION-SCREEN: FUNCTION KEY 1.AT SELECTION-SCREEN .CASE sscrfields-ucomm.WHEN 'FC01'."下载模版CALL FUNCTION 'ZDOWNLOAD_TEMPLE_FILE'EXPORTINGp_templename = 'ZMMR120'.WHEN OTHERS .ENDCASE.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.CALL FUNCTION 'KD_GET_FILENAME_ON_F4'EXPORTINGmask          = ',*.xls,*.xls;,*.xlsx,*.xlsx.'CHANGINGfile_name     = p_fileEXCEPTIONSmask_too_long = 1OTHERS        = 2.AT SELECTION-SCREEN OUTPUT.  " 指定在选择屏幕输出之前执行以下代码。LOOP AT SCREEN. "screen-active = 0.   0 隐藏,默认1 显示IF p1 <> 'X' AND screen-group1 = 'M1'.screen-active = 0.ENDIF.IF p2 <> 'X' AND screen-group1 = 'M2'.screen-active = 0.ENDIF.IF p3 <> 'X' AND screen-group1 = 'M3'.screen-active = 0.ENDIF.MODIFY SCREEN.ENDLOOP.START-OF-SELECTION.IF p1 = 'X'.PERFORM get_data.PERFORM alv_data.ENDIF.IF p2 = 'X'.PERFORM get_data1.PERFORM deal_data.ENDIF.IF p3 = 'X'.PERFORM excel_data.PERFORM add_data.ENDIF.*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA.SELECT *FROM zboxsizeINTO TABLE gt_itabWHERE zcode  IN s_zcode1AND zsize  IN s_zsize1.ENDFORM.                    "GET_DATA*&---------------------------------------------------------------------*
*&      Form  GET_DATA1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA1.SELECT *FROM zboxsizeINTO TABLE gt_itabWHERE zcode  IN s_zcode2AND zsize  IN s_zsize2.SELECT *FROM zboxsizeINTO TABLE gt_itab1WHERE zcode  IN s_zcode2AND zsize  IN s_zsize2.ENDFORM.                    "GET_DATA*&---------------------------------------------------------------------*
*&      Form  deal_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM deal_data.alv_clear_data.status = 'X'.        "保存按钮alv_add_data 'GT_ITAB' '' 'X' '' '' '' '' 'ZSIZE' '尺寸代码'.alv_add_data 'GT_ITAB' '' 'X' '' '' '' '' 'ZCODE' '代码'.FIELDCAT_LN-INTTYPE = 'C'.alv_add_data 'GT_ITAB' '' 'X' '' '' '' '' 'MENGE' '数量'.alv_add_data 'GT_ITAB' '' 'X' '' '' '' '' 'MEINS' '基本计量单位'.FIELDCAT_LN-INTTYPE = 'C'.alv_add_data 'GT_ITAB' '' 'X' '' '' '' '' 'ZBOXSIZE' '数量'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'CPUTM' '输入时间'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'AEDAT' '更改日期'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'USNAM' '用户名'.PERFORM get_leng TABLES  GT_ITAB i_fieldcat . "使ALV长度默认为其本身的字段alv_show_data   GT_ITAB.ENDFORM.                    "deal_data*&---------------------------------------------------------------------*
*&      Form  alv_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_data.
*三、ALV显示alv_clear_data.
*  status = 'X'.        "alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZSIZE' '尺寸代码'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZCODE' '代码'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'MENGE' '数量'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'MEINS' '基本计量单位'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZBOXSIZE' '数量'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'CPUTM' '输入时间'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'AEDAT' '更改日期'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'USNAM' '用户名'.PERFORM get_leng TABLES  GT_ITAB i_fieldcat . "使ALV长度默认为其本身的字段alv_show_data   GT_ITAB.
ENDFORM.                    "alv_data
*&---------------------------------------------------------------------*
*&      Form  ADD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ADD_DATA.alv_clear_data.status = 'X'. ""设置可编辑字段alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZSIZE' '尺寸代码'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZCODE' '代码'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'MENGE' '数量'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'MEINS' '基本计量单位'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'ZBOXSIZE' '数量'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'CPUTM' '输入时间'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'AEDAT' '更改日期'.alv_add_data 'GT_ITAB' '' '' '' '' '' '' 'USNAM' '用户名'.PERFORM get_leng TABLES gt_itab i_fieldcat.alv_show_data gt_itab.ENDFORM.                    "ADD_DATA
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'ZSAVE'.
ENDFORM.                    "set_pf_status
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command  USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = l_o_grid1.CALL METHOD l_o_grid1->check_changed_data.TYPES: BEGIN OF ty_extab,row_id TYPE i,END OF ty_extab.DATA: et_index_rows TYPE STANDARD TABLE OF ty_extab.CASE r_ucomm.WHEN '&ZPY'.IF sy-subrc = 0.
*        MESSAGE 'E:数据有误,请检查' TYPE 'S' DISPLAY LIKE 'E'.
*        EXIT.ENDIF.ztext1 = '是否确定保存数据'.
*      PERFORM do_message.PERFORM save_data .rs_selfield-refresh = 'X'.WHEN OTHERS.ENDCASE.
ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Form  sava_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM save_data.
*  LOOP AT gt_itab.
*    INSERT zboxsize FROM TABLE gt_itab.
*  ENDLOOP.
*  IF sy-subrc = 0.
*    MESSAGE '数据更新成功' TYPE 'S'.
*  ELSE.
*    MESSAGE '数据更新失败' TYPE 'S' DISPLAY LIKE 'E'.
*  ENDIF.IF p3 = 'X'.modify zboxsize FROM TABLE gt_itab.IF sy-subrc = 0.MESSAGE '数据更新成功' TYPE 'S'.ELSE.MESSAGE '数据更新失败' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.ENDIF.IF p2 = 'X'.LOOP AT GT_ITAB.loop at gt_itab1 WHERE zcode = gt_itab-zcode and zsize = gt_itab-zsize.if ( gt_itab1-MENGE <> gt_itab-MENGE ) or ( gt_itab1-MEINS <> gt_itab-MEINS ) or ( gt_itab1-ZBOXSIZE <> gt_itab-ZBOXSIZE ).gt_itab-usnam = sy-uname. "自动记录用户gt_itab-aedat = sy-datum. "自动记录日期gt_itab-cputm = sy-uzeit. "自动记录时间MODIFY gt_itab.else.CONTINUE.ENDIF.ENDLOOP.ENDLOOP.update zboxsize FROM TABLE gt_itab.IF sy-subrc = 0.MESSAGE '数据更新成功' TYPE 'S'.ELSE.MESSAGE '数据更新失败' TYPE 'S' DISPLAY LIKE 'E'.ENDIF.ENDIF.ENDFORM.                    "sava_data
*&---------------------------------------------------------------------*
*&      Form  save_data1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*FORM save_data1.
*
*  LOOP AT GT_ITAB.
*    loop at gt_itab1 WHERE zcode = gt_itab-zcode and zsize = gt_itab-zsize.
*      if ( gt_itab1-MENGE <> gt_itab-MENGE ) or ( gt_itab1-MEINS <> gt_itab-MEINS ) or ( gt_itab1-ZBOXSIZE <> gt_itab-ZBOXSIZE ).
*        gt_itab-usnam = sy-uname. "自动记录用户
*        gt_itab-aedat = sy-datum. "自动记录日期
*        gt_itab-cputm = sy-uzeit. "自动记录时间
*        MODIFY gt_itab.
*      else.
*        CONTINUE.
*      ENDIF.
*    ENDLOOP.
*  ENDLOOP.
* update zboxsize FROM TABLE gt_itab.
*
*  IF sy-subrc = 0.
*    MESSAGE '数据更新成功' TYPE 'S'.
*  ELSE.
*    MESSAGE '数据更新失败' TYPE 'S' DISPLAY LIKE 'E'.
*  ENDIF.
*
*ENDFORM.                    "sava_data*&---------------------------------------------------------------------*
*&      Form  excel_data
*&---------------------------------------------------------------------*
*       excel取数,读取excel导入的目标数据
*----------------------------------------------------------------------*
FORM excel_data.DATA: i_excel TYPE TABLE OF alsmex_tabline .DATA w_excel TYPE alsmex_tabline.DATA: zitem TYPE i.CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGfilename                = p_filei_begin_col             = '1'"从第一列开始读取i_begin_row             = '2'                         "从第1行开始读取i_end_col               = '5' "Excel的列数,一共读取八列i_end_row               = '9999'TABLESintern                  = i_excelEXCEPTIONSinconsistent_parameters = 1upload_ole              = 2OTHERS                  = 3.IF sy-subrc <> 0.MESSAGE e208(00) WITH 'EXCEL读取错误' RAISING error_msg.ENDIF.FIELD-SYMBOLS : <fs> .SORT i_excel BY row col .DATA num_col TYPE i .LOOP AT i_excel INTO w_excel.CASE w_excel-col.WHEN 1.gt_itab-ZSIZE = w_excel-value.WHEN 2.gt_itab-ZCODE = w_excel-value.WHEN 3.gt_itab-MENGE = w_excel-value.WHEN 4.gt_itab-MEINS = w_excel-value.WHEN 5.gt_itab-ZBOXSIZE = w_excel-value.WHEN OTHERS.ENDCASE.AT END OF row.gt_itab-usnam = sy-uname. "自动记录用户gt_itab-aedat = sy-datum. "自动记录日期gt_itab-cputm = sy-uzeit. "自动记录时间APPEND gt_itab.CLEAR:gt_itab.ENDAT .CLEAR w_excel.ENDLOOP.
ENDFORM.                    "excel_data

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词