Power Builder - ID automatica

 
Vista:

ID automatica

Publicado por Ricardo Ríos (10 intervenciones) el 15/10/2006 23:31:54
Como se puede hacer para crear un contador, que casa vez que se le haga click al boton "agregar" aumente 1 y este quede grabado en la base de datos, y que no se pueda reemplazar, y cuando se cierre el programa y se vuelva a iniciar, este quede en el siguiente número del último que se guardo?? por favor cualquier respuesta haganmela saber urgente!
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:ID automatica

Publicado por Jesus (36 intervenciones) el 16/10/2006 00:38:06
Lo que puedes hacer es crear un tabla donde guardes parametros del sistema como nombre de la empresa etc. y ahi puedes poner un campo donde se guarde ese contador y cada vez q se haga click lo que puedes hacer es esto:

UPDATE PARAMETROS
SET contador = contador + 1;

COMMIT;

Bueno y cada vez q cargue el sistema puedes hacer el select a esta tabla y recuperar el valor y almacenarlo en una variable global.

SELECT contador
INTO :vgi_contador
FROM PARAMETROS;

Nos vemos suerte!!
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:ID automatica

Publicado por Jesus (36 intervenciones) el 16/10/2006 00:39:54
aunq si lo que quieres en autogenerar un codigo hay otra forma de hacer pero eso depende el tipo de dato q sea el codigo y el formato q uses en tus ID.
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:ID automatica

Publicado por Ricardo Ríos (10 intervenciones) el 16/10/2006 00:56:25
Es un ID de solicitud de tipo entero, cada vez que clickee este se me genere automaticamente, y no se me reescriba, como te dije que cuando finalice el programa este guarde el ultimo numero, y cuando lo vuelva a iniciar e introducir otra solicitud este me genere el numero de solicitud automaticamente, algo asi como se debe comportar un software con numero de facturas
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:ID automatica

Publicado por Ricardo Ríos (10 intervenciones) el 16/10/2006 01:55:54
Gracias por al respuesta Jesus pero no me sale bien el codigo, no se que es lo que pasara de todas maneras aqui esta lo que tengo hecho:

int n_solicitud,n_parroquia,usuarios,n_escuela,vgi_contador
date f_solicitud,f_asignada
string no_parroquia,no_escuela,observacion,direccion, atend
char ti_escuela,Turno


n_solicitud = integer(sle_20.text)
n_escuela = integer(sle_22.text)
n_parroquia = integer(sle_24.text)
usuarios = integer(sle_27.text)
no_escuela = trim(sle_23.text)
no_parroquia = trim(sle_25.text)
observacion = trim(sle_30.text)
direccion = trim(sle_26.text)
f_solicitud = date(sle_21.text)
f_asignada = date(sle_29.text)


If cbx_1.checked = TRUE and cbx_2.checked = FALSE then
Turno = "1"
elseif cbx_1.checked = TRUE and cbx_2.checked = TRUE then
Turno = "2"
elseif cbx_1.checked = FALSE and cbx_2.checked = TRUE then
Turno = "3"
else
MessageBox("Advertencia", "Ingrese aunque sea un turno")
return -1
end if

if rb_1.checked = TRUE then
ti_escuela = "1"
elseif rb_2.checked = TRUE then
ti_escuela = "2"
elseif rb_3.checked = TRUE then
ti_escuela = "3"
elseif rb_4.checked = TRUE then
ti_escuela = "4"
elseif rb_5.checked = TRUE then
ti_escuela = "5"
else
MessageBox("Advertencia", "Ingrese el tipo de escuela / prioridad")
return -1
end if

atend = "N"


if MessageBox("Verifique por favor", "¿Verifico que todos los datos son correctos?", Question!, YesNo!) = 1 then


INSERT INTO parroquias
(id_parroquia,
nombre_parroquia)
VALUES (:n_parroquia,
:no_parroquia);

commit;

INSERT INTO escuelas
(id_escuela,
nombre_escuela,
direccion_escuela,
tipo_escuela,
id_parroquia)
VALUES (:n_escuela,
:no_escuela,
:direccion,
:ti_escuela,
:n_parroquia);

commit;


INSERT INTO solicitud
(id_solicitud,
cantidad_usuarios,
turnomv,
fecha_asignada,
observaciones,
id_escuela,
atendido,
fecha_solicitud )
VALUES (:n_solicitud,
:usuarios,
:Turno,
:f_asignada,
:observacion,
:n_escuela,
:atend,
:f_solicitud);

