CFWebForge.com
 
 
   
 
Home      Service      Boeken      Artikelen      Contact     
  De praktijk  
     
   
     
  SharePoint 2010
Het is ineens overal: Twitter.
Waarom niet op uw SharePoint site? Meer...
 
     
  Nieuws  
     
   
     
  Artikel over SharePoint 2010 - Sitestatistieken gedropt op http://tinyurl.com/3d5f4gu  
     
  Handboek SharePoint 2010 op de 7e plaats in de * top 15 * best verkochte boeken 2011 bij Computerboek.nl  
 
     
  ColdFusion tutorial - Looping over an INSERT Query  
 
 
     
 
Soms heb je dat: je wilt iets in CF, maar de boeken bieden geen oplossing. Op internet surfen en zoeken helpt ook niet. Nergens kun je referenties (of achtergrondinformatie) vinden over het probleem waar je mee zit...

CFLOOP is zoiets.

   

CFLOOP is zoiets.

In boeken staat meestal de basis over hoe CFLOOP werkt. Maar dan...

Ik wilde een CFLOOP hebben die niet verticaal door een tabel heen 'loopte' (dat is geen kunst), maar horizontaal - dus door 1 rij -. Bovendien wilde ik dat er tegelijkertijd in ieder veld - uit die specifieke rij ! - gegevens met een SQL-Insert werd weggeschreven.

Met andere woorden: Hoe realiseer je een CFLOOP door een tableRow in plaats van een tableColumn?
Voor wat het waard is hier een oplossing - - - en een vervolg!

Horizontal Looping over an query

Gegeven: De tableRow bestaat uit velden met de namen: Vr1, Vr2, Vr3, Vr4, Vr5.<br>
Je wil uit rij 1 alle waarden uit die velden ophalen.<br>



Op zich kan dat door steeds alle velden hard te coderen in je pagina met CFOUTPUT QUERY="":
________________________________
<cfoutput query="RSView">
<b>
#Vr1#<br>
#Vr2#<br>
#Vr3#<br>
#Vr4#<br>
#Vr5#<br>
</b>
</cfoutput>
________________________________
Maar dat willen we niet.
Voor 5 velden gaat het nog wel, maar voor 100 wordt dat wat veel typewerk.
Daarom willen we een CFLOOP gebruiken om dat automatisch voor ons te laten doen.
OK, denken we dan. Dan zal de volgende code wel de oplossing brengen:

________________________________
<CFLOOP from=1 to=5 index="ind">
<CFOUTPUT>
<CFSET ditVeld="RSView.vr#ind#">
<b>
#ditVeld#<br>
</b>
</CFOUTPUT>
</CFLOOP>
________________________________
Mis. Want wat getoond wordt zijn de veldNAMEN en NIET de inhoud ervan.
Het gaat ons om inhoud!

De feitelijke code om de INHOUD te bereiken is:
________________________________
<CFLOOP from=1 to=5 index="ind">
<CFOUTPUT>
<CFSET ditVeld="RSView.vr#ind#">
<b>
#evaluate(ditVeld)#<br>
</b>
</CFOUTPUT>
</CFLOOP>
________________________________
YES!

Zoals je ziet in de code is het enige verschil de toevoeging 'evaluate'.
In CFSET wordt de veldnaam samengesteld uit de string 'RSView.vr' en het indexnummer '#ind#'.
Vervolgens: evaluate! Simpel...

Om tenslotte de SQL-Update er in te bouwen, laat ik graag aan je eigen creativiteit over: dat moet nu niet meer al te moeilijk zijn.

...Maar mijn veldnamen hebben steeds een andere naam!...

en het aantal kolommen verschilt steeds.
Heel apart!

Tjarko Rikkerink, Senior Advanced Certified ColdFusion MX Developer bij Prisma IT (dank!) komt met een 'knip en plak' oplossing.

Een horizontale loop over een recordset waarvan het aantal kolommen en de veld(kolom)namen onbekend zijn.
NB: geef je query even de naam qRecordset, dan zie je wat dit doet...

________________________________
<cfoutput>
  <!--- Vertical loop --->
  <cfloop from="1" to="#qRecordset.recordcount#" index="i">
      <!--- Horizontal loop without knowing the columns in your table --->
      <cfloop list="#qRecordset.columnlist#" index="column">
             #column# = #evaluate("qRecordset.#column#[i]")#
      </cfloop>
  </cfloop>
</cfoutput>
________________________________

 

 
   
  copyright © Peter van der Woude