Ir al contenido


Foto

Problemas con Filtro y campos Lookup


  • Por favor identifícate para responder
16 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 02:49

Pues eso, en mi dataset tengo dos campos del tipo LookUp y estoy tratando de hacer un filtro con ellos, no sé si es que no se puede o qué, éste es el error al trata de flltrar los datos:

---------------------------
Debugger Exception Notification
---------------------------
Project TimerPunch.exe raised exception class EZSQLException with message 'Column with index -1 is not accessable'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------


Éste es el pedazo de código que filtra uno de los campos lookup llamado NOMBRE:



delphi
  1. If (edtBusca.Text <> '') then
  2.         begin
  3.           dslogCausa.DataSet.Filtered := False;
  4.           Filtro := 'NOMBRE Like ''*' +edtBusca.Text+ '*''';
  5.           dsLogCausa.DataSet.Filter := Filtro;
  6.           dsLogCausa.DataSet.Filtered := True
  7.         end
  8.           else dsLogCausa.DataSet.Filtered := False;



Saludos.

  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 16 marzo 2010 - 03:08

Hola
Y la variable Filtro?.
Saludos
  • 0

#3 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 16 marzo 2010 - 03:13

No me creas. pero estoy casi seguro que eso que quieres no se puede, porque no lanzas un sql con un join, asi obtienes lo que quieres, incluso mas rapido
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 04:13

Hola, La variable Filtro existe sólo que no puse el código completo, eduarcol, no lo tengo así porque ese mismo dataset lo utilizo para editar registros y como sabrás no se puede registros con joins.
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 16 marzo 2010 - 04:32

Hola
Estas seguro que es ahi donde esta el error?.
Por que no pones un showmessage despues de filtro a ver que te envia por que que diga que el index es '1 esta raro.
Saludos
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 04:34

Claro amigo, todo los demás funciona bien, sólo los campos LOOKUP que son los que me dan el error mencionado en el primer post.
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 04:37

¿Puedes colocar la sentencia SQL que tienes en dslogCausa ?

Salud OS
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 04:38

¿Puedes colocar la sentencia SQL que tienes en dslogCausa ?

Salud OS


No es ninguna sentencia SQL, sólo ZTable(TTable) de ZEOS y ahí añadí los campos lookup.
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 05:47

¿Debería usar el evento OnFilterRecord del DataSet?, aunque no sabría como usarlo ^o|, sino, recomiendenme una alternativa más viable de poder realizar ese tipo de filro.
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:03

Que tal Fer

Como definiste ese campo lookup, porque se me hace que por ahi esta el problema.

Salud OS
  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 06:18

Pues en los campos persistentes del Dataset le di New Fields, le puse un nombre y tipo de dato (en este caso String), seleccioné Lookup:

Key Field --> el campo original (de valor integer).
Dataset--> Dataset con el cual comparo (en este caso empleados)
LookUP field--> campo de comparación del dataset (empleados)
Result Field --> campo resultante (empleados de valor string)

Eso es todo.

  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 marzo 2010 - 06:20

¿ Entonces tienes configurado así ?

Key Field --> EMP_ID.
Dataset--> empleados
LookUP field--> EMP_ID
Result Field --> NOMBRE

Salud OS
  • 0

#13 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2010 - 06:21

Key Field --> EMP_ID.
Dataset--> empleados
LookUP field--> empleados.EMP_ID
Result Field --> empleados.EMP_NAME

(y)
  • 0

#14 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 marzo 2010 - 05:31

Lo podrias usar el onfilterrecord, pero yo lo haria con un query, de la siguiente manera:

1.- select * from mitabla where id= :valor
2.- Crea los campos persistentes
3.- Ubica el campo que quieres vincular con otra tabla
4.- En el evento onGetText creas la siguiente consulta:



delphi
  1. sq.Active := False;
  2.   sq.Sql.Text := 'Select NOMBRE from otratabla where id = :valor';
  3.   sq.ParambyName('Valor').AsString := MiQUeryCampoRelacionado.AsString;
  4. sq.Active := True;
  5. Text := sq.Fields[0].AsString;



Aun asi a mi manera de ver es mas eficiente que filtrar una tabla, recuerda que los filtros trabajan del lado del cliente.
  • 0

#15 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 marzo 2010 - 09:07

Por el momento lo tengo resuelto de manera provisional usando querys como mencionó eduarcol, pero sería bueno ver si hay manera de enfrentar esa situación.
  • 0

#16 andres1569

andres1569

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 431 mensajes

Escrito 17 marzo 2010 - 10:24

Hola enecumene,

el mensaje de error viene más o menos a indicar que dicho campo no puede usarse para ser comparado en un filtro, esto debe depender de los componentes en cuestión. Como dice Eduarcol, seguramente éso con los Zeos no se puede hacer ...  :sad:

Se me ocurre que pruebes creando campos calculados en vez de Lookups. En el evento OnCalcFields asignas el valor al campo llamando al método Lookup de la tabla de búsqueda, al que le pasas como parámetros el nombre de la clave, el valor de la clave y el nombre del campo que quieres obtener, te devolverá un variant que normalmente será una cadena en tu caso.



delphi
  1. MiCampo.AsString := TablaBusqueda.Lookup('ID', CampoID.AsInteger, 'Descripcion');



Se trata de probar si Zeos puede aplicar filtros sobre dicho campo calculado, ya nos dirás si lo admite o no ...

Saludos
  • 0

#17 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 17 marzo 2010 - 10:44

Por el momento lo tengo resuelto de manera provisional usando querys como mencionó eduarcol, pero sería bueno ver si hay manera de enfrentar esa situación.


Pero probaste la ultima solución que te di?, de esa manera puedes trabajar como si fuera un Table
  • 0




IP.Board spam blocked by CleanTalk.