Начальное значение ColdFusion для currentrow, когда в cfloop не указан индекс

Я конвертирую приложение ColdFusion в C# (я CF n00b).

У меня есть сценарий, который выполняет cfquery, а затем выполняет cfloop по результатам, и, похоже, он пытается сравнить текущую строку со следующей строкой. И, похоже, он пытается убедиться, что он не пытается прочитать конец массива.

<cfquery name="qTripLegs" datasource="#sdb#">
   SELECT ...
</cfquery>

<cfloop query="qTripLegs">
    <cfif (customs_stop[currentrow] NEQ "" OR fuel_stop[currentrow] NEQ "") AND recordcount GT currentrow AND departure[currentrow] NEQ arrival[currentrow+1]>

Похоже, что currentrow основан на 1 (currentrow будет иметь значение 1, когда он впервые войдет в cfloop). Я прав? Я просмотрел документацию по холодному слиянию и ничего не вижу по этому поводу.


person Rick Hodder    schedule 08.01.2013    source источник


Ответы (1)


Да, запросы и массивы в CF основаны на 1.

Переменные CurrentRow и RecordCount являются свойствами запроса (внутри цикла запроса их область действия определяется автоматически).

<cfloop query="QueryName">...</cfloop> будет перебирать весь запрос*, от 1 до QueryName.RecordCount, а индекс QueryName.CurrentRow автоматически заполняется/увеличивается соответствующим образом. Его значение до цикла запроса не используется.

*(если не используется cfbreak/etc)

Также следует отметить, что, как правило, нет необходимости предотвращать чтение после конца (как указано выше, цикл запроса обрабатывает это), это необходимо только потому, что используется CurrentRow+1, чтобы избежать ошибки.

person Peter Boughton    schedule 09.01.2013
comment
Спасибо за помощь, Петр! - person Rick Hodder; 09.01.2013
comment
Как насчет ссылки на саму строку? - person Stephane; 14.10.2020