使用类的方法将数据插入数据库



我试图创建一个方法来插入数据到数据库,但它不工作。我试图通过使用add_person插入数据。这是我的代码。透明表名称为ZPERSON_20

CLASS lcl_person DEFINITION.
  PUBLIC SECTION.
    METHODS:
      add_person
        IMPORTING 
          im_id   TYPE zperson_20-person_id
          im_name TYPE zperson_20-person_name
          im_add  TYPE zperson_20-person_address
          im_type TYPE zperson_20-person_type.
  PRIVATE SECTION.
    DATA:
     c_id   TYPE zperson_20-person_id,
     c_name TYPE zperson_20-person_name,
     c_add  TYPE zperson_20-person_address,
     c_type TYPE zperson_20-person_type.
ENDCLASS.
CLASS lcl_person IMPLEMENTATION.
  METHOD add_person.
    DATA: it_emp TYPE STANDARD TABLE OF zperson_20.
    DATA: wa_emp LIKE LINE OF it_emp.
    wa_emp-person_id   = c_id.
    wa_emp-person_name = c_name.
    wa_emp-person_add  = c_add.
    wa_emp-person_type = c_type.
    INSERT INTO zperson_20 VALUES wa_emp.
  ENDMETHOD.                
ENDCLASS.
PARAMETERS:
  v_id   TYPE zperson_20-person_id,
  v_name TYPE zperson_20-person_name,
  v_add  TYPE zperson_20-person_address,
  v_type TYPE zperson_20-person_type.
DATA: lv_ref_person TYPE REF TO lcl_person.
START-OF-SELECTION.
  CREATE OBJECT lv_ref_person.
  CALL METHOD lv_ref_person->add_person(
    im_id   = v_id
    im_name = v_name
    im_add  = v_add
    im_type = v_type
  ).

我会说您的问题是add_person方法内部,因为您正在读取成员变量的值,而不是方法参数。在这种情况下,这些成员变量可能是空的,从而导致由于id为空或重复而导致插入错误。

我相信你想要实现的代码如下:

REPORT ZRKD_BASE_WSLOADER.
CLASS lcl_person DEFINITION.
  PUBLIC SECTION.
    METHODS:
      add_person
        IMPORTING
          im_id   TYPE zperson_20-person_id
          im_name TYPE zperson_20-person_name
          im_add  TYPE zperson_20-person_address
          im_type TYPE zperson_20-person_type.
ENDCLASS.
CLASS lcl_person IMPLEMENTATION.
  METHOD add_person.    
    DATA: wa_emp TYPE zperson_20.
    //---->  Here are the modifications <-------
    wa_emp-person_id   = im_id.
    wa_emp-person_name = im_name.
    wa_emp-person_address  = im_add.
    wa_emp-person_type = im_type.
    INSERT INTO zperson_20 VALUES wa_emp.
  ENDMETHOD.
ENDCLASS.
PARAMETERS:
  v_id   TYPE zperson_20-person_id,
  v_name TYPE zperson_20-person_name,
  v_add  TYPE zperson_20-person_address,
  v_type TYPE zperson_20-person_type.
DATA: lv_ref_person TYPE REF TO lcl_person.
START-OF-SELECTION.
  CREATE OBJECT lv_ref_person.
  CALL METHOD lv_ref_person->add_person(
    im_id   = v_id
    im_name = v_name
    im_add  = v_add
    im_type = v_type
  ).

将足以创建一个提交方法,然后调用该方法,如果您确实确定要在db上保存,或者将此参数添加为添加人员的标志。如果设置了,则提交事务。这个操作的指令是"提交工作",它在整个代码片段中都没有。如果没有它,任何东西都不会从实际的LUW提交缓冲区移动到db.

你的方法add_person被定义为不接受参数,你正在传递参数给它。基本上在叫法和定义上存在分歧。

你能把整个代码贴在这里吗?

相关内容

  • 没有找到相关文章

最新更新