2012-08-28 85 views
3

我有以下使用下面的查詢表格報告:如何訪問APEX_ITEM.TEXTAREA字段使用APEX_APPLICATION.G_F01

select id, 
     name, 
     telephone, 
     apex_item.checkbox2(1,id) as "Tick when Contacted", 
     apex_item.text(20,my_date) as "Date Contacted", 
     apex_item.textarea(30,my_comment,5,80) as "Comment" 
from my_table 

該報告顯示10條記錄,其中駕駛關鍵是分配給F01的複選框。

我的問題是,因爲這是一個表格報告,使用Oracle APEX_APPLICATION.G_F01.COUNT - 我如何訪問textarea字段的值,其中「my_comment」是報告中的用戶可輸入值,而不是來自數據庫列/表?

從我所看到的,它似乎是一個序列問題,如果您輸入的記錄不正確的順序,那麼值是錯過了。

我只勾選第1,3,5行的複選框,因此希望僅返回與這些選定行相關的textarea字段的值。

這讓我感到莫名其妙。

謝謝。

回答

6

是的,當表格形式包含複選框時會變得棘手。在你的例子中,g_f01將只包含3個值爲1,3,5的元素,但數組g_f30將包含10個元素。

通常使用apex_item建立表格表單時,最好也使用APEX集合:

  1. 填充在進入頁面與MY_TABLE相關數據的收集APEX。在可隱藏的項目中保存可定製行的ID,例如apex_item.hidden(2,ID)。
  2. 寫報告,從收集工作,而不是MY_TABLE,並在複選框項使用seq_id而不是ID:apex_item.checkbox2(1,seq_id)
  3. 在提交時,使用g_fxx陣列更新集合 - oftne使用一個以上的傳遞。
  4. 最後使用集合更新my_tabl

所以,在你的榜樣,你可能會先更新APEX收集與指示哪些行已通過設置C050爲「Y」打勾:

for i in 1..apex_application.g_f01.count loop 
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f01(i), 
     50, 'Y'); 
end loop; 

然後用另一變化更新:

for i in 1..apex_application.g_f02.count loop 
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
     20, apex_application.g_f20(i)); 
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
     30, apex_application.g_f30(i)); 
end loop; 

最後應用相關更改MY_TABLE:

for r in (select c002, c020, c030 
      from apex_collection 
      where collection_name = 'MYCOLL' 
      and c001 = 'Y' -- Checked rows only 
     ) 
loop 
    update my_table 
    set my_date = r.c020 
    , my_comment = r.c030 
    where id = r.c002; 
end loop; 

這麼簡單......?!

+0

晶瑩剔透;)我認爲Tonsils在http://stackoverflow.com/q/12142143/814048的回答後有這個問題/困惑。我的第一個回答錯了,錯了。不是我不知道這一點,我只是有一個判斷失誤:我甚至測試該死的代碼和輸出顯示我錯了!我現在修改了它。但是代碼的最終結果不會與基於集合的答案的結果相同嗎?實際上在這裏使用集合會有很多優勢嗎? – Tom

+0

這裏的收藏可能沒有那麼多優勢。這只是我的默認設置:如果我使用apex_item,那麼我通常也使用集合!你的方法對於這種情況會更簡單,我的可能是矯枉過正。 –

+0

欣賞你的答案託尼以及你的修正版湯姆。多謝你們。我覺得我們是SO上只有三個人似乎在使用Oracle ApEx .... – tonyf