Sábado 21 de Diciembre de 2024, 09:58
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Power Builder
(Moderador:
F_Tanori
) »
Autollenar Campos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Autollenar Campos (Leído 3280 veces)
Aristj
Nuevo Miembro
Mensajes: 11
Autollenar Campos
«
en:
Jueves 25 de Mayo de 2006, 23:47 »
0
Hola a todos y gracias por su ayuda, tengo una tabla pedidos y quiero que en un dataw cuando capture la informacion me traiga los demas campos, ejemplo:digito en idpedido - 1cc -, el sistema me llena los campos : descripcion, valor, etc...
Tweet
pierpiter
Miembro activo
Mensajes: 58
Re: Autollenar Campos
«
Respuesta #1 en:
Viernes 26 de Mayo de 2006, 15:51 »
0
Buenas, acá te prepare un ejemplo, esta hecho en power 9 (no se que versión estarás usando).
Lo primero que tenés que hacer es crear la datawindows y agregarle un nuevo evento. En ese nuevo evento le vas a tener que pegar el código que te pongo abajo. El nuevo evento tiene que ser pbm_dwnprocessenter. Esto define un evento para cuando se presiona enter en alguno de los campos de la datawindows.
Código para pegar en ese nuevo evento:
Código: Text
// Definición de variables
// ambito|tipo_nombre
// ejemplo: local|integer_numcolumna quedaría definida como:
// li_numcolumna
string ls_nombre
string ls_apellido
string ls_cuit
integer li_numcol
long ll_id
long ll_numfila
// Extraígo el número de columna en la que estoy posicionado.
li_numcol = this.getcolumn()
//messagebox('Nro. Columna',string(li_numcol))
if li_numcol = 1 then
// Averiguo la línea en la que estoy parado.
ll_numfila = this.getrow()
// Extraígo el código ingresado.
ll_id = this.getitemdecimal(ll_numfila,1)
// Hago el select para recuperar el dato.
select nombre, apellido, cuit
into :ls_nombre, :ls_apellido, :ls_cuit
from tblpersonas
where id = :ll_id;
// Inserto en el dw los datos.
this.setitem(ll_numfila, 2, ls_nombre)
this.setitem(ll_numfila, 3, ls_apellido)
this.setitem(ll_numfila, 4, ls_cuit)
end if
El código se puede optimizar muchísimo, lo hice rápido por que estoy en el trabajo jejeje. Cualquier consulta o algo que no entiendas preguntame, no hay problema.
Obviamente el select lo vas a tener que cambiar y lo mismo para las líneas que insertan dentro de la datawindow "this.setitem(ll_numfila, 2, ls_nombre)" el número corresponde al número de columna donde querés ingresar el dato, "ll_numfila" es el número de fila donde se va a insertar el dato, "ls_nombre" es la variable que contiene el dato.
Otra cosa a tener en cuenta es el tipo de datos que vas a usar (los que tenes en la base de datos).
Bueno, cualquier cosita avisa, saludos.
Aristj
Nuevo Miembro
Mensajes: 11
Re: Autollenar Campos
«
Respuesta #2 en:
Martes 30 de Mayo de 2006, 19:35 »
0
muchas gracias por tu ayuda y tu interes.....creo que no pregunte bien...tengo 2 tablas: clientes y productos.. ahora necesito un datawindow en donde pongo el id del cliente y el me llena los campos nombre, apellido, direccion tel,,,etc,, ahora en el mismo datawindow en otro campo pongo el id del producto y sitema me trae: descripcion, unidad, valor...etc...
y tambien me gustaria que me explicaras tu codigo para que caso funcionaría...
muchas gracias,,,
pierpiter
Miembro activo
Mensajes: 58
Re: Autollenar Campos
«
Respuesta #3 en:
Miércoles 31 de Mayo de 2006, 19:12 »
0
Bueno, vamos a ver si entendí bien:
Podés usar el código que te pase para llenar los campos que vos querés del datawindow. Primero llenarías los del cliente con todos sus datos personales y luego, cuando ingresas el id del producto llenas los demás campos.
Para la primera parte:
Código: Text
// Extraígo el número de columna en la que estoy posicionado.
li_numcol = this.getcolumn()
//messagebox('Nro. Columna',string(li_numcol))
if li_numcol = 1 then
...
Al estar definido el evento cuando presionas 'enter', siempre que se presione enter se ejecuta este código, por eso es que extraígo el número de columna en la que estoy parado (la actual en la que se presiono enter) y pregunto si esa es la 1, porque solo quiero ejecutar el código cuando estoy en la columna 1. No me interesa que se ejecute cuando estoy en las demás columnas.
La columna depende de cual quieras que sea donde ingresas el id del cliente por ejemplo. Si el id del cliente lo ingresas en la columna 4 del datawindow entonces en el if tendrías que preguntar por li_numcol = 4 y ahí adentro ejecutar todo el código para traer los datos de la base (el select) e insertar los datos en el datawindow (this.setitem = ....)
Los parámetros que recibe la función 'setitem' son:
setitem(numfila, columna, dato)
-- numfila --> es el número de fila en la que quiero ingresar el dato (como queremos que sea en la misma, primero extraígo en que línea estoy parado y lo guardo en un variable para poder pasarle a la función este dato).
-- columna --> es el número de columna en la que quiero ingresar el dato, esto depende de en que número de columna tengas cada dato a ingresar.
-- dato --> es el dato que queremos ingresar. Hay que tener cuidado con el tipo de datos, porque te va a dar error si queres meter un dato string en un campo que esta definido como integer en el datawindow.
Bueno, para la segunda parte tendrías que usar la misma lógica pero para llenar los campos que querés con la descripción del producto. Tendrías que agregar un if para preguntar por la columna en la que esta el id del producto, hacer el select con los datos que necesitas y luego insertar los datos en el datawindow. O sea que tendrías dos códigos como el que te pase dentro del mismo evento.
Cualquier cosita preguntame, no hay problema.
Saludos.
Aristj
Nuevo Miembro
Mensajes: 11
Re: Autollenar Campos
«
Respuesta #4 en:
Domingo 4 de Junio de 2006, 18:11 »
0
OK..............FUNCIONO....solo que dandole dos veces enter,,,,
......
pero ahora como hago el sql select con las tablas involucradas...
...por favor otra ayudita...
Muchas gracias ..
pierpiter
Miembro activo
Mensajes: 58
Re: Autollenar Campos
«
Respuesta #5 en:
Lunes 5 de Junio de 2006, 15:56 »
0
Hola, me alegro que haya funcionado, aunque sea con dos veces enter... raro.
En cuanto al sql, depende de que tablas tengas y como levantar los datos. El select lo ponés directamente en el código (como esta en el ejemplo de arriba), dentro del select le asignas las variables que van a contener el dato devuelto y asignas esas variables a los campos del datawindow.
Código: Text
// Hago el select para recuperar el dato.
select nombre, apellido, cuit
into :ls_nombre, :ls_apellido, :ls_cuit
from tblpersonas
where id = :ll_id;
En ese select lo que hago es seleccionar el nombre, apellido y cuit de la tabla tblpersonas, donde el id de la persona sea igual al id que levante anteriormente del datawindow. El resultado de cada campo de ese select se va a guardar en :ls_nombre, :ls_apellido, :ls_cuit (la clausula "INTO" le indica que meta el resultado en esas variables).
El resultado tiene que ser único, porque sino, te va a dar un error porque el select retorna más de una fila.
Después tendras que hacer validaciones sobre las variables, como por ejemplo el dato que devuelve, que no sea vacio... etc.
Cualquier cosita, ya sabés, pregunta que no hay drama, saludos.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Power Builder
(Moderador:
F_Tanori
) »
Autollenar Campos