Power Builder - Buscar haciendo filtro inmediato

 
Vista:

Buscar haciendo filtro inmediato

Publicado por Alfonso (44 intervenciones) el 07/11/2003 17:07:04
A ver si podes ayudarme con esto

Tengo una ventana donde tengo dos controles, un sle_busca y un dw, dependiendo de la columna que seleccione el usuario puedo realizar una busqueda de dicho campo, pero el problema es que al presionar la primera tecla no la lee, hasta presionar la segunda, entonces realiza dicha busqueda, es decir si busco LITZ, y voy presionando L quiero que se posicione el L, pero lo realiza hasta que presiono LI, LIT, LITZ, etc.
La validacion y el codigo los tengo en un evento creado para obtener la tecla que se pulse en el sle
Si podes ayudarme te lo agradecere.
Desde ya gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Buscar haciendo filtro inmediato (1)

Publicado por Oscar (1178 intervenciones) el 07/11/2003 19:31:06
Te paso el código de un tutorial de PB que estoy elaborando; pero lamentablemente me dió un "Ataque de flojera", y sabe Dios, cuando se terminará. Cualquier observación me dices:

El ejemplo SIMPLIFICADO consiste, en trabajar con dos DW. El DW_1, contiene sólo los nombres y el dw_2, contiene además del nombre, otros campos de la misma tabla. De tal manera, que cuando se pulsa las primeras letras en el sle_1, aparece el nombre en el DW_1, luego puedes dar clic en dicho nombre, para visualizar sus datos en el dw_2.

1. Defina las siguiente variable de instancia:
Long il_FilaEncontrada

2. En el control sle_1, debe crear un nuevo evento, llamado teclapulsada, cuyo Event ID sea pbm_keydown. El script de este evento es:

/* Control de la digitación en sle_1 */
String Caracter, Filtro, Busca
Filtro = sle_1.Text

//Con las dos líneas a continuación, lo que queremos en realidad,
//es contar de entrada con un carácter extra para seleccionar una
//fila. De esa manera, ni bien se pulse la primera letra correcta
//ya estará seleccionada la respectiva fila. Ud. sólo necesita
//saber por el momento que sirve para eso; sin embargo, si tiene
//curiosidad o desea más detalles, puede recurrir a la ayuda de PB.

Caracter = Char(Message.WordParm)
Filtro = filtro + caracter

//(CONTINUA...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar haciendo filtro inmediato (2)

Publicado por Oscar (1178 intervenciones) el 07/11/2003 19:35:25
//(CONTINUACIÓN...)
//Si la longitud de la cadena es mayor a cero...
If Len(filtro) > 0 Then
//Condición de búsqueda
Busca="Upper(Nombre) Like ' " +Upper(filtro)+" % ' "
//Empezamos la búsqueda
il_FilaEncontrada = dw_2.Find(Busca, 1, dw_2.RowCount())
//Si la función Find encuentra la fila, devuelve su número,
//caso contrario, devuelve(0)
If il_FilaEncontrada > 0 Then
//Limpiamos el dw_2, de cualquier selección previa
dw_2.SelectRow(0, False)
//Nos vamos a la fila encontrada
dw_2.ScrollToRow(il_FilaEncontrada)
//Seleccionamos esa fila
dw_2.SelectRow(il_FilaEncontrada, True)
End If
End If

3.En el evento rowfocuschanged del dw_2, escriba:
il_FilaEncontrada=dw_2.GetRow()
dw_1.ScrollToRow(il_FilaEncontrada)

4.En el evento getfocus del dw_1, escriba :
dw_1.SelectText(1, Len(dw_1.GetText()))

Nota: Como puedes notar, la única manera de lograr que te pille la primera letra, ni bien la pulses es con:
Caracter = Char(Message.WordParm)

Finalmente, considerá si te conviene utilizar este método de búsqueda cuando trabajes con miles y miles de registros, ya que ese proceso puede tornarse lento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Buscar haciendo filtro inmediato (2)

Publicado por Alfonso (44 intervenciones) el 07/11/2003 22:32:25
Gracias.
saludos desde ya.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar