0

.cfm の cfgrid でデータを編集するために使用している .cfm と .cfc があり、動作しますが、10% の確率で次のエラー メッセージが表示されます。

" CFC /test/editCFgrid.cfc の呼び出し中にエラーが発生しました: 内部サーバー エラー"

デバッグのアドバイスを使用してみましたが、うまくいきませんでした。

CFM コードは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<cfform name="artistform">
            <cfgrid format="html" name="artistgrid" pagesize=11
            striperows="yes" 
            bind="cfc:editCFgrid.getArtists({cfgridpage},{cfgridpagesize},{cfgridsortcolumn},{cfgridsortdirection})"
            delete="yes" insert="yes" selectmode="edit"
            onchange="cfc:editCFgrid.saveArtist({cfgridaction},{cfgridrow},{cfgridchanged})">
                <cfgridcolumn name="firstname" header="First Name" />
                <cfgridcolumn name="lastname" header="Last Name" />
                <cfgridcolumn name="address" header="Address" />
                <cfgridcolumn name="city" header="City" />
                <cfgridcolumn name="state" header="State" />
                <cfgridcolumn name="postalcode" header="Postal Code" />
                <cfgridcolumn name="email" header="Email" />
                <cfgridcolumn name="phone" header="Phone" />
                <cfgridcolumn name="fax" header="Fax" />
                <cfgridcolumn name="thepassword" header="Password" />
</cfgrid>
</cfform>
</body>
</html>

CFCコードは次のとおりです。

<cfcomponent output="FALSE">
    <cffunction name="getArtists" hint="I extract artists from the database" access="remote" output="FALSE" returntype="struct">
        <cfargument name="page" required="TRUE" hint="the page the grid is on" />
        <cfargument name="pagesize" required="TRUE" hint="records displayed per page" />
        <cfargument name="gridsortcolumn" required="TRUE" hint="selected column to sort" />
        <cfargument name="gridsortdirection" required="TRUE" hint="the sort direction" />
        <cfset var qArtists = "" />

        <cfif arguments.gridsortcolumn eq "">
            <cfset arguments.gridsortcolumn = "lastname" />
            <cfset arguments.gridsortdirection = "asc" />
        </cfif>

            <cfquery name="qArtists" datasource="test_database">
                SELECT *
                FROM Artists
                ORDER BY #arguments.gridsortcolumn# #arguments.gridsortdirection#
            </cfquery>

        <cfreturn QueryConvertForGrid( qArtists, arguments.page, arguments.pagesize ) />
    </cffunction>

    <cffunction name="saveArtist" type="any" hint="I insert, update or delete an artist" access="remote" output="FALSE" returntype="void">
        <cfargument name="gridaction" type="any" required="TRUE" hint="I for insert, U for update and D for delete" />
        <cfargument name="gridrow" type="any" required="TRUE" hint="the rows being inserted or updated" />
        <cfargument name="gridchanged" type="any" hint="the changes" />
        <cfset var qInsertArtist = "" />
        <cfset var qUpdateArtist = "" />
        <cfset var qDeleteArtist = "" />

        <cfif IsStruct( arguments.gridrow ) and IsStruct( arguments.gridchanged )>
            <cfif arguments.gridaction eq "I">
                <cfquery name="qInsertArtist" datasource="test_database">
                    INSERT INTO Artists
                        (firstname, lastname, address, city, state, postalcode, email, phone, fax, thepassword)
                    VALUES
                        (<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.firstname#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.lastname#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.address#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.city#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.state#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.postalcode#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.email#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.phone#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.fax#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.thepassword#" />)
                </cfquery>

            <cfelseif arguments.gridaction eq "U">
                <cfset var colname = StructKeyList( arguments.gridchanged ) />
                <cfset var value = StructFind( arguments.gridchanged, colname ) />
                    <cfquery name="qUpdateArtist" datasource="test_database">
                        UPDATE Artists
                        SET #colname# = <cfqueryparam value="#value#" />
                        WHERE artistid = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.gridrow.artistid#" />
                    </cfquery>

            <cfelseif arguments.gridaction eq "D">
                <cfquery name="qDeleteArtist" datasource="test_database">
                DELETE FROM Artists 
                WHERE artistid = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.gridrow.artistid#" />
                </cfquery>
            </cfif>
        </cfif>
    </cffunction>
</cfcomponent>

各機能 (編集、挿入、削除など) は機能しますが、ランダムにエラーが発生します。最終的に、エラーメッセージを無視/ブロック/「OK」してユーザーに表示されないようにするコードを探しています。

どんな助けでも大歓迎です!私は一日中 (9 時間) グーグルで答えを探しましたが、何も見つかりませんでした。私は CF 管理者ログにアクセスできません。私は通常の開発者です。ありがとう!

4

3 に答える 3

1

Google Chrome、FirefoxのFirebug、IE開発者ツールはすべてこれを支援します。

グーグルクローム(私の好み)で、あなたのページを右クリック>要素を検査します。次に、[ネットワーク]タブに移動します。Webページを更新する必要があります。次に、ファイルのリストにcfcが表示されます(おそらく赤)。右クリック>[新しいタブで開く]をクリックすると、呼び出されているすべての引数を使用してcfcを直接開きます。その後、エラーを確認できるはずです。

無視/ブロック/OKはありません。エラーを修正する必要があります。

于 2013-02-08T01:04:42.960 に答える
0

次のスクリプトを使用して、「エラー」メッセージを無視/ブロック/OK する方法があります。

<script>ColdFusion.setGlobalErrorHandler(function (error) 
{mygrid = ColdFusion.Grid.refresh ('artistgrid', false);
}
);
</script>

このスクリプトを CFM ファイルに挿入すれば、準備完了です。私が遭遇したエラーは、cfgrid の機能 (セルの編集) に影響を与えていませんでした (ポップアップ メッセージは、他の何よりも厄介なものでした)。うまくいけば、このソリューションは他の人にも役立ちます!

スクリプトで「Grid.refresh」コマンドを使用する必要はありません。任意のコマンドを使用できます。

私の問題に答えようとしたすべての人に感謝します!

于 2013-02-12T20:46:42.367 に答える
0

タイムアウトまたは SQL エラーの可能性があります。完全なエラーを取得するには、cferror を使用します。このタグは完全なデバッグ情報を示します (デバッグ サーバー情報よりも優れています)。メールで送信しました。

これをアプリケーションファイルに入れてください:

<cferror type="exception" template="error.cfm" />
<cferror type="request" template="error.cfm" />

次を使用して「error.cfm」ファイルを作成します。

"Error message"
<cfsavecontent variable="errorContent">
<cfoutput>
An error occurred: http://#cgi.server_name##cgi.script_name#?#cgi.query_string#<br />
Time: #dateFormat(now(), "short")# #timeFormat(now(), "short")#<br />

<h2>Error:</h2>
<cfdump var="#error#" label="Error">
<h2>Form:</h2>
<cfdump var="#form#" label="Form">
<h2>URL:</h2>
<cfdump var="#url#" label="URL">
<h2>SESSION:</h2>
<cfdump var="#SESSION#" label="SESSION">

</cfoutput>
</cfsavecontent>

<cfmail to="mail@mymail.com" from="mail@mymail.com" subject="Error on #cgi.server_name#: #error.message#" type="html">
#errorContent#
</cfmail>
于 2013-02-08T14:08:25.043 に答える