Manual tabular form "Update Process"

Hello,
i made a tabular form manually,
now i want to add an update process, but its not working?
I created a Button "P_UPDATE" and i added a Process which listens to the P_UPDATE Button.
i used the following PL/SQL script:
for i in 1..htmldb_application.g_f01.count
loop
update MATCHUMSATZ
set PARTNER_ID = replace(htmldb_application.g_f10(i),'%'||'null%',NULL),
RECH_DATUM = replace(htmldb_application.g_f02(i),'%'||'null%',null),
RECH_NR= htmldb_application.g_f06(i),
PROV_GRUNDLAGE= htmldb_application.g_f08(i),
KUNDE= htmldb_application.g_f14(i),
VERTRIEBSART_ID = replace(htmldb_application.g_f17(i),'%'||'null%',NULL)
where id = htmldb_application.g_f01(i);
end loop;
This is an example which i customized from: http://www.oracle.com/technology/products/database/application_express/howtos/tabular_form.html
I suppose that 'htmldb_application.g_f01' is the ID of the table 'MATCHUMSATZ'.
Why is there replace() and sometimes not ?
Would be glad if anybody could help me!
Phil

Hi Phil,
You can add in the in-built MRU update process that will do this for you. When you add a process, select Data Manipulation then Multi Row Update, then follow the prompts to link it to your table.
In your code snippet, htmldb_application.g_f01 refers to the first column in your form (even if this is hidden). Normally this is the Primary Key for the table on which the form is based. htmldb_application.g_f02 refers to the second column and so on, although you can assign any number from 1 to 50 to each field when you create the sql statement.
The replace() function is used because some of the fields will contain %null% which needs to be converted to null before updating the table.
Regards
Andy

