J'ai une grille de données modifiable et je dois la renvoyer à la base de données via un CFC pour insertion dans la base de données une fois la modification terminée . Dumping la collection de tableau à cfdump me dit que j'ai un tableau avec des éléments et une structure mais je ne peux pas comprendre comment "boucler" à travers chacun et insérer dans la base de données.Comment transmettre une grille de données Flex éditée à un CFC pour l'insérer dans une base de données
Il semble y avoir très peu d'écrit qui fonctionne réellement! Mon MXML et CFC sont ci-dessous, mais donnez-moi l'erreur de "Vous avez essayé de déréférencer une variable scalaire de type classe coldfusion.runtime.Array en tant que structure avec des membres." -qui est agréable
toute aide est très appréciée - merci
[Bindable]
private var getconsent:ArrayCollection = new ArrayCollection([
{LocationName:'Service A', Contact: 'Bob Jones' },
{LocationName:'Service B', Contact: 'Jane Smith' },
{LocationName:'Service c', Contact: 'Doug Johnson' },
{LocationName:'Service d', Contact: 'John Jackson'}
]);
public function send():void {
cfdata.sendData(getconsent.source);
}
public function send_Result(event:ResultEvent):void {
Alert.show('ok');
}
public function send_Fault(event:FaultEvent):void {
Alert.show(event.fault.message);
}
]]>
</mx:Script>
<mx:RemoteObject
id="cfdata"
showBusyCursor="true"
destination="ColdFusion"
source="buildtest.test2">
<mx:method name="sendData" result="send_Result(event)" fault="send_Fault(event)" />
</mx:RemoteObject>
<mx:DataGrid id="myGrid"
dataProvider="{getconsent}" editable="true" >
<mx:columns>
<mx:DataGridColumn dataField="LocationName" width="150"
editable="false"/>
<mx:DataGridColumn dataField="Contact" width="150" />
</mx:columns>
</mx:DataGrid>
<mx:Button label="Update DB" click="send()"/>
<cfcomponent displayname="sendData" output="false" >
<cffunction name="sendData" access="remote" output="no" returnType="void" required="yes" >
<cfargument name="getconsent" type="any" required="true">
<cfloop from="1" to="#ArrayLen(getconsent.dataprovider)#" index="i">
<cfquery name="clientconsent" datasource="gvr">
INSERT INTO ClientConsent"
(Location)
VALUES
('#getconsent.dataprovider.LocationName[i]#')
</cfquery>
</cfloop>
</cffunction>
</cfcomponent>
tableau 1 struct Contactez Bob Jones
service LocationName A
mx_internal_uid 807D204F-A315-7D78-C745-BAD78087CB28
2 struct
Contact Jane Smith
LocationName Service B
mx_internal_uid EAA43EF4-A7EA-82C9-5F3C-BAD780D7FD6F
3 struct
Contact Doug Johnson
LocationName Service c
mx_internal_uid 9768D6D2-8F97-5F4D-767C-BAD780D7B478
pls utiliser cfloop INTÉRIEUR cfquery, et non l'inverse, pour des raisons de performances . :) – Henry
Pour développer le commentaire de Henry, vous créez actuellement une nouvelle connexion à la base de données pour chaque requête. Si vous placez la boucle à l'intérieur, une seule connexion est créée. Cela suppose que le pilote de source de données que vous utilisez vous permette de publier plusieurs commandes (séparées par un point-virgule), ce qui n'est pas le cas de tous. –