Comunidad de diseño web y desarrollo en internet online

Ayuda con grabación en MySQL con ZEND

Citar            
MensajeEscrito el 01 Mar 2010 12:56 pm
Al intentar grabar una actualización de un registro de una tabla de MySQL que previamente he modificado en un batagrid me sale este msg: 'Channel disconnected
Channel disconnected before an acknowledgement was received'

y no consigo encontrar el sentido del error. ¿Me podeis encaminar un poco? Trabajo con FB4 y uso PHP como servicio con el Zend que viene con el FB4. Si quereis os pongo el código aunque creo que está bien. El servidor lo tengo en local.

Muchas gracias.

Por AnakinX

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Mar 2010 01:08 pm
Hola, ya lo he resuelto, tenía mal el nombre del parametro de la función 'updateItem' asunto resuelto. gracias de todas formas.

Por AnakinX

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Mar 2010 05:52 pm
seria interezante que postearas el codigo para quienes trabajamos con amfPHP u otro podamos ver las diferencias en cuanto al modo de trabajo y programacion.

Por Shadonwk

50 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Mar 2010 10:34 am
Ok Shadonwk, ahí va, pero tened en cuenta que soy un recien llegado a esto del flex. Es un ejemplo muy simple, tengo una tabla 'clientes' en MySQL con solo tres campos. Cuando se inicia el programa cargo el único registro que tiene, el cíodigo '0001', aunque se puede modificar para cargar cualquier otro usando una variable que contenga el número de código a cargar. Lo visualizo en el correspondiente datagrid y en un formulario asociado al datagrid. modifico cualquier campo y por medio del botón 'grabar' actualizo el registro en la base de datos.

lado del cliente:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:abmclientes="services.abmclientes.*"
xmlns:valueObjects="valueObjects.*"
width="1024" height="700">
<fx:Script>
<![CDATA[
import flash.events.MouseEvent;
import mx.events.FlexEvent;
import mx.controls.Alert;

protected function dataGrid_creationCompleteHandler(event:FlexEvent):void
{
getItemResult.token = aBMClientes.getItem('0001');
}


protected function button_clickHandler(event:MouseEvent):void
{
updateItemResult.token = aBMClientes.updateItem(cLIENTES);
}

]]>
</fx:Script>
<fx:Declarations>
<s:CallResponder id="getItemResult" result="cLIENTES = getItemResult.lastResult[0] as CLIENTES"/>
<abmclientes:ABMClientes id="aBMClientes" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/>
<valueObjects:CLIENTES id="cLIENTES"/>
<s:CallResponder id="updateItemResult"/>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Panel x="10" y="10" width="699" height="164">
<mx:Form x="5" y="6" width="684">
<mx:FormItem label="NOMBRE">
<s:TextInput id="nOMBRETextInput" text="@{cLIENTES.NOMBRE}"/>
</mx:FormItem>
<mx:FormItem label="CODIGO">
<s:TextInput id="cODIGOTextInput" text="@{cLIENTES.CODIGO}" width="563"/>
</mx:FormItem>
<mx:FormItem label="POBLACION">
<s:TextInput id="pOBLACIONTextInput" text="@{cLIENTES.POBLACION}" width="564"/>
</mx:FormItem>
</mx:Form>
</s:Panel>
<mx:DataGrid x="11" y="202" id="dataGrid" creationComplete="dataGrid_creationCompleteHandler(event)" dataProvider="{getItemResult.lastResult}" height="73">
<mx:columns>
<mx:DataGridColumn headerText="NOMBRE" dataField="NOMBRE"/>
<mx:DataGridColumn headerText="CODIGO" dataField="CODIGO"/>
<mx:DataGridColumn headerText="POBLACION" dataField="POBLACION"/>
</mx:columns>
</mx:DataGrid>
<s:Button x="450" y="202" label="GRABAR" id="button" click="button_clickHandler(event)"/>
</s:WindowedApplication>

lado del servidor:

<?php

class ABMClientes {

public function connect() {
$connection = mysql_connect("127.0.0.1", "root", "") or die(mysql_error());
mysql_select_db("gestion", $connection) or die(mysql_error());
}

public function getAllItems() {
$this->connect();

$sql = "SELECT * FROM clientes";
$result = mysql_query($sql) or die('SQL Error (TSC)): ' . mysql_error());

return $result;
}

public function getItem($itemID) {
$this->connect();
$itemID = mysql_real_escape_string($itemID);

$sql = "SELECT * FROM clientes where CODIGO=$itemID";

$result = mysql_query($sql) or die('SQL Error (TSC)): ' . mysql_error());

return $result;
}

public function createItem($item) {
$this->connect();
$sql = "INSERT INTO clientes (NOMBRE, POBLACION, CODIGO)
VALUES ('$item->NOMBRE', '$item->POBLACION', '$item->CODIGO')";

$result = mysql_query($sql) or die('SQL Error (TSC)): ' . mysql_error());
return mysql_insert_id();
}

public function updateItem($item) {
$this->connect();
$sql = "UPDATE clientes SET NOMBRE = '$item->NOMBRE', POBLACION = '$item->POBLACION',
CODIGO = '$item->CODIGO' WHERE CODIGO = $item->CODIGO";

$result = mysql_query($sql) or die('SQL Error (TSC)): ' . mysql_error());
}

public function deleteItem($itemID) {
$this->connect();
$itemID = mysql_real_escape_string($itemID);
$sql = "DELETE FROM clientes WHERE CODIGO = $itemID";

$result = mysql_query($sql) or die('SQL Error (TSC)): ' . mysql_error());
}
public function count() {

$this->connect();
$sql = "SELECT * FROM clientes";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
$rec_count = mysql_num_rows($result);
mysql_free_result($result);
return $rec_count;

}
public function getItems_paged($startIndex, $numItems) {

$this->connect();
$startIndex = mysql_real_escape_string($startIndex);
$numItems = mysql_real_escape_string($numItems);
$sql = "SELECT * FROM clientes LIMIT $startIndex, $numItems";
$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
return $result;
}
}
?>

Y eso es todo, lo importante para mi era la llamada al procedimiento updateItem que no tenía claro cómo hacerlo, llevo solo 15 días con estos temas, y no veia la forma. Ahora ya tengo claro como usar cada uno de los métodos de la clase.

Saludos, y aquí estoy para lo que pueda ayudar dentro de lo poco que sé.

Por AnakinX

5 de clabLevel



 

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.