Función en el Power Builder para generar automáticamente un código

Bueno lo que pretendo es que automáticamente se genere un numero osea el indice de mi tabla por ejemplo tabla "cliente" y en su campo "id_clie" incremente en 1 conforme ingrese la data, pero no lo quiero hacer desde el DBMS, osea SQL 2005 en incremente automatic, porque cuando pretendo hacer cambios después hay conflictos en el datawindow, lo que deseo es hacer una función en el mismo power builder y que automáticamente se autogenere el código, pero no se como poder hacerlo espero que me puedas ayudar y orientar desde ya

2 Respuestas

Respuesta
2
Lo que puedes hacer es lo siguiente, este código debes ponerlo a la hora de grabar la data.
Select Count(id_clie)
into : ll_cant
from cliente;
ll_cant = ll_cant + 1
Yo lo coloque así pero me sale error, en donde me estoy equivocando
-----------------------
integer ll_cant
tab_1.tabpage_2.dw_2.accepttext()
if tab_1.tabpage_2.dw_2.update( ) = 1 then
Select Count(id_clie)
into : ll_cant
from cliente;
ll_cant = ll_cant + 1
commit;
messagebox("Atencion","Se grabaron los datos con exito",information!)
else
rollback;
end if
-----------------
Revísalo please y si puedes me ayudas, bye y gracias
El error es que primero grabas y luego haces el incremento.
Lo que debes hacer es antes de grabar hacer el incremento y luego eso adicionarlo a tu dw, posteriormente grabarlo, ejm:
Select count(id_clie)
into :ll_cant
from cliente;
ll_cant = ll_cant + 1
tab_1.tabpage_2.dw_2.Setitem(numero_fila,"id_clie",ll_cant)
if tab_1.tabpage_2.dw_2.update( ) = - then
rollback;
else
commit;
messagebox("Atencion","Se grabaron los datos con exito",information!)
end if
Cualquier duda, solo pregunta
En esta parte del código a que te refieres con
Setitem(numero_fila,"id_clie",ll_cant)
pa' que me sirve la variable "numero_fila"
Que representa.
Numero_fila, quiere decir que pongas el nombre del campo donde deseas guardar el dato correlativo.
El dato correlativo es el campo "id_clie" este es el va cambiando (toma valores desde el 1 hasta n), para que colocar otra variable o podrías explicarme más específicamente por favor, te lo agradeceré.
Disculpa me confundí en la ultima respuesta.
Numero_fila viene hacer la fila en donde se encuentra el dw, es decir si ya tienes ingresado 5 registro y vas a ingresar el siguiente, entonces numero_fila, viene hacer el 6.
Para no confundirte mucho coloca de esta forma:
dw_1.Setitem(dw_1.GetRow(),"id_clie",ll_cant)
donde dw_1. GetRow(), tomará automáticamente la fila en la que se encuentra el dw.
Respuesta
No debería haber conflictos con el campo en automatic. Fíjate que tienes que indicar al campo como identity column en las update properties de la dw.
Esa es la manera más segura pero sino podrías:
Usar una tabla de últimos números y actualizarla con una función.
La tabla tiene esta estructura:
nom_tabla + numero
la fx hace:
select numero into ll_numero from xxx where nom_tabla = "";
update xxx set numero = ll_numero + 1 where nom_tabla = "";
return ll_numero +1;
Una consulta este código como es preferible hacerlo en una función aparte o colocarlo en el open de la ventana.
En una función aparte.
Después la llamas justo antes de guardar (después de todas las validaciones), sino cada vez que abren la ventana perdés un numero incluso si no guardan.
Aldob

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas