2012-04-25 2 views
0

이 게시물을 무시하십시오. 여기에 내 문제에 대한 명확한 예를 만들었습니다. Error with CFLoop When Entries Are Missing누락 된 항목에 대한 CFLoop 오류

아래의 CFLoop 코드를 실행 중입니다.

<cfset data = queryNew("sid,firstname,lastname,age","integer,varchar,varchar,integer")> 
<cfloop index="x" from="1" to="50"> 
    <cfset queryAddRow(data)> 
    <cfset querySetCell(data,"sid",x)> 
    <cfset querySetCell(data,"firstname","#first[x]#")> 
    <cfset querySetCell(data,"lastname","#last[x]#")> 
    <cfset querySetCell(data,"age","#studentage[x]#")> 
</cfloop> 

<cfoutput query="data"> 
    #sid# - #firstnamet# #lastname# - #age#<br /> 
</cfoutput> 

변수 first[x], last[x]studentage[x]X 루프 인덱스 인으로 외부 소스로부터 인출되고있다. CFLoop에는 50 개의 항목이 있습니다.

사용할 수있는 데이터가있을 때 코드는 아름답게 작동합니다. 그러나 누락 된 데이터가 있으면 코드가 손상됩니다. 그 말은 Entry 11에 first[x] 변수의 이름이 없다면 "Element first is undefined. The error occurred on line 5

의 줄을 따라 오류가 발생합니다 (줄 5는 이름의 항목입니다).

이 경우 결과에서 내 항목 11 (및 오류를 유발하는 다른 모든 항목)을 생략하고 오류가 표시되지 않도록하고 싶습니다. 어떻게해야합니까?

명확화 : 데이터가 정의되어 있다고 가정하십시오. 외부 데이터 소스를 사용하고 있기 때문에 조금 털이 나옵니다. 하지만 내가 말하는 것은 1 ~ 10 번 항목이 나타난다는 것입니다. 11 번 항목이 돌아 왔을 때 오류가 발생했습니다.

+0

첫 번째, 마지막 및 학생 변수는 어디에 정의되어 있습니까? 50 개의 동일한 데이터가 포함 된 쿼리를 만드는 것으로 보입니다. 또한 "데이터"쿼리를 반복하지만 firstname, lastname 및 age 인 쿼리의 실제 열 대신 첫 번째, 마지막 및 studentage 변수를 표시합니다. –

+0

그래, 무슨 일이 일어나는 지 알 겠어. 정의되지 않은 변수가있는 쿼리를 채우려고합니다. 오류는 cfoutput 내의 행이 아닌 firstname에 대한 querySetCell 호출에서 발생합니다. 그것은 데이터가없는 질의에서 행을 사용하지 않고 "first", "last"또는 "studentage"를 정의하지 않았지만 그 값을 사용하려고합니다. 쿼리를 채 웁니다. –

+0

답장을 보내 주셔서 감사합니다. 그 변수들은 정의되어 있고, 나는 위의 코드 스 니펫을 포함하지 않았다. 내가 말하는 것은 예를 들어, 1 ~ 10 번 항목이 표시되지만, 11 번 항목에는 이름이 없기 때문에 CF 오류가 나타납니다. – Mike

답변

1

루프에서 외부 데이터베이스의 레코드 수를 사용하면 오류가 발생하지 않습니다.

더 나은 해결책은 메모리에 쿼리가 있다고 가정 할 때 쿼리 쿼리를 사용하는 것입니다.

<cfquery dbtype='query' name='data'> 
SELECT SID, First AS FirstName, Last AS LastName, Age AS StudentAge 
FROM ExternalDatabaseQuery 
</cfquery> 
+0

감사합니다. 그러나 데이터베이스를 사용하지 않았습니다. 내 외부 데이터 소스는 XML 피드입니다. 나는 # ExternalDatabaseQuery.RecordCount #와 비슷한 접근법을 시도해 봤지만 처음 10 개 항목에는 이름, 성, 학생 나이가 있지만 문제는 11 번 항목에 성, 나이, 그러나 아무 이름도. 그런 다음 항목 12에는 모든 정보가 다시 입력되지만 CFLoop은 이름이 없으므로 항목 11에 붙어 있습니다. – Mike

+0

변수의 존재 여부를 확인하십시오. . 각 변수를 확인하거나 정의되지 않은 경우 빈 칸에 넣을 수도 있습니다. 진행 방법에 따라 많은 옵션이 있습니다. – Busches

+0

또한 실제 데이터베이스를 사용하지 않는 경우 외부 데이터베이스를 사용하고 있다고 말하면서 원래의 질문을 수정하고 싶습니다. 사실 전혀 다른 것을 반복 할 때 말이죠. – Busches

1

마이크, 내가 오해 한 것에 대해 사과하고 있지만 일부 기본 조건부가 해당 작업을 수행 할 수있는 것으로 보입니다. 코드에 대한 다음 편집은 어떻게 진행되는지에 대한 제안 일뿐입니다 (전체 코드 기반은 다소 다른 것을 지시 할 수 있습니다).

여기에서 가장 큰 문제는 (그리고 아마도 이것은 당신에게 문제가되지 않습니다) 이것은 50 오류를 출력한다는 것입니다. 따라서 오류가 3 개 (즉, 데이터가 없음) 인 경우 50 개가 아닌 47 개의 항목이 출력됩니다. 문제가있는 경우 의견을 추가하십시오. 항상 50 개 항목을 유지할 수있는 몇 가지 대체 방법이 있습니다 산출.

+0

죄송합니다, 이것이 제 잘못입니다. . 나는 당신에게 감사를위한 upvote를 주었고, 더 좋은 모범을 보였습니다. 여기를보세요 : http://stackoverflow.com/questions/10321272/error-with-cfloop-when-entries-are-missing – Mike

+0

걱정 마세요, Mike! 새로운 질문을 체크 아웃합니다. –

관련 문제