commit;




else

MessageBox("Advertencia", "Por favor ingrese los datos correctos")

end if

sle_20.text = ""
sle_21.text = ""
sle_22.text = ""
sle_23.text = ""
sle_24.text = ""
sle_25.text = ""
sle_26.text = ""
sle_27.text = ""
sle_29.text = ""
sle_30.text = ""

rb_1.checked = FALSE
rb_2.checked = FALSE
rb_3.checked = FALSE
rb_4.checked = FALSE
rb_5.checked = FALSE

cbx_1.checked = FALSE
cbx_2.checked = FALSE

Lo que deseo es que el numero de solicitud (n_solicitud como variable, y id_solicitud como campo de la tabla solicitud) se genere automaticamente en vez de tenerlo que escribir, que funcione como un contador, y se guarde, y cuando se elabore otro ingreso sea automatico
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:ID automatica

Publicado por Jesus (36 intervenciones) el 16/10/2006 04:41:08
pero para ayudarte me podrias decir q guardas en id_solicitud? q tipo de dato es? char? numerico?
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

Tu codigo modificado para q autogenere

Publicado por Jesus (36 intervenciones) el 16/10/2006 05:00:59
Ricardo pega todo este codigo en reemplazo del q tienes, este esta moficado y aumentado para q autogeneres los codigos para tus 3 tablas, parroquias, escuelas y solicitud, hay codigo q esta comentado el cual ya no se utilizara. Revisalo y me cuentas q tal t fue.


int n_solicitud,n_parroquia,usuarios,n_escuela,vgi_contador
date f_solicitud,f_asignada
string no_parroquia,no_escuela,observacion,direccion, atend
char ti_escuela,Turno

//n_solicitud = integer(sle_20.text)
//n_escuela = integer(sle_22.text)
//n_parroquia = integer(sle_24.text)
usuarios = integer(sle_27.text)
no_escuela = trim(sle_23.text)
no_parroquia = trim(sle_25.text)
observacion = trim(sle_30.text)
direccion = trim(sle_26.text)
f_solicitud = date(sle_21.text)
f_asignada = date(sle_29.text)

If cbx_1.checked = TRUE and cbx_2.checked = FALSE then
Turno = "1"
elseif cbx_1.checked = TRUE and cbx_2.checked = TRUE then
Turno = "2"
elseif cbx_1.checked = FALSE and cbx_2.checked = TRUE then
Turno = "3"
else
MessageBox("Advertencia", "Ingrese aunque sea un turno")
return -1
end if

if rb_1.checked = TRUE then
ti_escuela = "1"
elseif rb_2.checked = TRUE then
ti_escuela = "2"
elseif rb_3.checked = TRUE then
ti_escuela = "3"
elseif rb_4.checked = TRUE then
ti_escuela = "4"
elseif rb_5.checked = TRUE then
ti_escuela = "5"
else
MessageBox("Advertencia", "Ingrese el tipo de escuela / prioridad")
return -1
end if

atend = "N"

if MessageBox("Verifique por favor", "¿Verifico que todos los datos son correctos?", Question!, YesNo!) = 1 then
//////////autogenera codifo de parroquias
SELECT MAX(id_parroquia)
INTO :n_parroquia
FROM parroquias;

IF n_parroquia = 0 THEN
n_parroquia = 1
else
n_parroquia = n_parroquia + 1
END IF

INSERT INTO parroquias
(id_parroquia,
nombre_parroquia)
VALUES (:n_parroquia,
:no_parroquia);
commit;

///////autogenera codifo de escuelas
SELECT MAX(id_escuela)
INTO :n_escuela
FROM escuelas;

IF n_escuela = 0 THEN
n_escuela = 1
else
n_escuela = n_escuela + 1
END IF

INSERT INTO escuelas
(id_escuela,
nombre_escuela,
direccion_escuela,
tipo_escuela,
id_parroquia)
VALUES (:n_escuela,
:no_escuela,
:direccion,
:ti_escuela,
:n_parroquia);
commit;

//autogenera codifo de solicitud
SELECT MAX(id_solicitud)
INTO :n_solicitud
FROM solicitud;

IF n_solicitud = 0 THEN
n_solicitud = 1
else
n_solicitud = n_solicitud + 1
END IF

