Autocompletar un sle (powerbuilder) función tipo excel

Que tal amigos foreros tengo un problema estoy haciendo un programa en powerbuilder que me busque rfcs o nombres de una base de datos ya hecha, tengo un sle (single line edit) y mi datawindow el cual despliega lo que busco mi duda es como hacer para que en mi sle se autocomplete los nombres de mi columna nombres tipo funcion de excel
Para que evite escribir y se agilice la consulta

1 respuesta

Respuesta
1

Tendrías que programar una función con los siguiente parámetros:

Function Public: of_DistinctValues

Argumentos : as_table: nombre de la tabla de la Base de Datos

As_column: columna de la Base de Datos

as_where: Where de la consulta Select

As_values: string array, referencia para obtener los distintos valores

Retorna : long - El SQLCode basado en el SQL fetch

Descripción: Retorna distintos valores de una base de Datos

long ll_rc
string ls_sqlstatement
string ls_value
string ls_name
// Consulta SELETC
ls_sqlstatement = "SELECT DISTINCT " + as_column + " FROM " + as_table + " WHERE " + as_column + " = " +as_where
// Ejecutamos SQL
prepare sqlsa from :ls_sqlstatement using this;
describe sqlsa into sqlda;
declare c_values_cursor dynamic cursor for sqlsa;
open dynamic c_values_cursor using descriptor sqlda;
fetch c_values_cursor using descriptor sqlda;
ll_rc = this.SQLCode
// Recuperamos los disctintos valores y los agregamos a un array
do while this.SQLCode = 0 
 choose case sqlda.OutParmType[1]
 case TypeString!
 ls_value = GetDynamicString (sqlda, 1)
 case TypeDate!
 ls_value = String (GetDynamicDate (sqlda, 1))
 case TypeTime!
 ls_value = String (GetDynamicTime (sqlda, 1))
 case TypeDateTime!
 ls_value = String (GetDynamicDateTime (sqlda, 1))
 case else
 ls_value = String (GetDynamicNumber (sqlda, 1))
 end choose
 as_values[UpperBound(as_values)+1] = ls_value
 fetch c_values_cursor using descriptor sqlda;
 ll_rc = this.SQLCode
loop
close c_values_cursor;
return ll_rc

Puedes identifica el tipo de dato de la columna del datawindow:

ls_type = dw_1.Describe(as_campo + ".ColType")

1.- Ahora en tu control singleLineEdit crear un evento de usuario con Event ID pbm_keyup o pbm_keydown; evento que se produce cuando el usuario presiona o deja de presionar una tecla en el control.

2.- Capturas el valor de singleLineEdit y llamas a la función of_DistinctValues() enviando los argumentos.

3.- Si es correcto obtienes el valor del array devuelto por la función y lo muestras en el sle seleccionando los caracteres con la función SelectText(start, longitud)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas