Tengo mi base de datos en erwin 3.5, y la trabajo con power builder, pero quisiera ponerle filtros como en excel por ejemplo. Cuando ingrese un nombre 'a' me reporte todos los nombres que comiencen con 'a';pero si sigo aumentándole 'l' me valla saliendo todos que comienzan con esas características, y así sucesivamente. Ójala me haya entendido.
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Esto que necesitas efectivamente es más sencillo trabajarlo por medio de filtros. Estos filtros actúan directamente y sobre el datawindow, por lo que la información que estas viendo es por decirlo así esta falta de actualización, en otras palabras no siempre lo que esta en el datawindow, se refleja en la tabla. Por otro lado también puede ser implementado en base a un select, pero todo depende de que tu base de datos soporte la instrucción SUBSTRING() pues por lo que he visto no todas pueden soportar esta función. Sintaxis: SUBSTRINS(<valor>, <inicio>, <cantidad>) <valor> = a la columna tipo alfanumerica que estas interrogando <inicio> = posicion incial a partir de donde selecciona <cantidad> = numero de letras que debe seleccionar. ejm. SELECT CODIGO, DESCRIPCION FROM INV_MAESTRO WHERE (SUBSTRING(DESCRIPCION, 1, 2) = 'CA') En el ejemplo anterior seleccionara todos los artiulos de la tabla inv_maestro, cuyas dos primeras letras sean igual a 'CA' OTRA FORMA: tambien puedes utilizar en tu scrpit la sentencia LIKE ejm. SELECT CODIGO, DESCRIPCION FROM INV_MAESTRO WHERE (DESCRIPCION LIKE '%CA') Esto no solo encuentra 'CA' en las 2 primeras letras de la descripción, sino que en cualquiera parte de la descripción iniciando de izquierda a derecha. (No se si esto pueda servir) Una más: Puedes igualmente, cargar toda la información de la tabla en un datawindow, y utilizar un filtro que afecte unicamente a la información del datawindow. Ejm. Una vez cargada la información: STRING ls_filtro ls_filtro = 'descripcion = "'+ls_seleccion+'"' dw_1.setredraw(false) dw_1.setfilter(ls_filtro) dw_1.filter() dw_1.setredraw(true) En el ejemplo la variable ls_seleccion contiene el valor que estas ingresando por medio de un EDIT, Ten en cuenta que cada objeto tiene eventos que son disparados por cada acción. Entonces cada vez que pulses una tecla, o cambie el valor del edit, deberías actualizar el filtro. Espero esto pueda servir para resolver tu problema saludos agdsys
- Anónimoahora mismo
1 respuesta más de otro experto
Respuesta de aldob
1
1
aldob, Ingeniero en Sistemas con amplia experiencia en desarrollo de...
No me especificas donde tienes los datos. Yo asumo que los tienes ya recuperados en una dw y la persona ingresa la cadena de búsqueda en una campo de texto seteado para tal fin. 1) El campo de texto en donde ingresa debiera ser una dw externa con una columna string de POR chars de longitud (dw_criterio) 2) En el editchanged event o en el itemchanged codifica: ls_filtro = dw_criterio.object.nombrecampo[1] (poner ls_filtro = data) dw_registros.setfilter("campo LIKE '" + ls_filtro + "%'" dw_registros.filter() (Dw_registros es la que tiene lo que quieres filtrar) El like es casesensitive Si necesitas alguna aclaración escribime