以下是代码: <cfcomponent displayname="Recordset class"> <cfset this.fields=structNew()> <cfset this.tableName=""> <cfset this.recordSource=""> <cffunction name="getByTable" access="public" output="false" hint="get a Query object by a table name"> <cfargument name="tableName" type="string" required="yes"> <cfargument name="recordSource" type="string" required="yes"> <cfset this.tableName=arguments.tableName> <cfset this.recordSource=arguments.recordSource> <cfquery datasource="#this.recordSource#" name="recordSetSelect"> select * from #this.tableName# </cfquery> <cfset this.recordSet=recordSetSelect> <cfset this.mode="select"> <cfset this.rownum=1> </cffunction> <cffunction name="getBySQL" access="public" output="false" hint="get a Query object by a sql sentence"> <cfargument name="sql" type="string" required="yes"> <cfargument name="recordSource" type="string" required="yes"> <cfset this.sql=arguments.sql> <cfset this.recordSource=arguments.recordSource> <cfquery datasource="#this.recordSource#" name="recordSetSelect"> #PreserveSingleQuotes(this.sql)# </cfquery> <cfset this.recordSet=recordSetSelect> <cfset this.mode="select"> <cfset this.rownum=1> </cffunction> <cffunction name="getField" access="public" output="false" hint="get field value by field name"> <cfargument name="fieldName" type="string" required="yes"> <cfset value=evaluate("this.recordSet.#arguments.fieldName#[#this.rownum#]")> <cfreturn value> </cffunction> <cffunction name="setField" access="public" output="false"> <cfargument name="fieldName" type="string" required="yes"> <cfargument name="value" type="string" required="yes"> <cfargument name="fieldType" type="string" required="no"> <cfif not isdefined("this.fields.#arguments.fieldName#")><cfset tmp=Evaluate("this.fields.#arguments.fieldName#=structNew()")></cfif> <cfscript>StructInsert(Evaluate("this.fields.#arguments.fieldName#"),"value",arguments.value,"yes");</cfscript> <cfif not isdefined("arguments.fieldType")> <cfif isDate(arguments.value)> <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='date'")> <cfelseif isNumeric(arguments.value)> <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='numeric'")> <cfelse> <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='varchar'")> </cfif> <cfelse> <cfset tmp=Evaluate("this.fields.#arguments.fieldName#.fieldType='#arguments.fieldType#'")> </cfif> </cffunction> <cffunction name="moveFirst" access="public" output="false"> <cfset this.rownum=1> </cffunction> <cffunction name="moveLast" access="public" output="false"> <cfset this.rownum=this.recordSet.recordcount> </cffunction> <cffunction name="moveNext" access="public" output="false"> <cfset this.rownum=this.rownum+1> <cfif this.rownum gt this.recordSet.recordcount><cfset this.rownum=this.recordSet.recordcount></cfif> </cffunction> <cffunction name="movePrev" access="public" output="false"> <cfset this.rownum=this.rownum-1> <cfif this.rownum lt 1><cfset this.rownum=1></cfif> </cffunction> <cffunction name="addNew" access="public" output="false"> <cfset this.mode="addnew"> </cffunction> <cffunction name="edit" access="public" output="false"> <cfset this.mode="edit"> </cffunction> <cffunction name="delete" access="public" output="false"> <cfif not isdefined("arguments.IDName")><cfset arguments.IDName=ListContainsNoCase(this.recordSet.ColumnList,"id",",")></cfif> <cfif arguments.IDName eq ""><cfset arguments.IDName=ListFirst(this.recordSet.ColumnList,",")></cfif> <cfquery datasource="#this.recordSource#" name="recordSetDelete"> delete from #this.tableName# where <cfset fv=evaluate("this.recordSet.#arguments.IDName#[#this.rownum#]")> <cfif isNumeric(fv)> #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_numeric" value="#fv#"> <cfelse> #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_varchar" value="#fv#"> </cfif> </cfquery> </cffunction> <cffunction name="update" access="public" output="false"> <cfargument name="IDName" type="string" required="no"> <cfset fieldsList=StructKeyList(this.fields,",")> <cfset i=1> <cfif this.mode eq "addnew"> <cfquery datasource="#this.recordSource#" name="recordSetInsert"> insert into #this.tableName# (#fieldsList#) values( <cfloop index="f" list="#fieldsList#" delimiters=","> <cfset fv=evaluate("this.fields.#f#.value")><cfset ftype=evaluate("this.fields.#f#.fieldType")> <cfif i eq 1><cfset comma=""><cfelse><cfset comma=","></cfif><cfset i=2> #comma#<cfqueryparam cfsqltype="cf_sql_#ftype#" value="#fv#"> </cfloop>) </cfquery> <cfelseif this.mode eq "edit"> <cfif not isdefined("arguments.IDName")><cfset arguments.IDName=ListContainsNoCase(this.recordSet.ColumnList,"id",",")></cfif> <cfif arguments.IDName eq ""><cfset arguments.IDName=ListFirst(this.recordSet.ColumnList,",")></cfif> <cfquery datasource="#this.recordSource#" name="recordSetUpdate"> update #this.tableName# set <cfloop index="f" list="#fieldsList#" delimiters=","> <cfset fv=evaluate("this.fields.#f#.value")><cfset ftype=evaluate("this.fields.#f#.fieldType")> <cfif i eq 1><cfset comma=""><cfelse><cfset comma=","></cfif><cfset i=2> #comma##f#=<cfqueryparam cfsqltype="cf_sql_#ftype#" value="#fv#"> </cfloop> where <cfset fv=evaluate("this.recordSet.#arguments.IDName#[#this.rownum#]")> <cfif isNumeric(fv)> #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_numeric" value="#fv#"> <cfelse> #arguments.IDName#=<cfqueryparam cfsqltype="cf_sql_varchar" value="#fv#"> </cfif> </cfquery> </cfif> </cffunction> </cfcomponent> |