2014-02-07 95 views
0

在數據窗口報告的詳細信息部分中,有一個計算字段,計算字段內部是PB函數,其中包含由值參數傳遞的2個字符串和字符串的返回類型。一旦檢索完成並填充數據,數據窗口將繼續檢索,因爲我從SQL分析器中觀察過,但沒有錯誤消息窗口。數據存儲填充後數據存儲不斷檢索

什麼似乎是這個功能的問題?

/* 
    Function name : f_generate_serialrange 
    Return Type : String 
    Argument Type :  Argument Name : 
    String     loc 
    String     id 
*/ 

Long ll_row 
Double ld_serialno1, ld_serialno2, ld_start, ld_end, ld_result, ld_next, ld_prev = 0 
Double ld_row, ld_count = 0, ld_countaccept = 0, ld_serialcount 
String ls_sum, ls_start, ls_prev, ls_next, ls_serialno2 

DataStore lds_getserial 

lds_getserial = Create DataStore 
lds_getserial.DataObject = 'dw_delivery_receipt_serialno1' 
lds_getserial.SetTransObject(SQLCA) 

lds_getserial.Retrieve(loc,palletid) 

ll_row =lds_getserial.RowCount() 

IF lds_getserial.RowCount() > 0 THEN 
    FOR ld_row = 1 TO lds_getserial.RowCount() 
    ld_serialno1 = Double(lds_getserial.GetItemString(ld_row,'serialno')) 
    ls_serialno2 = lds_getserial.GetItemString(ld_row,'serialno2') 

     IF ld_count = 0 THEN 
      ld_start = ld_serialno1 
      ls_start = ls_serialno2 
      ld_count++ 
     ELSE 
      ld_next = ld_serialno1 
      ls_next = ls_serialno2 
      IF ld_prev = 0 THEN 
       ld_result = ld_next - ld_start 
      ELSE 
       ld_result = ld_next - ld_prev 
      END IF 

      IF ld_result > 1 THEN 
       IF ls_prev = '' THEN 
        ls_sum += String(ls_start) +'~n' 
       ELSE 
        ls_sum += String(ls_start) +' - '+String(ls_prev)+'~n' 
       END IF 

       ld_start = ld_next 
       ls_start = String(ls_next) 
       ld_prev = 0 
       ls_prev = '' 
      ELSE 
       ld_prev = ld_next 
       ls_prev = String(ls_next) 
      END IF 
     END IF 
    NEXT 

    IF ls_prev = '' THEN 
     ls_sum +=String(ls_start)+'~n' 
    ELSE 
     ls_sum +=String(ls_start)+' - '+String(ls_prev)+'~n' 
    END IF 
END IF 
//MessageBox('System Message','Serial Range has been successfully retrieved.',INformation!) 

Destroy (lds_getserial) 
RETURN ls_sum 
+0

您正在討論數據窗口,但代碼處理數據存儲。我在想你的問題可能與'retrieve.asneeded'屬性有關,但這不適用於數據存儲。 – Seki

+0

您的意思是不建議在數據窗口報告中放置一個包含數據存儲的函數?是否因爲數據存儲將繼續檢索,儘管數據已經填充? – Alex

+0

沒有。窗口或用戶對象的數據窗口控件中可視化地使用數據窗口的功能(它可能不可見):當激活「retrieve.asneeded」屬性時,DW僅檢索對應的記錄到可見的線條。然後在滾動dw時,檢索丟失的行以顯示。我雖然可能是你的問題,但這種情況不適用於在一段代碼中聲明/實例化的數據存儲(=不可見的數據窗口)。 – Seki

回答

0

你不應該調用使用該數據庫中計算字段的功能,因爲很多事情都會導致PowerBuider重新計算計算字段。而是在DataWindow的SELECT語句中添加一個虛擬列。檢索完成後,您可以遍歷行並使用類似於您的函數的代碼來填充具有序列號範圍的虛擬列。我說「類似於你的函數」的原因是你應該只創建並連接一次DataStore,然後用每行的參數檢索它。