PROBLEMA CON UNA MALDITA COMA DE UN UPDATE!

wokeer
08 de Noviembre del 2003
El problema que tengo con la maldita coma(,) es el siguiente:

En general lo que estoy realizando son compuertas que a través de cualquier base de datos sin importar la tabla me genere una clase con todas las funciones básicas de ésa tabla, ejemplo, si tengo la tabla Usuario me generaria la Class mysqlUsuario con su respectivas funciones de adicionar, eliminar y MODIFICAR.

Ya tengo todo listo y está bien, lo que no he podido arreglar es en la funcion UPDATE específicamente en el SET, actualmente me sale así:
--------------------------------------------------------------------------
function updateEmp($empno,$ename,$job,$hiredate,$sal,$comm,$deptno)
{
$sql="
UPDATE emp
SET ename='$ename', job='$job', hiredate='$hiredate',
sal=$sal, comm=$comm,
WHERE empno=$empno AND deptno=$deptno";
$this->consulta_id = @mysql_query($sql, $this->conexion_id);
return $this->consulta_id;
}
--------------------------------------------------------------------------
El problema está en el último campo del SET el comm que pone una coma(,) antes del WHERE!
--------------------------------------------------------------------------
El código XSL del Update es:
-------------------------------------------------------------------------
<xsl:template mode="FUNCION_UPDATE" match="declaration">
function update<xsl:call-template name="convertpropercase"><xsl:with-param name="toconvert" select="ancestor::table/name"/></xsl:call-template>(<xsl:apply-templates mode="TODOS_LOS_CAMPOS" select="field"/>)
{
$sql="UPDATE <xsl:value-of select="ancestor::table/name"/> SET <xsl:apply-templates mode="PARAMETROS_UPD" select="field"/> WHERE <xsl:apply-templates mode="LLAVES_PRIMARY_WHERE" select="field"/>";

$this->consulta_id = @mysql_query($sql, $this->conexion_id);
return $this->consulta_id;
}
</xsl:template>
<!-- ************************************************************ -->
<xsl:template mode="PARAMETROS_UPD" match="field">
<xsl:call-template name="validar_primary"><xsl:with-param name="nameF" select="name" /></xsl:call-template>
</xsl:template>
<!-- *************************************** -->
<xsl:template name="validar_primary">
<xsl:param name="nameF"/>
<xsl:if test="not(ancestor::declaration/primary_key/field/name = $nameF)">
<xsl:if test="position() != last()">
<xsl:if test="type = 'varchar'"><xsl:value-of select="name"/>='$<xsl:value-of select="name"/>',</xsl:if>
<xsl:if test="type = 'int'"><xsl:value-of select="name"/>=$<xsl:value-of select="name"/>,</xsl:if>
</xsl:if>
<xsl:if test="position() = last()">
<xsl:if test="type = 'varchar'"><xsl:value-of select="name"/>='$<xsl:value-of select="name"/>'</xsl:if>
<xsl:if test="type = 'int'"><xsl:value-of select="name"/>=$<xsl:value-of select="name"/></xsl:if>
</xsl:if>
</xsl:if>
</xsl:template>
--------------------------------------------------------------------------
Y el XML es:

<!--- Tabla Empleado -->
<table>
<name>emp</name>
<declaration>
<field>
<name>empno</name>
<type>int</type>
<precision>4</precision>
<notnull>1</notnull>
</field>
<field>
<name>ename</name>
<type>varchar</type>
<precision>10</precision>
<notnull>0</notnull>
</field>
<field>
<name>job</name>
<type>varchar</type>
<precision>9</precision>
<notnull>0</notnull>
</field>
<field>
<name>hiredate</name>
<type>varchar</type>
<notnull>0</notnull>
</field>
<field>
<name>sal</name>
<type>int</type>
<precision>7</precision>
<scale>2</scale>
<notnull>0</notnull>
</field>
<field>
<name>comm</name>
<type>int</type>
<precision>7</precision>
<scale>2</scale>
<notnull>0</notnull>
</field>
<field>
<name>deptno</name>
<type>int</type>
<precision>2</precision>
<notnull>0</notnull>
</field>
<primary_key>
<field>
<name>empno</name>
</field>
<field>
<name>deptno</name>
</field>
</primary_key>
<foreign-key>
<name>departamento</name>
<local_table>
<field>
<name>deptno</name>
</field>
</local_table>
<reference_table>
<name>dept</name>
<field>
<name>deptno</name>
</field>
</reference_table>
</foreign-key>
<index>
<name>indice-1</name>
<type>unique</type>
<field>
<name>empno</name>
</field>
</index>
</declaration>
</table>
--------------------------------------------------------------------------
-------------------------------------------------------------------------
El problema sólo ocurre cuando el último field es un Primary key, en este caso "deptno" entonces el XSL actualmente lo que hace es que llega al penultimo concatena lo que tiene que concatenar, pero como él lo único que sabe es que queda otro campo escribe la coma(,) pero la verdad es que como ése ultimo field es una PK no la va a meter en el SET, pero queda la COMA(,) del campo anterior en todo caso y eso queda MAL.

La pregunta es ¿COMO HAGO YO EN XSL PARA PREGUNTAR EN CUALQUIER MOMENTO POR CUALQUIER FIELD EN PARTICULAR SIES O NO PRIMARY KEY?

¿O SI NO, COMO SOLUCIONAR DE ALGUNA FORMA ESTE PROBLEMA DE LA COMA (,) ANTES DEL WHERE PARA QUITARLA? TENIENDO EN CUENTA QUE CUALQUER FIELD PUDE SER PK ESTANDO EN CUALQUIER POSICION EN EL XML?
-------------------------------------------------------------------------
AGRADECERIA SI ALGUNA PERSONA QUE EN VERDAD SEPA DEL TEMA ME PUDIERA AYUDAR, ESTOY FISICAMENTE BARADO POR ESA MALPARIDA COMA(,) !!
-------------------------------------------------------------------------
GRACIAS.

an_jo_mar
08 de Noviembre del 2003
plantea la siguiente filosofia: pon el primer campo, y luego montas el bucle con el resto de los campos, poniendo la coma antes del campo. Asi despues de la lista de campos del SET no te encontraras esa coma maldita.
En xml estas mas puesto que yo.Tu sabes como se puede enlazar un esquema xsd con una consulta para obtener un xml.
Te agradeceria que me contestases si sabes algo.
un saludo