Similar Messages

  • Two Manual Tabular forms in a same page

    Since i have to create two tabular forms in a same page, i created tabular forms manually.
    Both the forms are working fine if the columns are not defined as conditional display.
    Based on item value set by user, few fields should be either displayed as text field (editable) or read only (display).
    I created two columns for a same field one as editable another one as non editable.
    Based on item value any one of the column will be displayed.
    Since the manual tabular form update process is using 'apex_application.g_f02', if any one of the column is not visible,
    multiple row update is failing.
    can any one please help me or suggest me to solve this.
    Edited by: Ravi on Apr 19, 2012 9:02 AM

    I'm guessing you have a page item that is used to control display of the columns as display only or editable.
    If that's true and the page item tells you to display the editable column, then you end up with say a g_f02 and a g_fo3, where you otherwise might only have a g_fo2.
    Use the value of the page item in your update process to control which tabular form element to use.

  • Can't get Delete Process to work on Manual Tabular Form

    Help. My insert and update process works just fine. I can't get the delete process to work. I've searched the forum and found a couple of examples on what to do, but I can't get the examples to work. I get an ORA-01403: no data found error.
    Report SQL:
    select apex_item.checkbox (1, ceah_people_lang_id,'unchecked') delete_checkbox,
    --'onclick="highlight_row(this,' || ROWNUM || ')"',
    --null,
    --'F1_' || LPAD (ROWNUM, 4, '0')) delete_checkbox,
    Delete Process:
    declare
    begin
    for i in 1..apex_application.g_f02.count
    loop
    --if apex_application.g_f01(i) = 'Y'
    --then
    delete from ceah_people_language
    where ceah_people_lang_id = to_number(apex_application.g_f01(i));
    --end if;
    end loop;
    end;
    I've spent more time than I care to admit on the manual tabular form. Any help would be appreciated. Thanks, Elizabeth

    select apex_item.checkbox (1, ceah_people_lang_id,'unchecked') delete_checkbox,
    --'onclick="highlight_row(this,' || ROWNUM || ')"',
    --null,
    --'F1_' || LPAD (ROWNUM, 4, '0')) delete_checkbox,
    apex_item.hidden(2,ceah_people_lang_id)
    ||
    apex_item.select_list_from_query(3,language_id,'select language_name, language_id from foreign_language') language_id,
    apex_item.hidden(4,ceah_people_id) ||
    apex_item.select_list_from_query(5,proficiency,'select name, id from proficiency') proficiency
    from ceah_people_language where ceah_people_language.ceah_people_id = :P152_person_id
    union all
    select apex_item.checkbox
    (1,
    null,
    'onclick="highlight_row(this,' || ROWNUM || ')"',
    null,
    'F1_' || LPAD (ROWNUM, 4, '0')) delete_checkbox,
    apex_item.hidden(2,null) ||
    apex_item.select_list_from_query(3,null,'select language_name, language_id from foreign_language',
    'style="width:170px" ' ,
    'YES',
    '0',
    '- Select Foreign Language -',
    'f3_' || LPAD (9900 + ROWNUM, 4, '0'),
    NULL,
    'NO'
    ) language_id,
    apex_item.hidden(4,null) ||
    apex_item.select_list_from_query(5,null,'select name, id from proficiency',
    'style="width:170px" ' ,
    'YES',
    '0',
    '- Select Proficiency -',
    'f5_' || LPAD (9900 + ROWNUM, 4, '0'),
    NULL,
    'NO'
    ) proficiency
    from dual where :request = 'ADD_ROWS'
    connect by level <= 2

  • How to Multi Row Update function in Manual Tabular Form

    Hi All,
    In my application I am using manual tabular form, for Update and insert i have written pl/sql process,
    but i want to make use of MULTI_ROW_UPDATE function for update and insert operations.
    How can I implement default tabular form behaviour in manual tabular form.
    I am using:
    Oracle Database 11g
    ApEx Version 4.0
    please help me, it's urgent.
    thanks
    MR

    Hi Joao,
    First Can u pl let us know your view is based on how many
    tables?
    If it is a simple view ,you can open the form in update mode
    passing a parameter to it thru a procedure or thru a url or what
    ever you feel like(form to form,etc)..I will give you an example
    on how to open the form in update mode like below..
    1.develop a form based on a simple view
    2.Call that form Thru a simple URL
    3.In the above you are opening a form with module id
    ex:1234567890 in update mode and change portal30 to suit
    accordingly..
    4.You are passing a parameter called "ABCDEF" TO "NAME" Field to
    that form for querrying..
    5.Now the form will be opened in update mode and all the fields
    are pertaining to the parameter "ABCDEF" and you can update the
    fields....
    II..Now regarding the check boxes i need to know which version
    of the portal are u using..As for as my knowledge goes (up to
    3.0.6) there are lot of bugs with the check boxes and check box
    checked value is always "yes"(if u want to insert in to the data
    base).So try not to depend on checkboxes and instead Combo is
    the right answer till oracle portal is free of bugs.
    No triggers are required for your requirement....
    Hope i have answered your problem ...If any please revert back
    with full details
    Thanks
    Vishnu Singireddy

  • How to update Manual Tabular Form

    Hi There,
    I have a manual tabular form on an apex 4.1 page and I would like to update the records when I click on a submit button.
    Below is the query of the form:
    SELECT '#ROWNUM#' sno,
    apex_item.checkbox(01, wo_line_id) del,
    apex_item.hidden(02,wo_line_id)||apex_item.hidden(03,wwv_flow_item.md5(adjusted_amount)) wo_line_id,
    apex_item.text(17, adjusted_amount, 10, 10,'onchange="set_innerHTML(this);"','f17_' ||'#ROWNUM#') adjusted_amount
    from work_order_lines
    where wo_header_id = :P302_WO_HEADER_ID;
    Below is the code in the "After Submit" process
    DECLARE
    v_header_result VARCHAR2(1);
    v_line_result VARCHAR2(1);
    v_error_count NUMBER:= 0;
    BEGIN
    FOR i in 1..apex_application.g_f02.COUNT
    LOOP
    BEGIN
    update_wo_lines_prc(:APP_USER
    ,:P302_WO_HEADER_ID
    ,APEX_APPLICATION.G_F02(i)
    ,APEX_APPLICATION.G_F17(i)
    ,v_line_result);
    END;
    END LOOP;
    COMMIT;
    END;
    Somehow the LOOP doesn't get executed.
    Please advise.
    Thanks
    Yogi

    Hi,
    I found the reason for this.
    For the column wo_line_id the show option in the report attributes was not checked.
    Thats why apex_application.g_f02.count is returning 0 and the loop was never executed.
    Thanks
    Yogi

  • Tabular form update manual

    Dears ,
    i have manual tabular form
    select htmldb_item.checkbox(1,rownum) " ",
           x.service_id,
           x.service_name,
    htmldb_item.checkbox( 4, flag,decode( flag, 1, 1, 0) ) flag
    from (
    select htmldb_item.hidden(2,c.service_id) service_id,
              htmldb_item.text(3,s.service_name)  service_name,
               htmldb_item.checkbox( 4, flag,decode( flag, 1, 1, 0) ) flag
    from  CUST_SERVICES c,SERVICES s
    where c.service_id=s.service_id
    and  c.cust_id=:p6_customer_id) x
    order by 2and make process to save
    Type:     PL/SQL anonymous block
    Process Point : on submit - after computation and validation
    Run Process : once per page visit (defult)
    source code :
    for i in 1..htmldb_application.g_f01.count
    loop
    update CUST_SERVICES set flag = htmldb_application.g_f04(htmldb_application.g_f01(i));
    -- where CUST_ID=:p6_customer_id
    -- and  SERVICE_ID =htmldb_application.g_f02(htmldb_application.g_f01(i));
    end loop;put it's not save , please help

    Hi Phil,
    You can add in the in-built MRU update process that will do this for you. When you add a process, select Data Manipulation then Multi Row Update, then follow the prompts to link it to your table.
    In your code snippet, htmldb_application.g_f01 refers to the first column in your form (even if this is hidden). Normally this is the Primary Key for the table on which the form is based. htmldb_application.g_f02 refers to the second column and so on, although you can assign any number from 1 to 50 to each field when you create the sql statement.
    The replace() function is used because some of the fields will contain %null% which needs to be converted to null before updating the table.
    Regards
    Andy

  • Issue with APEX_ITEM.CHECKBOX in Manual Tabular Form report

    Hi,
    I have a simple manual tabular form report with query :
    SELECT
    APEX_ITEM.CHECKBOX(1,order_id) ,
    APEX_ITEM.TEXT(3,Ord_number) ,
    APEX_ITEM.TEXT(4,ord_flag)
    from
    tbl_order
    and a process to update the value of Ord_number & ord_flag columns for the selected (Checked) rows.
    FOR i in 1..apex_application.g_f01.count
    loop
    UPDATE
    tbl_order
    SET
    Ord_number = apex_application.g_f03(i),
    ord_flag = apex_application.g_f04(i)
    WHERE
    order_id = apex_application.g_f01(i);
    END LOOP;
    But the values getting updated wrongly , how can I ensure the exact values is retrieved in apex_application.g_f03(i) & apex_application.g_f04(i) ?
    Regards.
    Benz

    I think the row selector is there if you create an tabular form. However, you can create it yourself following this example:
    http://apex.oracle.com/pls/otn/f?p=31517:170
    Basically,
    apex_item.checkbox (30,
                               '#ROWNUM#',
                               'onclick="highlight_row(this,' || ROWNUM || ')"',
                               NULL,
                               'f30_' || LPAD (ROWNUM, 4, '0')
                              ) delete_checkboxDenes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.opal-consulting.de/training
    http://apex.oracle.com/pls/otn/f?p=31517:1
    http://www.amazon.de/Oracle-APEX-XE-Praxis/dp/3826655494
    -------------------------------------------------------------------

  • Manual Tabular form

    Hi everyone,
    I have created a maual tabular form with the help of (HOW TO) document in OTN.For that I wrote maual update and manual delete process and evething is working fine.But in the manual update process i did not include the code to compare the checksum of the submitted data with the old data (still its working fine).But in my application i have created several manual tabular forms like this .Do the application get any problem in the futher as i am not checking the checksum.If i compare the checksum i am getting error.I decoded that error by
    inserting the checksum values to a (test table).The checksum values for a row is changing even if there is no change in the data of the table.
    any suggestions please
    Here is my code
    declare
    l_cks wwv_flow_global.vc_arr2;
    j pls_integer := 1;
    begin
    -- Get original MD5 checksum
    -- select wwv_flow_item.md5( column1,column2,column3,column4) cks
    -- BULK COLLECT INTO
    --l_cks
    -- from table;
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    -- for i in 1..l_cks.count
    --loop
    --if htmldb_application.g_fcs(i) != l_cks(i) then
    -- rollback;
    --raise_application_error(
    -- -20001,
    -- 'Current version of data in database has changed '||
    -- 'since user initiated update process.');
    -- return;
    --end if;
    --end loop;
    -- update EMP
    for i in 1..htmldb_application.g_f07.count
    loop
    if htmldb_application.g_f07(i) is not null then
    update table
    set
    column2 = replace(htmldb_application.g_f08(i),'%'||'null%',NULL)
    where column1 = htmldb_application.g_f07(i);
    else
    if htmldb_application.g_f08(i) is not null then
    insert into table
    ( column1 ,
    column2,
    column3)
    values
    replace(htmldb_application.g_f08(i),'%'||'null%',NULL));
    end if;
    end if;
    end loop;
    end;
    Thanks
    phani

    Phani,
    I don't understand what you have working, what does not work, and what that code does (much of it is commented out). Can you put an example on apex.oracle.com that shows the problem?
    Scott

  • Checksum error in Manual Tabular Form

    Hi everyone,
    I have created 2 (manual tabular forms) on a same page but i am getting checksum error for one of the tabular form.
    Here is my code:
    1 st Tabular Form:
    select
    x.del,
    x.ECGEXST_ID,
    x.LEAD_CD,
    x.ST_ID,
    x.ENTERED_DTS,
    X.ENTERED_BY_NM,
    X.UPDATED_DTS,
    X.UPDATED_BY_NM,
    x.cks
    from (
    select
    htmldb_item.checkbox(1,ECGEXST_ID) del,
    htmldb_item.hidden(2,ECGEXST_ID) ECGEXST_ID,
    htmldb_item.select_list_from_query (3, LEAD_CD,'select lead_cd , lead_cd from lslead order by display_seq ',15) LEAD_CD,
    htmldb_item.select_list_from_query(5,ST_ID,'select lkup_dsc,lkup_id from lkup where lkup_grp_id = 17',25) ST_ID,
    wwv_flow_item.display_and_save(6,to_char(ENTERED_DTS,'MM/DD/YYYY')) ENTERED_DTS,
    au.LAST_NM || ', ' || au.FIRST_NM ENTERED_BY_NM,
    wwv_flow_item.display_and_save(7,to_char(UPDATED_DTS,'MM/DD/YYYY')) UPDATED_DTS,
    au1.LAST_NM || ', ' || au1.FIRST_NM UPDATED_BY_NM,
    htmldb_item.md5_checksum(ECGEXDT_ID,LEAD_CD,ST_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    from ECGEXST,
    app_user au,app_user au1 where au.MSPR_ID(+) = ECGEXST.ENTERED_BY_MSPR_ID and au1.MSPR_ID(+) = ECGEXST.UPDATED_BY_MSPR_ID
    and ECGEXDT_ID = :P65_ECGEXDT_ID
    union all
    select
    htmldb_item.checkbox(1,null) del,
    htmldb_item.hidden(2,null) ECGEXST_ID,
    htmldb_item.select_list_from_query (3,null,'select lead_cd , lead_cd from lslead order by display_seq ',15) LEAD_CD,
    htmldb_item.select_list_from_query(5,null,'select lkup_dsc,lkup_id from lkup where lkup_grp_id = 17',25) ST_ID,
    wwv_flow_item.display_and_save(6,null) ENTERED_DTS,
    null ENTERED_BY_NM,
    wwv_flow_item.display_and_save(7,null) UPDATED_DTS,
    null UPDATED_BY_NM,
    htmldb_item.md5_checksum(null,null,null,null,null) cks
    from dual) x
    UPDATE PROCESS:
    declare
    l_cks wwv_flow_global.vc_arr2;
    j pls_integer := 1;
    val1 varchar2(100);
    val2 varchar2(100);
    begin
    -- Get original MD5 checksum
    select wwv_flow_item.md5(ECGEXDT_ID,LEAD_CD,ST_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    BULK COLLECT INTO
    l_cks
    from ECGEXST where ECGEXDT_ID = :P65_ECGEXDT_ID;
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    for i in 1..l_cks.count
    loop
    if htmldb_application.g_fcs(i) != l_cks(i) then
    rollback;
    raise_application_error(
              -20001,
         'Current version of data in database has changed '||
              'since user initiated update process.');
    -- return;
    end if;
    end loop;
    -- update ECGRSTST
    for i in 1..htmldb_application.g_f02.count
    loop
    if htmldb_application.g_f02(i) is not null then
    update ECGEXST
    set
    ECGEXDT_ID = :P65_ECGEXDT_ID,
    LEAD_CD = replace(htmldb_application.g_f03(i),'%'||'null%',NULL),
    ST_ID = replace(htmldb_application.g_f05(i),'%'||'null%',NULL)
    where ECGEXST_ID = htmldb_application.g_f02(i);
    else
    if htmldb_application.g_f03(i) is not null then
    insert into ECGEXST
    (ECGEXST_ID ,
    ECGEXDT_ID,
    LEAD_CD,
    ST_ID)
    values
    (ECGEXST_SEQ.nextval,
    :P65_ECGEXDT_ID,
    replace(htmldb_application.g_f03(i),'%'||'null%',NULL),
    replace(htmldb_application.g_f05(i),'%'||'null%',NULL));
    end if;
    end if;
    end loop;
    end;
    The first tabular form is working fine.But for the second tabular form i am getting the checksum error.I have created a test table and checked the checksum values.The checksum values are changing.
    Here is the code of my 2nd tabularform:
    select
    x.del,
    x.ECGEXT_ID,
    x.LEAD_CD,
    x.T_ID,
    x.ENTERED_DTS,
    X.ENTERED_BY_NM,
    X.UPDATED_DTS,
    X.UPDATED_BY_NM,
    x.cks
    from (
    select
    htmldb_item.checkbox(11,ECGEXT_ID) del,
    htmldb_item.hidden(12,ECGEXT_ID) ECGEXT_ID,
    htmldb_item.select_list_from_query (13, LEAD_CD,'select lead_cd , lead_cd from lslead order by display_seq ',15) LEAD_CD,
    htmldb_item.select_list_from_query(15,T_ID,'select lkup_dsc,lkup_id from lkup where lkup_grp_id = 18',25) T_ID,
    wwv_flow_item.display_and_save(16,to_char(ENTERED_DTS,'MM/DD/YYYY')) ENTERED_DTS,
    au.LAST_NM || ', ' || au.FIRST_NM ENTERED_BY_NM,
    wwv_flow_item.display_and_save(17,to_char(UPDATED_DTS,'MM/DD/YYYY')) UPDATED_DTS,
    au1.LAST_NM || ', ' || au1.FIRST_NM UPDATED_BY_NM,
    htmldb_item.md5_checksum(ECGEXDT_ID,LEAD_CD,T_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    from ECGEXT,
    app_user au,app_user au1 where au.MSPR_ID(+) = ECGEXT.ENTERED_BY_MSPR_ID and au1.MSPR_ID(+) = ECGEXT.UPDATED_BY_MSPR_ID
    and ECGEXDT_ID = :P65_ECGEXDT_ID
    union all
    select
    htmldb_item.checkbox(11,null) del,
    htmldb_item.hidden(12,null) ECGEXT_ID,
    htmldb_item.select_list_from_query (13,null,'select lead_cd , lead_cd from lslead order by display_seq ',15) LEAD_CD,
    htmldb_item.select_list_from_query(15,null,'select lkup_dsc,lkup_id from lkup where lkup_grp_id = 18',25) T_ID,
    wwv_flow_item.display_and_save(16,null) ENTERED_DTS,
    null ENTERED_BY_NM,
    wwv_flow_item.display_and_save(17,null) UPDATED_DTS,
    null UPDATED_BY_NM,
    htmldb_item.md5_checksum(null,null,null,null,null) cks
    from dual) x
    UPDATE PROCESS:
    declare
    l_cks wwv_flow_global.vc_arr2;
    j pls_integer := 1;
    val1 varchar2(100);
    val2 varchar2(100);
    begin
    -- Get original MD5 checksum
    select wwv_flow_item.md5(ECGEXDT_ID,LEAD_CD,T_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    BULK COLLECT INTO l_cks
    from ECGEXT where ECGEXDT_ID = :P65_ECGEXDT_ID;
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    for i in 1..l_cks.count
    loop
    if htmldb_application.g_fcs(i) != l_cks(i) then
    -- val1 := htmldb_application.g_fcs(i);
    -- val2 := l_cks(i);
    -- insert into test2 (val_1,val_2) values (val1,val2);
    rollback;
    raise_application_error(
         -20001,
         'Current version of data in database has changed '||
         'since user initiated update process.');
    return;
    end if;
    end loop;
    -- update ECGRSTST
    for i in 1..htmldb_application.g_f12.count
    loop
    if htmldb_application.g_f12(i) is not null then
    update ECGEXT
    set
    ECGEXDT_ID = :P65_ECGEXDT_ID,
    LEAD_CD = replace(htmldb_application.g_f13(i),'%'||'null%',NULL),
    T_ID = replace(htmldb_application.g_f15(i),'%'||'null%',NULL)
    where ECGEXT_ID = htmldb_application.g_f12(i);
    else
    if htmldb_application.g_f13(i) is not null then
    insert into ECGEXT
    (ECGEXT_ID ,
    ECGEXDT_ID,
    LEAD_CD,
    T_ID)
    values
    (ECGEXT_SEQ.nextval,
    :P65_ECGEXDT_ID,
    replace(htmldb_application.g_f13(i),'%'||'null%',NULL),
    replace(htmldb_application.g_f15(i),'%'||'null%',NULL));
    end if;
    end if;
    end loop;
    end;
    please help me in solving this.The same code its good for one tabular form and for the other it giving the checksum error.
    Thanks in advance
    phani

    Hi patrick,
    Thanks for the reply i am getting the checksum error even if i used my primary key in the select statement of the MD5 checksum.
    My primary key in the second tabular form is
    htmldb_item.hidden(12,ECGEXT_ID) ECGEXT_ID
    so i changed the process to:
    for i in 1..htmldb_application.g_f12.count
    loop
    if htmldb_application.g_f12(i) is not null
    then
    select wwv_flow_item.md5(ECGEXDT_ID,LEAD_CD,T_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    BULK COLLECT INTO l_cks
    from ECGEXT where ECGEXT_ID = htmldb_application.g_f12(i);
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    if htmldb_application.g_fcs(i) != l_cks(i) then
    -- val1 := htmldb_application.g_fcs(i);
    -- val2 := l_cks(i);
    -- insert into test2 (val_1,val_2) values (val1,val2);
    rollback;
    raise_application_error(
         -20001,
         'Current version of data in database has changed '||
         'since user initiated update process.');
    end if;
    end if;
    end loop;
    It's not possible to use BULK COLLECT to get the MD5 checksum of all >>>rows. Because the index positions in the MD5 array and the >>>apex_application.g_fxx array index will probably not match, especially if you >>>don't order or if you are on a second page.How come the first tabular form is running i used the bulk collect in the first tabular form
    HERE IS THE CODE FOR THE FIRST TABULAR FORM:
    -- Get original MD5 checksum
    select wwv_flow_item.md5(ECGEXDT_ID,LEAD_CD,ST_ID,ENTERED_DTS,ENTERED_BY_MSPR_ID) cks
    BULK COLLECT INTO
    l_cks
    from ECGEXST where ECGEXDT_ID = :P65_ECGEXDT_ID;
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    for i in 1..l_cks.count
    loop
    if htmldb_application.g_fcs(i) != l_cks(i) then
    rollback;
    raise_application_error(
              -20001,
         'Current version of data in database has changed '||
         'since user initiated update process.');
    -- return;
    end if;
    end loop;

  • Delete Functionality in manual tabular form

    Hi everyone,
    I have created 2 tabular forms on the same page.everthing is working fine.Both the tabular form are able to insert and update.I am getting problem to implement the DELETE functionality in those tabular form.
    I inserted this code htmldb_item.checkbox(6, id) del in the region and i created a delete process.But i am getting (no data found) error.
    could anyone help me in solving this.
    thanks
    phani
    ===========================================================
    DELETE PROCESS:
    FOR i in 1..HTMLDB_APPLICATION.G_F01.count
    LOOP
    DELETE FROM (TABLE NAME)
    WHERE id = HTMLDB_APPLICATION.G_F06(i);
    END LOOP;
    =============================================================
    TABULAR FORM 1:
    REGION:
    select x.column1,
    x.column2,
    x.column3,
    x.column4,
    x.column5,
    x.del,
    x.cks
    from (
    select htmldb_item.hidden(1,column1) column1,
    htmldb_item.text(2,column2,10) column2,
    htmldb_item.text(3,column3,10) column3,
    htmldb_item.text(4,column4,10) column4,
    wwv_flow_item.date_popup(5,null,column5) column5,
    htmldb_item.checkbox(6,column1) del,
    htmldb_item.md5_checksum(column2,column3,column4,column5) cks
    from TABLENAME
    union all
    select htmldb_item.hidden(1,null) column1,
    htmldb_item.text(2,null,10) column2,
    htmldb_item.text(3,null,10) column3,
    htmldb_item.text(4,null,10) column4,
    wwv_flow_item.date_popup(5,null,null) column5,
    htmldb_item.checkbox(6,null) del,
    htmldb_item.md5_checksum(null,null,null,null) cks
    from dual) x
    ==================================================================
    PROCESS:
    declare
    l_cks wwv_flow_global.vc_arr2;
    j pls_integer := 1;
    begin
    -- Get original MD5 checksum
    select wwv_flow_item.md5(column2,column3,column4,column5) cks
    BULK COLLECT INTO
    l_cks
    from TABLE;
    -- Compare the original checksum, l_cks,
    -- with submitted checksum, htmldb_application.g_fcs.
    -- If they are different, raise an error.
    -- for i in 1..l_cks.count
    -- loop
    -- if htmldb_application.g_fcs(i) != l_cks(i) then
    -- rollback;
    -- raise_application_error(
    -- -20001,
    -- 'Current version of data in database has changed '||
    -- 'since user initiated update --process.');                      
    --return;
    -- end if;
    -- end loop;
    -- update
    for i in 1..htmldb_application.g_f01.count
    loop
    if htmldb_application.g_f01(i) is not null then
    update TABLENAME
    set column2= htmldb_application.g_f02(i),
    column3 = htmldb_application.g_f03(i),
    column4 = htmldb_application.g_f04(i),
    column5 = htmldb_application.g_f05(i)
    where column1 = htmldb_application.g_f01(i);
    else
    if htmldb_application.g_f03(i) is not null then
    insert into TABLE
    (column2,
    column3,
    column4,
    column5
    values
    (htmldb_application.g_f02(i),
    htmldb_application.g_f03(i),
    htmldb_application.g_f04(i),
    htmldb_application.g_f05(i));
    end if;
    end if;
    end loop;
    end;
    I created the other tabular form on the same page with
    htmldb_application.g_f11(i)
    htmldb_application.g_f12(i)
    htmldb_application.g_f13(i)
    htmldb_application.g_f14(i)
    used the same code.

    Have you got any response on this? I would like to know how to do it too. I am trying to implement a manual tabular form on a page and need this functionality.
    I do know one thing. After attending the ODTUG conference last week, Raj said something about you have to process check boxes and radio groups separately from the rest of the form.
    Thanks,
    Michelle

  • Manually tabular form question

    hi all
    i built a manually tabular form.
    i want that this tabular for will used only to update , and without the option of insert new row .
    two questions i have here according to the document :
    there is something called
    Adding Optimistic Lockingoptimistic locking
    is that possible to do it if it's only an update form?
    i've tried to do it and not really succeeded.
    second question is about collection
    again is this possible to do it if i built only an update form ?
    thanks for quick response

    Hi Naama,
    >> i've created the package , it's show like it done but then i cannot see it.what seems to be the problem ?
    I have no idea, but this is definitely something local in your database. Just drop the package and re-create it. If the Object Browser doesn’t show you the package, try to use SQL*Plus.
    >> what is the meaning of this package?
    is this package active only in the tabular manually form ?.
    This is a regular PL/SQL package, and with the proper privileges, can be used anywhere on the database, with or without APEX connection.
    This package is “special” because it’s includes all you need to manage Optimistic Locking, which is characteristic to Web based applications. Other than that, you can use it whenever you need to manipulate the related table(s).
    >> the apex know in which part to relate in the package right ?
    APEX don’t know anything. When you are building a manual tabular form, it is also your responsibility to construct the proper DML processes. If you want your tabular form to support insert/update/delete you’ll need to construct three processes, each with the proper DML statement, each condition by the proper button. In your private case, as you need to support update only, you’ll need to build only one DML process (PL/SQL anonymous block), which will call the proper update procedure from the package.
    >> thank you
    Naama
    Wow! You signed your name correctly :) You should amend your handle to reflect that.
    Best Regards,
    Arie.

  • Manual Tabular Form Problem

    Apex 3.2
    I have written a manual tabular form and it has a validation to check if a column contains negative numbers.
    If it does then it returns a validation error.
    I also have the same validation in my database procedure which raises
    RAISE_APPLICATION_ERROR(-20000, 'The update procedure does not accept negative numbers.');My problem is withmy page validation.
    If the column value was 16 and the user types in, eg, -12, then the validation fires and returns the message.
    The problem is that once the message is returned, the column value is reset to the original value, eg, 16.
    If I disable my page validation and use my database exception.
    Then the error message from the database displays. If I click ok, then the form displays the new value, eg, -12.
    I want to use my page validation, but I need the page to show the new value.
    I have made all my processes and branches conditional to run only if there are no inline validations displayed,
    but this did not affect anything.
    Any help appreciated
    Gus

    Gus C wrote:
    It works exactly how I want mine to, without using collections, ie, it keeps the new values in the page.
    Unfortunatley I cannot figure out how he does thatUpgraded to 4.2 ;)
    One of the differences between version 3 and 4 is that retaintion/caching of the changed values in tabular forms.
    In other words in apex 4 the builder takes care of showing the new changed value.
    By not fetching the data from the database on a validation error.
    Where as in Apex 3 you have to do that when there is a validation error and the message is shown on the same page.
    The report fetches the data from the database even when there is a validation error.
    There are 2 options
    1) Let the validation message be shown on the error page. Going back in the browser history doesn't fetch the data form the database up on rerendering.
    This option is mentioned in the thread the demo was inspired by.
    2) Work with a collection. Where you take care of the caching. This method gives the posibility to so multiple validation messages where as the "show on error page" shows only one validation message.
    Nicolette

  • Manual tabular form (Multiple Tabular forms)

    Hi,
    I am using APEX v4.0.
    In my application, I am having a few issues with the generation of a manual tabular form. I need two tabular form on the page so I have created the first using a wizard and the second through the use of a collection using skillbuilders tutorial at http://www.skillbuilders.com/webinars/webinar.cfm/49?title=Manual%20Tabular%20Forms%20in%20Oracle%20APEX:%20A%20Methodology%20that%20Works
    Independently, they work as expected i.e. if I have a condition on the 1st tabular form to never display and only display the 2nd, it works fine and vice versa. However, if I try to try to display them both, I am getting errors.
    When both forms are displayed and I make a change to the form generated by the wizard, I am getting the error 'ORA-01403: no data found'.
    When both forms are displayed and I make a change to the form I generated manually, I am getting the error 'ORA-01722: invalid number'.
    Can someone please suggest where I should be looking as independently they are working fine, but when they are both on the page together, they are not.
    Thanks

    Hi Nicollette,
    I have got a bit further with it now thanks. The wizard form is now working when BOTH forms are displayed. I am still having a few issues with the manual one. When I try to insert a record I am getting:
    ORA-01410: invalid ROWID
         Error      
    It is now letting me delete and update though.
    I have the following as a before submit process:
    DECLARE
       l_collection_name APEX_COLLECTIONS.COLLECTION_NAME%TYPE;
       l_original_md5    VARCHAR2(32);
       l_latest_md5      VARCHAR2(32);
    BEGIN
       l_collection_name := 'QC_COMPLAINT_MODELS';
       FOR x IN 1 .. apex_application.g_f49.count
       LOOP        
          IF apex_application.g_f10(x) IS NOT NULL --ID exists, check to see if record was updated
          THEN
             SELECT c048
             INTO l_original_md5
             FROM apex_collections
             WHERE collection_name = l_collection_name
                AND seq_id = apex_application.g_f49(x);
             l_latest_md5 := wwv_flow_item.md5(
                apex_application.g_f10(x),
                apex_application.g_f11(x),
                apex_application.g_f12(x),
                apex_application.g_f13(x),
                apex_application.g_f14(x)
             IF l_original_md5 != l_latest_md5
             THEN
                apex_collection.update_member(
                   p_collection_name => l_collection_name,
                   p_seq             => apex_application.g_f49(x),
                   p_c010            => apex_application.g_f10(x),
                   p_c011            => apex_application.g_f11(x),
                   p_c012            => apex_application.g_f12(x),
                   p_c013            => apex_application.g_f13(x),
                   p_c014            => apex_application.g_f14(x),
                   p_c047            => 'U',
                   p_c048            => apex_application.g_f48(x)
             END IF;
          ELSE --ID does not exist, must be new record
             apex_collection.update_member(
                p_collection_name => l_collection_name,
                p_seq             => apex_application.g_f49(x),
                p_c010            => apex_application.g_f10(x),
                   p_c011            => apex_application.g_f11(x),
                   p_c012            => apex_application.g_f12(x),
                   p_c013            => apex_application.g_f13(x),
                   p_c014            => apex_application.g_f14(x),
                   p_c047            => 'U',
                   p_c048            => apex_application.g_f48(x)
          END IF;
       END LOOP;
       IF :REQUEST = 'DELETE_MOD'
       THEN
          FOR x IN 1 .. apex_application.g_f50.count
          LOOP
             apex_collection.update_member_attribute(
                p_collection_name => l_collection_name,
                p_seq             => apex_application.g_f50(x),
                p_attr_number     => '47',
                p_attr_value      => 'D'
          END LOOP;
       END IF;
    END;and this as an after submit process:
    DECLARE
       l_table_md5       VARCHAR2(32);
       l_collection_name APEX_COLLECTIONS.COLLECTION_NAME%TYPE;
       l_del_count       PLS_INTEGER := 0;
       l_upd_count       PLS_INTEGER := 0;
       l_ins_count       PLS_INTEGER := 0;
       l_success_message VARCHAR2(32767);
       CURSOR op_lock_check_cur (
          p_id IN NUMBER
       IS
          SELECT wwv_flow_item.md5(cm_id, serial_number, fd_number, complaint_id, model_name)
          FROM XXMEL_QC_COMPLAINTS_MODELS
          WHERE cm_id = op_lock_check_cur.p_id
          FOR UPDATE;
    BEGIN
       l_collection_name := 'QC_COMPLAINT_MODELS';
       FOR x IN (
          SELECT *
          FROM apex_collections
          WHERE collection_name = l_collection_name
             AND c047 IN ('N','U','D')
       LOOP
          IF x.c047 = 'N'
          THEN
             INSERT INTO XXMEL_QC_COMPLAINTS_MODELS(
                cm_id,
                serial_number,           
                fd_number,
                complaint_id,
                model_name
             ) VALUES (
                XXMEL_QC_COMPLAINTS_MODELS_S.nextval,
                x.c011,
                x.c012,
                x.c013,
                x.c014
             l_ins_count := l_ins_count + 1;
          ELSIF x.c047 = 'U'
          THEN
             --Optimistic lock check
             --MD5 should be identical to collection initialization proc
             OPEN op_lock_check_cur(x.c010);
             FETCH op_lock_check_cur INTO l_table_md5;
             -- Compare the checksum values and if they are different, raise an error.
             IF l_table_md5 != x.c048
             THEN
                raise_application_error(
                   -20001,
                   'Current version of data in database has changed '
                   || 'since user initiated update process.'
             END IF;
             UPDATE XXMEL_QC_COMPLAINTS_MODELS
             SET serial_number = x.c011,
                fd_number = x.c012,
                complaint_id = x.c013,
                model_name = x.c014
             WHERE CURRENT OF op_lock_check_cur;
             CLOSE op_lock_check_cur;
             l_upd_count := l_upd_count + 1;
          ELSIF x.c047 = 'D'
          THEN
             DELETE FROM XXMEL_QC_COMPLAINTS_MODELS
             WHERE cm_id = x.c010;
             l_del_count := l_del_count + 1;
          END IF;
       END LOOP;
       apex_collection.delete_collection(p_collection_name => l_collection_name);
       l_success_message := 
          l_ins_count || ' rows inserted, ' ||
          l_upd_count || ' rows updated, ' ||
          l_del_count || ' rows deleted';
       :P8_SUCCESS_MESSAGES := l_success_message;
    END;Thanks
    Edited by: Cashy on 17-Oct-2012 02:12

  • Manual Tabular Form using checksum

    I have a manual tabular form which updates OK but when I add the htmldb_item.mds_checksum it does not always work. It does not pass the MD5 checksum test in the update process. Sometimes it works some times it does not. No one else is updating this data so it should pass the checksum error.
    I need a manual tabular form so I can to retrieve this same data in a collection if the page is submitted for a cascading dropdown in another region. That is correct?
    Of course, I could do the cascading dropdown another way instead of select list on submit. This is puzzling me.
    Here is the sql query:
    select htmldb_item.hidden(1,sub_id) sub_id,
    htmldb_item.display_and_save(2,column_id) column_id,
    htmldb_item.display_and_save(3,column_name) column_name,
    htmldb_item.display_and_save(4,primary_key) primary_key,
    htmldb_item.display_and_save(5,required) required,
    htmldb_item.select_list(6,isselected,'Yes;Y,No;N') isselected,
    htmldb_item.md5_checksum(isselected) cks
    from sub_columns
    where sub_id = :P26_SUB_ID
    order by 2
    Here is the update process:
    declare
    l_cks wwv_flow_global.vc_arr2;
    j pls_integer := 1;
    begin
    -- Get original MD5 checksum
    select wwv_flow_item.md5(isselected) cks
    BULK COLLECT INTO
    l_cks
    from sub_columns
    where sub_id = :P26_SUB_ID;
    for i in 1..l_cks.count
    loop
    if htmldb_application.g_fcs(i) != l_cks(i) then
    rollback;
    raise_application_error(-20001,
    'Current version of data in database has changed '||
    'since user initiated update process.');
    end if;
    end loop;
    -- update Subscription
    for i in 1..htmldb_application.g_f01.count
    loop
    update sub_columns
    set isselected = replace(htmldb_application.g_f06(i),'%'||'null%',NULL)
    where sub_id = :P26_SUB_ID and
    column_id = htmldb_application.g_f02(i);
    end loop;
    commit;
    end;
    Any help would be appreciated. I just don't see what I am doing wrong and I don't see any other way to do it.

    I had already read this paper before doing the tabular form manually. I tried to follow it as closely as I could. My tabular form is a little different since I have a where clause in my SQL and only updating one field. The other fields are display_and_save. And I was branching to a different page than the page containing the tabular form. I would think none of these differences should make it not work. I did change to branch to the same page. That made no difference.
    I did not need to do an insert so I skipped doing that step and then went to Adding Optimistic Locking. It is failuring in my update process with this code:
    -- Get original MD5 checksum
    select wwv_flow_item.md5(isselected) cks
    BULK COLLECT INTO
    l_cks
    from sub_columns
    where sub_id = :P26_SUB_ID;
    for i in 1..l_cks.count
    loop
    if htmldb_application.g_fcs(i) != l_cks(i) then
    rollback;
    raise_application_error(-20001,
    'Current version of data in database has changed '||
    'since user initiated update process.');
    end if;
    end loop;
    I get the Error process message and then the above -20001 error message when I click on the Submit button. Is there something wrong with my above code? I would assume I would need to add the where clause to the above select since I am only updating whose records.
    I had created a submit button with action submit page and redirect to URL. The process executes on the condition when the submit button is pressed.
    I need to get this working soon. I would assume other people have done a similar thing. I have tried many things. Another thing I notice is if I tell it to not display the first column, sub_id, and the last column, cks, (unselecting display in Report Attributes section) then the update does not work. I must be doing something wrong but I don't know what.
    I created the page with component, report, SQL Report, and region type SQL Query.

  • Primary key column in manual tabular form

    I am creating a manual tabular form and am unsure what to do for my primary key column. When I do this with the wizard, I'm allowed to specifiy a Primary Key Source Type and the Primary Key Source (my sequence). Is there a way to do this in a manual tabular form?
    I'm creating the column with the call 'wwv_flow_item.display_and_save(2,hours_id) hours_id' but when I edit the 'Tabular Form Element' section, I don't have the Primary Key fields anywhere to edit...only Reference Table Owner, Reference Table/Column Name. Where can I specify the sequence?
    Thanks,
    Janel

    In the process ApplyMRD, try specifying the 'Secondary Key Column' in the section 'Source: Multi Row Update and Delete' to the second key column in the tabular form.
    I haven't tested this with your situation, but worth a shot.

Maybe you are looking for

  • HP LaserJet 6L installation on new iMac

    I just bought a new iMac. I am trying to install my existing HP LaserJet 6L which is connected to a Netgear mini print server (i.e. printer connected directly to network hub and not any PC). While the iMac sees the printer queue on the network it doe

  • Issue with visibiliy of dynamic text and hyperlinks

    Hi everyone, It's been a while since I've build a Flash site and a I'm finding a out a lot has changed. I'm building a simple site with some pictures, text and the 5 last posts from Twitter. This last one is not working out that well. First of all: T

  • Need to generate combination or rows...

    Hi, My query is: SELECT  A.SERVICE_REQUEST_ID serviceRequestId,h.cost_center ,B.COMPANY_ID,               TRUNC(NVL(D.TOTAL_LABOR_HRS *                   (SELECT PROPERTY_KEY                      FROM SOP_PROPERTY_MASTER                     WHERE PRO

  • Problems with itunes starting up

    I can start itunes but i can't do anything with it. it just sits there and does nothing whatsoever no error messages pop up  so i can't exactly judge whats wrong with it help me please.

  • Importance of GR/IR clearance

    I Would  like to know 1.If we are not clearing the GR / IR Account  whether it will affect the Financially in that company. because GR /IR account is temporary account.