Power Builder - Ayuda con este problema

   
Vista:

Ayuda con este problema

Publicado por Hector (27 intervenciones) el 25/09/2017 19:50:14
Hola ¿qué tal?
Tengo un problema en la BD, en el área de contabilidad y en el área de venta tienen acceso al mismo sistema para hacer ventas y poner las variables. Como puedo poner en mi formulario del PB (versión 9) y en el Sql Server que el personal de contabilidad esta usando esa tabla y que el de venta no puede registrar aún, hasta que salga el de venta.

Espero que me puedan ayudar. 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
Imágen de perfil de Leonardo Daniel A.

Ayuda con este problema

Publicado por Leonardo Daniel A. (221 intervenciones) el 26/09/2017 05:54:44
Hola, agregale un campo extra que se llame por ejemplo en_contabilidad char(1)


cuando abran la ventana en contabilidad inmediatamente actualizas la tabla con
update tabla set en_contabilidad = "S" where id:_registro =10 ;

y al terminar, ya sea cancelar o guardar, cerrar en contabilidad
update tabla set en_contabilidad = "N" where id:_registro =10 ;


y en la ventana de ventas, al tratar de abrir ese registro deberas verificar que no este ocupado

1
2
3
4
5
6
7
string ls_dato
select en_contabilidad into :ls_dato from tabla where id:_registro =10 ;
 
if ls_dato = "S" then
   mensaje "No puedes editar porque esta siendo usado en contabilidad"
   return
end if
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

Ayuda con este problema

Publicado por Hector (27 intervenciones) el 26/09/2017 17:22:21
Ya le agregue a mi tabla lo que me dijiste, ahora eso del update table set en que parte iría, en el mismo SQL Server? y lo del string lo copio pero me sale error y eso lo del cuadro va en el mismo Power Builder o va en el sql también?
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
Imágen de perfil de Leonardo Daniel A.

Ayuda con este problema

Publicado por Leonardo Daniel A. (221 intervenciones) el 27/09/2017 08:01:36
el update va en donde consultas ese registro... debes sacar su id, o llave primaria para usarlo en el where.... y van en la ventana de contabilidad


en la ventana de ventas, el select con el if van donde mandas consultar ese registro



veo que no tienes experiencia en PB.... te recomiendo que hagas un video tutorial, hay varios en youtube... porque asi no entendiste lo que dije y es muy facil...no me lo tomes a mal
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

Ayuda con este problema

Publicado por Hector (27 intervenciones) el 29/09/2017 22:13:34
Si Leonardo mi experiencia en programación es muy baja ya que en institutos me enseñaban poco hace años pero ahora retomo la programación y lo hago con fuerza, ya estoy practicando en el trabajo, lo que más sé es Visual Basic me guío por lo que hacen otros y se me graban los códigos, aún me falta mucho y sigo estudiando, no lo tomo nada a mal, más bien me das un empujón que me sirve de mucho. Gracias.
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
Imágen de perfil de Eduardo

Ayuda con este problema

Publicado por Eduardo (34 intervenciones) el 27/09/2017 08:46:42
Hola lo que te comenta Leonardo es una opción para salir del paso pero es una modificación que se tiene que realizar en las aplicaciones de todos los departamentos que tienen acceso a la tabla que te interesa y además si se produce una rotura de la aplicación y se queda el registro en_contabilidad = "S" nunca podrás entrar hasta que quites la marca u otro usuario entre y salga correctamente.

Creo que lo mejor es comprobar si el registro que intentas editar está bloqueado para su edición intentando realizar un update de un campo de la tabla por su mismo valor y realizando re-intentos, mira el siguiente seudocódigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Do While True
    If luo_TR.ExecuteSQL( "UPDATE TABLA SET CAMPO=CAMPO WHERE CAMPO=VALOR", not THIS.E_Commit ) Then
        lb_Return = True
        Exit
    End If
    Choose Case ll_TSecondRelay
        Case 0	// Intentando un bloqueo inmediato
            Exit
        Case IS > 0
            ls_cadena = 'Intentando un bloqueo durante'
            w_Frame.dw_StatusBar2.SetText(	ls_cadena + ' ' + String( ll_TSecondRelay ) + ' seg.' + THIS.E_LF + &
                                        'Faltan ' + String( SecondsAfter( DB.time(), lt_TimeEnd ) ) + ' seg.' + THIS.E_LF + &
                                        'RLock: ' + ls_Select )	// Message
            w_Frame.dw_StatusBar2.Show()
            If DB.time() > lt_TimeEnd Then	Exit
        Case IS < 0
            ls_cadena = 'Reintentando un bloqueo hasta conseguirlo.'
            w_Frame.dw_StatusBar2.SetText( ls_cadena )	// Message
            w_Frame.dw_StatusBar2.Show()
    End Choose
    Yield()
Loop
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

Ayuda con este problema

Publicado por Hector (27 intervenciones) el 29/09/2017 22:20:58
Wow son muchos códigos que algunos los entiendo y otros no, de verdad mi nivel es bajisimo en la programación y peor que me están haciendo trabajar con PB cuando yo hago un poco de VBasic, lo que yo hice en mi SQL Server es esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
CREATE DATABASE PROYECTO
GO
 
USE PROYECTO
GO
 
CREATE TABLE TB_CATEGORIA
(
	IDCATEGORIA CHAR(5) PRIMARY KEY,
	NOMBRE VARCHAR(50)
)
GO
 
INSERT INTO TB_CATEGORIA VALUES (1,'LIMPIEZA')
GO
INSERT INTO TB_CATEGORIA VALUES (2,'COMPUTADORAS')
GO
 
CREATE PROC SP_REGCATEGORIA
	@IDCATEGORIA CHAR(5),
	@NOMBRE VARCHAR(50)
AS
BEGIN
INSERT INTO TB_CATEGORIA VALUES (@IDCATEGORIA,@NOMBRE)
END
GO
 
CREATE PROC SP_EDICATEGORIA
	@IDCATEGORIA CHAR(5),
	@NOMBRE VARCHAR(50)
AS
BEGIN
UPDATE TB_CATEGORIA SET IDCATEGORIA=@IDCATEGORIA, NOMBRE=@NOMBRE
END
GO
 
CREATE TABLE TB_PRODUCTO
(
	IDPRODUCTO CHAR(5) PRIMARY KEY,
	NOMBRE VARCHAR(50),
	IDCATEGORIA CHAR(5) FOREIGN KEY REFERENCES TB_CATEGORIA(IDCATEGORIA),
	STOCK NUMERIC(9,0)
)
GO
 
INSERT INTO TB_PRODUCTO VALUES (1,'MOUSE',2,50)
GO
 
 
CREATE TABLE TB_LOGIN
(
	USUARIO VARCHAR(20),
	PASSWORD VARCHAR(20),
	ESTADO CHAR(1)
)
GO
 
INSERT INTO TB_LOGIN VALUES ('SNAYDER',1234,0)
GO
 
CREATE PROC SP_LOGIN
	@USUARIO VARCHAR(20),
	@PASSWORD VARCHAR(20),
	@ESTADO CHAR(1)
AS
SELECT * FROM TB_LOGIN WHERE USUARIO='SNAYDER' AND PASSWORD=1234 AND ESTADO=0
GO

Lo ultimo del Login me recomendaron para saber quien esta conectado en el programa, cuando esta en 0 es porque esta desconectado y en 1 esta conectado... Pero me piden que cuando el administrador haga una consulta en el SQL en un campo que es "Estado" le salga 0 o 1 para no hacer ninguna modificación.
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
Revisar política de publicidad