INSERT INTO solicitud
(id_solicitud,
cantidad_usuarios,
turnomv,
fecha_asignada,
observaciones,
id_escuela,
atendido,
fecha_solicitud )
VALUES (:n_solicitud,
:usuarios,
:Turno,
:f_asignada,
:observacion,
:n_escuela,
:atend,
:f_solicitud);
commit;

else
MessageBox("Advertencia", "Por favor ingrese los datos correctos")
end if

//sle_20.text = ""
sle_21.text = ""
//sle_22.text = ""
sle_23.text = ""
//sle_24.text = ""
sle_25.text = ""
sle_26.text = ""
sle_27.text = ""
sle_29.text = ""
sle_30.text = ""

rb_1.checked = FALSE
rb_2.checked = FALSE
rb_3.checked = FALSE
rb_4.checked = FALSE
rb_5.checked = FALSE

cbx_1.checked = FALSE
cbx_2.checked = FALSE
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:Tu codigo modificado para q autogenere

Publicado por anonimo (6 intervenciones) el 16/10/2006 16:02:18
Puedes hacer lo siguiente dependiendo de los registros que almacenas en la tabla.
1. si tienes la opción de eliminar fisicamente el registro de la tabla sería recomendable que crees una tabla de autogenerados nombre_tabla,ultimo_codigo para evitar duplicidad en los códigos.
clientes 00020
empleados 00030

y cuando hagas un insert en tu tabla tambien tienes que hacer un update a la tabla autogenerados con la condicion del nombre de la tabla.
Insert into clientes(cod_cliente, nombre_cliente)
values('00001','no se mi nombre');
if sqlca.sqlcode = -1 then

2. si eliminas logicamente un registro de la tabla puedes hacer un select count(*)
ejemplo:
string ls_codigo
double ldbl_reg
select count(*) Into :ldbl_reg from clientes;
ls_codigo = string(ldbl_reg + 1,"0000")

sle_1.text = ls_codigo
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:Tu codigo modificado para q autogenere

Publicado por Ricardo Ríos (10 intervenciones) el 16/10/2006 18:18:27
Gracias amigo, pero la respuesta de Jesus me fue mas facil entenderla, jeje, soy nivel prinicipiante en este lenguaje pero veo que es muy completo en abse de datos, sobre todo en lo poderosas que son las consultas y lo facil que se hacen. Gracias por tu ayuda igual.

Solo que en el codigo que me dio Jesus, me gustaria dejar los campos de id de parroquia y escuela que lo ingrese el usuario y bloquear la edicion del campo de nombre y escuela para que no se puedan editar y muestre el nombre de ambos campos si esos id existen y si no que el usuario los ingrese, aqui les doy un ejemplo en pseudocodigo porque no se como hacerlo aun en PowerBuilder, y esta es una idea que tengo para escuela, tambien deseo hacer lo mismo con las parroquias, si falta algo o no es asi haganmelo saber por favor, gracias

sle_2.text = id_esc

SELECT id_escuela
INTO :id_esc
FROM escuelas
WHERE id_escuela = :id_esc

Si el SELECT encontro el valor entonces

SELECT nombre_escuela
INTO :no_esc
FROM escuelas
WHERE id_escuela = :id_esc

sle_3.allowedit = FALSE // No estoy seguro si esto es asi
sle_3.text = no_esc

Si no lo encontro entonces

Messagebox("Advertencia","Por Favor ingrese el nombre de la parroquia")
sle_3.allowedit = TRUE
no_esc = trim(sle_3.text)

Finalizar si
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:Tu codigo modificado para q autogenere

Publicado por Jesus (36 intervenciones) el 16/10/2006 22:25:31
integer id_esc
string no_esc

id_esc = integer(sle_2.text)

SELECT nombre_escuela
INTO :no_esc
FROM escuelas
WHERE id_escuela = :id_esc;

if TRIM(no_esc) = '' or isnull(no_esc) then
sle_3.enabled = false
sle_3.text = ''
Messagebox("Advertencia","Por Favor ingrese el nombre de la parroquia")
else
sle_3.enabled = true
sle_3.text = no_esc
end if

RECUERDA QUE CADA VEZ Q EN POWER BUILDER COLOQUES UNA SENTENCIA SQL SIEMPRE AL FINAL DE LA SENTENCIA VA EL PUNTO Y COMA CASO CONTRARIO SALDRA ERROR.

NOS VEMOS SUERTE.
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