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

时间:2014-06-04 15:47:28

标签: database insert abap

我正在尝试创建一个将数据插入数据库的方法,但它不起作用。我正在尝试使用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
  ).

3 个答案:

答案 0 :(得分:1)

我会说你的问题在add_person方法中,因为你正在读取成员变量的值,而不是方法参数。在这种情况下,这些成员变量可能为空,导致由于空ID或重复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
  ).

答案 1 :(得分:0)

足以创建一个commit方法,然后调用它,如果你确实要保存在db上,或者将此参数添加为添加person的标志。如果设置,则提交事务。对此的指示是“提交工作”。它在整个片段中都缺失了。没有它没有任何东西从您的实际LUW提交缓冲区移动到db。

答案 2 :(得分:0)

你的方法add_person被定义为不带参数,你传递它的参数。基本上在电话和定义上存在分歧。

你能在这里发布整个代码吗?