0

Coldfusionでは、1つの選択ボックスを別の選択ボックスにバインドするcfcを使用しています(基本的に、1つのボックスから州を選択し、2番目のボックスには郡名が入力されます)。郡ボックスの値は5桁の数字です。テキストとしてフォーマットされています(つまり、値はテキストフィールドから取得されます)。

問題は、選択した郡IDの値が「0」で始まる場合、それが切り捨てられていることに気付いたことです。

だから私は次のようなものを手に入れます:ID郡11223 A 2300 B(02300である必要があります)

誰かが先頭の0が途切れないようにするのを手伝ってもらえますか?

このページの選択ボックスは次のとおりです。

 <!--- State Name options --->
    <b>State:</b><br />
    <cfselect bind="cfc:states.getStates()" bindonload="true" name="search_state" id="search_state" value="StateUSAbb" display="StateName">
    </cfselect><br />

  <!--- County Name options --->
    <b>County:</b><br />
    <cfselect bind="cfc:states.getCounties({search_state})" name="search_county" id="search_county" value="FIPS_County" display="CountyName">
    </cfselect>

.cfc全体を貼り付けるのは嫌いですが、後半の部分、特にcfsetを使用して配列にデータを入力するcfloopに注意してください。

<cfcomponent output="false">

    <!--- Get array of media types --->
    <cffunction name="getStates" access="remote" returnType="array">
        <!--- Define variables --->
        <cfset var data="">
        <cfset var result=ArrayNew(2)>
        <cfset var i=0>

        <!--- Get data --->
        <cfquery name="data" datasource="bridges">
       SELECT DISTINCT tblLoc.StateUSAbb, lkuState.StateName
        FROM lkuState INNER JOIN tblLoc ON lkuState.FIPS_State = tblLoc.FIPS_State
        WHERE (lkuState.StateName <> 'New Brunswick')
        UNION
        SELECT '' AS StateUSAbb, ' ALL' AS StateName
        FROM lkuState
        ORDER BY StateName
        </cfquery>

        <!--- Convert results to array --->
        <cfloop index="i" from="1" to="#data.RecordCount#">
            <cfset result[i][1]=data.StateUSAbb[i]>
            <cfset result[i][2]=data.StateName[i]>
        </cfloop>

        <!--- And return it --->
        <cfreturn result>
    </cffunction>

    <!--- Get counties by state --->
    <cffunction name="getCounties" access="remote" returnType="array">
        <cfargument name="stateabb" type="string" required="true">

        <!--- Define variables --->
        <cfset var data="">
        <cfset var result=ArrayNew(2)>
        <cfset var i=0>

        <!--- Get data --->
        <cfquery name="data" datasource="bridges">
        SELECT '' AS FIPS_COUNTY, ' ALL' as CountyName
        FROM lkuCnty
        UNION
        SELECT FIPS_County, CountyName
        FROM lkuCnty
        WHERE StateAbb = '#ARGUMENTS.stateabb#'
        ORDER BY CountyName
        </cfquery>

        <!--- Convert results to array --->
        <cfloop index="i" from="1" to="#data.RecordCount#">
            <cfset result[i][1]=data.FIPS_County[i]>
            <cfset result[i][2]=data.CountyName[i]>
        </cfloop>

        <!--- And return it --->
        <cfreturn result>
    </cffunction>

</cfcomponent>
4

3 に答える 3

1

データが固定長の場合、NumberFormatを使用して先行ゼロを強制できます。一般に、CF は型がないため、データが破損する原因となる基本的な変換が発生している必要があります。値を toString() に強制するか、列の値の最初の文字として一重引用符のようなものを追加してデバッグすることができます (例: SELECT '''' + FIPS_County, '''' + CountyName FROM lkuCnty)。彼らはすべてのキャラクターを保持しています。

[更新] SQL がどのように 5 文字を返さないかについてのコメントに基づいて、この更新されたクエリを使用して INT から先行ゼロ付きの VARCHAR に移動します。

  SELECT DISTINCT 
    RIGHT('00000' + CONVERT(VARCHAR(5),StateUSAbb),5), 
    lkuState.StateName
         FROM lkuState INNER JOIN tblLoc ON lkuState.FIPS_State = tblLoc.FIPS_State
         WHERE (lkuState.StateName <> 'New Brunswick')
  UNION
     SELECT '' AS StateUSAbb,
     ' ALL' AS StateName
          FROM lkuState
          ORDER BY StateName
于 2010-11-16T23:26:06.430 に答える
1

数字の末尾にスペースを追加すると、CF はそれを文字列として扱い、先頭の 0 は切り捨てられません。

簡単な回避策:<cfset result[i][1]=data.StateUSAbb[i] & " ">

ところで、クエリ オブジェクトがサポートされていることを知っていますcfselectか? したがって、ループも必要ありません。同じ回避策を実行できますが、cfquery 内の SQL で

更新:とにかく、先頭の0を保持し、CFの組み込みのserializeJSON()を使用し続けるか、JSONスタイルでcfcリモートメソッドを呼び出し続ける場合(内部でserializeJSON()を呼び出す)、スペースを追加してCFを追加できるという考えですは文字列として扱い、先頭の 0 は保持されます. 何らかの理由でスクリプトに末尾のスペースのない "012345" が必要な場合は、riaforge または cflib から別の JSON セラライザーを探してください。

于 2010-11-16T18:39:00.030 に答える
0

クエリから返されたデータは、整数値だけでなく、先行ゼロを含むテキスト文字列であると確信していますか? とにかく、Zachary の NumberFormat(x, "00000") の提案が道だと思います。

于 2010-11-17T14:27:48.550 に答える