2016-10-26 5 views
0

회계를 수행 할 때 숫자가 반복됩니다.회계 오류 - ColdFusion - 합계를 계산하지 않음

하지만 총계에 st.hrs를 추가하려고하면 오류가 발생합니다. 값 ''을 (를) 숫자로 변환 할 수 없습니다.

모든 아이디어의 사람들 ...도 RecordCount 검사가 그 이유입니다 -

는 st.hrs가 존재하지 않기 때문에 그것이 생각?

 <cfloop index = "ul" list = "#templist#"> 
      <cfset total = 0> 
      <cfoutput query="bl"> 
       <cfquery name="st" datasource="#tds#"> 
       SELECT * from billstaff 
       where billid = '#bl.billid#' and uid = '#ul#' 
       </cfquery> 
       <cfif st.recordcount is not 0> 
       <cfset total = #st.hrs# + total> 
       </cfif> 
      </cfoutput> 
      <cfoutput>#total#</cfoutput><br> 
     </cfloop> 
+2

일부 데이터베이스의 전체 필드에는 null 값이 있습니다. 빈 문자열에. 대답을 얻기 위해 SQL의 sum() 함수를 사용하지 않는 이유가 있습니까? –

+0

Null 값은 내가 recordcount 함께 제거 생각.sum()에 대해 자세히 설명 할 수 있습니까? –

+0

RecordCount는 쿼리에 레코드가 포함되어 있는지 여부를 알려줍니다. 이러한 레코드의 열 값에 대해서는 알려주지 않습니다. 개별 값을 확인해야합니다. Dan은 집계 SUM을 사용하여 루프 내에서 쿼리하는 대신 단일 쿼리에서 총 금액을 계산할 것을 제안합니다. 구체화를 위해 bl 쿼리를 위해 SQL을 게시해야합니다. – Leigh

답변

1

짧은 답변 :

당신은 그냥 총을 계산하는 기본 SUM() 집계로, 단일 쿼리를 사용하는 댄의 제안에 갈 필요합니다. Dan은 정교하게 만들 것입니다.하지만 이는 루프 내에서 질의하는 것보다 더 효율적입니다.

긴 대답 :

그냥 원래 오류를 해결하기 위해,이 범위 지정 변수가 좋습니다 이유의 좋은 예입니다. 범위 지정이 없으면 치명적인 오류가 발생했습니다. 그러나 쉽게 찾아 낼 수없는 논리 오류를 쉽게 일으킬 수 있습니다.

total 변수를 범위없이 초기화하면 기본값 variables 범위로 끝납니다. 그래서 당신은 기본적으로이 일을하고 있습니다 :

<cfset variables.total = 0>

당신이 외부 쿼리를 통해 루프, 현재 행에있는 데이터를 변수에 할당하지만, 다른 범위에 도착 경우 : (사이비) 쿼리를 범위.

<cfset total = #st.hrs# + total>

: 쿼리 열 중 하나가 total 익명을 발생하기 때문에, 루프 실수 상황이 여기 합계를 시도하고 계산할 때 옆으로 이동, 이로 인해 두 번째 total 변수를 생성 total 변수는 범위가 지정되지 않으므로 CF는 두 변수 중 어느 변수를 사용해야하는지 추측해야합니다.이 경우에는 틀린 것으로 추측됩니다.

범위가없는 변수는 evaluated according to these rules이며 쿼리 범위에 variables보다 높은 우선 순위를 부여합니다. 결과적으로 CF는 variables.total 대신 bl.total 값을 사용합니다. bl.total가 (또는 빈 문자열) 널 (null)이기 때문에, 즉 "값 ''그 오류를 방지 것, 즉 variables.total. 숫자 오류로 변환 된 변수 범위를 지정 할 수 없습니다됩니다.

을 다시 한번 더있다 단순히 합계를 계산하는 방법 그러나 실제로 쿼리 루프가 필요한 경우 충돌 가능성을 피하기 위해 모든 변수의 범위를 지정해야합니다.