Página 1 de 1

TDBBrowse y lAutoSeek

Publicado: Sab Nov 30, 2019 3:27 pm
por Ariel
Buenos dias,

Tengo un TDBBrowse conectado a un dataset de clientes con el siguiente formato :

:cSelect:= Select clientes.*, ifnull(clientes.suspendido,0) AS suspendido, Trim(Concat(ifnull(localidades.nombre,''),' ',ifnull(provincias.nombre,'')) ) AS cLocalidad,
ifnull(tipoderesponsable.nombrer,'') AS cFiscal, ifnull(vendedores.codven,0) AS nVendedor, ifnull(comopaga.nombre,'') AS cPaga, "+;
ifnull(categorias.nombre,'') AS cCategoria
from clientes
LEFT JOIN localidades ON clientes.idlocalidad=localidades.id
LEFT JOIN provincias ON localidades.idprovincia=provincias.id
LEFT JOIN tipoderesponsable ON clientes.idfiscal=tipoderesponsable.id
LEFT JOIN vendedores ON clientes.idvendedor=vendedores.id
LEFT JOIN categorias ON clientes.idcategoria=categorias.id
LEFT JOIN comopaga ON clientes.idpaga=comopaga.id
ORDER BY clientes.nombre;

todo bien, muestra la info correcta, pero al digitar teclas (sobre el browse) para localizar un cliente me tira el siguiente error :

Date: 30-11-2019 11:26:24 User: Administrador

MariaDB Error:

select lista_id from (select IF( nombre LIKE 'M%', 1, 0) as lista_id, clientes.*, ifnull(clientes.suspendido,0) AS suspendido, Trim(Concat(ifnull(localidades.nombre,''),' ',ifnull(provincias.nombre,'')) ) AS cLocalidad, ifnull(tipoderesponsable.nombrer,'') AS cFiscal, ifnull(vendedores.codven,0) AS nVendedor, ifnull(comopaga.nombre,'') AS cPaga, ifnull(categorias.nombre,'') AS cCategoria FROM clientes LEFT JOIN localidades ON clientes.idlocalidad=localidades.id LEFT JOIN provincias ON localidades.idprovincia=provincias.id LEFT JOIN tipoderesponsable ON clientes.idfiscal=tipoderesponsable.id LEFT JOIN vendedores ON clientes.idvendedor=vendedores.id LEFT JOIN categorias ON clientes.idcategoria=categorias.id LEFT JOIN comopaga ON clientes.idpaga=comopaga.id WHERE ifnull(clientes.baja,'*')='*' ORDER BY clientes.nombre,clientes.id ) as tmp_sql

Column 'nombre' in field list is ambiguous [# 1052]
En procedimiento: TDBBROWSE:AUTOSEEK línea: 1444

Called from XMARIADBDATASOURCE:EXECUTE(0)
Called from TMARIADBDATASOURCE:EXECUTE(5044)
Called from TMARIADBRECORDS:LOCATE(4100)
Called from TSQLQUERY:LOCATE(813)
Called from TDBBROWSE:AUTOSEEK(1444)
Called from TDBBROWSE:ONSEEK(0)
Called from TDBBROWSE:SEEK(613)
Called from XBROWSE:WMCHAR(2433)
Called from TDBBROWSE:WMCHAR(629)
Called from RUNFORM(0)
Called from TAPPLICATION:RUN(289)
Called from MAIN(16)


:lAutoSeek esta en .t.

Interpreto que falta el alias de la tabla antes del campo, pero no sé como resolverlo.

Gracias!

Re: TDBBrowse y lAutoSeek

Publicado: Lun Dic 02, 2019 5:17 pm
por ignacio
Buenos días,

El motivo de ese error es porque hay más de una tabla con el nombre de campo 'Nombre' y en el proceso de filtrado Xailer y debido a la complejidad de la SELECT, Xailer no es capaz de construir la cadena de filtrado correctamente. Debido a que con esa complejidad es imposible que pueda editar el recodset, le recomiendo que simplemente utilice un TMemDataset. En este caso la ordenación y filtrado se hace en local sin tener que repetir la consulta y es infinitamente más rápido.

Una recomendación: Si no va a editar el recordset, SIEMPRE utilice un TMemDataset.

Saludos

Re: TDBBrowse y lAutoSeek

Publicado: Jue Dic 05, 2019 2:43 pm
por Ariel
Ignacio,

gracias por responder, supuse que venian por ahi los tiros, voy a probarlo como dices. gracias