 |
Je hebt een leven geleefd. Je hebt dingen gedaan, spullen verzameld, mensen om je heen gehad die je dierbaar zijn geworden. Verlangens gehad, verlangens bevredigd, toekomst gevoeld, verleden gedeeld. |
| |
|
De eenvoudigste manier om deze code aan de gang te krijgen is door onderstaande
template in een blanco document op je server te copiëren.
Plug een waarde in voor je ODBC connectie en één voor de
Tabel(Naam) die je wilt gebruiken.
Opslaan als .cfm. En run 'm in je browser...
Je ziet een dynamisch zoekformulier waarin je kunt zoeken binnen
de velden van de Tabel die je gekozen had. Afhankelijk wat je wil kun
je zoeken op =, <>, LIKE, NOT LIKE.
Als je eenmaal ziet "wat" het doet, stap dan door de broncode
en probeer er achter te komen "hoe" het het doet.
Dit is geen "productie" script: er zitten nog "bugs"
in (nummer en datumvelden worden getoond, maar je kunt er nog niet op
zoeken). Maar het geeft wel een indicatie:
- hoe je dynamisch variabelen kunt toekennen,
- hoe je een dynamische SQL opzet en
- hoe je een dynamisch rapport kunt genereren.
Indien je vragen hebt over specifieke onderdelen van deze code, stuur
ze dan naar feedback@cfwebforge.com.
Have fun!
<!--- Dynamic query builder --->
<!--- Weer zo'n fantastisch product van cfwebforge.com! --->
<style type="text/css">
<!-- body { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; font-style: normal}-->
</style>
<!--- *** Zet hier je ODBC connectie en je TabelNaam ***--->
<cfset YourODBC="">
<cfset YourTable="">
<cfset ThisFile=getfilefrompath(getcurrenttemplatepath())>
<cfset FieldList="">
<cfquery name="myquery" datasource="#YourODBC#">
select * from #YourTable#
</cfquery>
<cfloop list="#myquery.columnlist#" index="columname">
<cfset FieldList=ListAppend(FieldList,columname)>
</cfloop>
<!---You may prefer to hand build "FieldList" the list--->
<!---Begin van het Zoekformulier--->
<h2>ZoekFormulier</h2>
<cfoutput>
<form action="#ThisFile#" method="post">
<cfloop List="#FieldList#" index="ThisField">
#LCase(ThisField)#
<select name="#ThisField#_operator">
<option value="=">is gelijk aan...</option>
<option value="<>">is niet gelijk aan...</option>
<option value="LIKE">bevat...</option>
<option value="NOT LIKE">bevat niet...</option>
</select>
<input type="text" name="#ThisField#">
<br><br>
</cfloop>
<input type="submit" name="submit" value="submit">
</form>
</cfoutput>
<!---Hier de Dynamische SQL--->
<cfif isdefined("Form.Submit")>
<cfquery name="SearchResult" datasource="#YourODBC#">
Select
#FieldList#
FROM #YourTable#
Where 1=1
<cfloop collection="#Form#" item="ThisField">
<cfif ListFindNoCase(FieldList,ThisField) is not 0>
<cfset Operator=ThisField & "_Operator">
<cfif Form[ThisField] is not "">
<cfif #Form[Operator]# contains "Like">
AND #ThisField# #Form[Operator]# '%#Form[ThisField]#%'
<cfelse>
AND #ThisField# #Form[Operator]# '#Form[ThisField]#'
</cfif>
</cfif>
</cfif>
</cfloop>
</cfquery>
<!---Hier de Output van de query--->
<cfoutput query="SearchResult">
<cfloop list="#FieldList#" index=index>
#SearchResult[index][SearchResult.CurrentRow]# <br>
</cfloop>
<hr size="1" noshade>
</cfoutput>
<!---End of "is submit" form processing--->
</cfif>
De mogelijkheid voor een loop door een "Form Structure" is alleen beschikbaar in CF 4.5x en hoger.
Als bovenstaand script wilt uitvoeren op een CF 4.0 server, dan moet je de template iets aanpassen:
Vervang alle referenties naar Form[ThisField] in... Evaluate("Form.#ThisField#")
|