Programa en RED

07/10/2004 - 19:32 por Javier Parada | Informe spam
Que tal amigos, hace un rato que no andaba por aqui, espero que esten
bien..

He programado, pero cuando se trata de hacer programas en red batallo, ya
que tengo dudas acerca de este tema, por ejemplo regularmente hago mi form
"clientes" por ejemplo, y este al ejecutarlo esta en blanco el espacio
para poner la clave, si no existe dar alta , si existe desplegar y
permitir modificaciones, bien todos sabemos eso, pero que pasa cuando es
en red y dos o mas usuarios dan una alta con la misma clave, como es
posible validar esto, otra forma es no permitir que el usuario capture la
clave de alta y asignarsela automaticamente, pero entonces si el usuario
quiere consultar, hay que hacer otro form ???, este tema es rebuscado para
mi a pesar de que ya he programado, si alguien me puede apoyar con alguna
forma de hacer bien las cosas, pero sin limitar al usuario se lo agradezco
bastante.

Saludos Amigos...



-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa

Preguntas similare

Leer las respuestas

#1 Jorge Diaz\(El Salvador\)
08/10/2004 - 01:04 | Informe spam
para poner la clave, si no existe dar alta , si existe desplegar y
permitir modificaciones, bien todos sabemos eso, pero que pasa cuando es
en red y dos o mas usuarios dan una alta con la misma clave, como es



En mi caso al generar consecutivos en mis programas manejo un dbf en el que
voy guardando el ultimo consecutivo generado, de esta forma cuando el
usuario va a generar un nuevo cliente, por ejemplo, le asigno una clave
temporal y al momento de guardar el nuevo cliente, voy a "recoger" el ultimo
consecutivo en la tabla y sustituyo el temporal y luego aplico los cambios
para guardar el registro.

Saludos
Respuesta Responder a este mensaje
#2 Juan
11/10/2004 - 18:30 | Informe spam
hola, espero poder ayudarte...

a veces como programadores nos complicamos profundizando mucho en los
problemas como este, si tu duda es "que hacer cuando dos o mas usuarios
esten dando de alta varios registros con el mismop numero de
identificasion", porque no revisas si ya existe el codigo al momento en que
el usuario ingresa el id. y tambien revisar si ya lo han agregado antes del
procedimiento de almacenar, osea revisar dos veces...?

otra forma podria ser, definir correlativos diferentes para cada maquina...
osea: para el usuario uno, comensar con el correlativo A10001, A10002, Etc.
para el usuario dos B10001, B0002, etc, para el usuario cuatro C10001,
C10002, etc.

saludos

Javier Parada" escribió en el mensaje
news:
Que tal amigos, hace un rato que no andaba por aqui, espero que esten
bien..

He programado, pero cuando se trata de hacer programas en red batallo, ya
que tengo dudas acerca de este tema, por ejemplo regularmente hago mi form
"clientes" por ejemplo, y este al ejecutarlo esta en blanco el espacio
para poner la clave, si no existe dar alta , si existe desplegar y
permitir modificaciones, bien todos sabemos eso, pero que pasa cuando es
en red y dos o mas usuarios dan una alta con la misma clave, como es
posible validar esto, otra forma es no permitir que el usuario capture la
clave de alta y asignarsela automaticamente, pero entonces si el usuario
quiere consultar, hay que hacer otro form ???, este tema es rebuscado para
mi a pesar de que ya he programado, si alguien me puede apoyar con alguna
forma de hacer bien las cosas, pero sin limitar al usuario se lo agradezco
bastante.

Saludos Amigos...




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#3 Juan Carlos Flores
13/10/2004 - 16:12 | Informe spam
Javier...

Ese ha sido un tema bastante amplio en estos foros, algunos opinan que se le
asigne el correlativo al grabar, otros que se asigne un correlativo temporal
y se verifique al grabar para establecer modificaciones, ambas a mi no me
parecen porque el usuario no tiene "conciencia" del numero de docto que esta
creando, otra es que se asignen cierta cantidad o bloques de numeros por
usuario, para que cada uno maneje sus correlativos, tampoco me gusta porque
eso limita a quienes son los que usaran los correlativos y puede suceder que
no usen con la misma frecuencia los correlativos por lo que los numeros
seran muy mal en tu tabla.

Despues de verme con esas situaciones decidí para mi propia complacencia que
los usuarios tomaran los correlativos de acuerdo a la disponibilidad y que
los "declararan" como en uso, para que otro no los tomara, aun sin haberlo
grabado, sin embargo si el usuario decide cancelar el docto, pues que
declare que el numero correlativo tomado "ya no lo necesita", asi otro
usuarioi puede tomarlo para evitar el hueco en la tabla.

Tengo bastante rato de usar ese sistema en un soft de control de inventarios
y me ha resultado muy comodo.

Aca te pongo el codigo que por cierto lo acabo de poner dos veces en el foro
de VFP-General

************************************
*Function NuevoDocto
************************************
* Parametros
* lcVistaMadre: Es una vista o cursor con el calculo del valor maximo del
campo por el cual se desea
* establecer el correlativo, puede ser una vista o un cursor, con una
instruccion tal como
* Create SQLView v_MaxFact as Select Max(NumeFact) as MaxFact from Facturas
*
* El parametro lcCorrTabla, es la tabla que controla los numeros asignados a
los usuarios y de donde
* se revisara, tomara y/o guardar el numero correlativo que se nos asigne.
Consta de tres campos
* Usuario c(10), Docto c(10) y Uso c(2). El ancho de los campos se puede
hacer a gusto y necesidad.

* Uso de la funcion
* lcNuevoCorrelativo=NuevoDocto('V_MaxFact', 'Corr_Facts')
***************************************************************
Function NuevoDocto
LPARAMETERS lcVistaMadre, lcCorrTabla

LOCAL lcDocto, lcNuevoDocto, lcNumero, ;
lcUser, lcCorr, lcCorr1, lcCorr2, lnReg

lcUser=SUBSTR(SYS(0),1,10) && Tomo como usuario la maquina del usuario.

REQUERY(lcVistaMadre) && En el caso de usar una vista.

*** Calculo de Nuevo Correlativo
SELECT (lcCorrTabla)
LOCATE FOR User=lcUser AND Uso='SI'
IF FOUND()
lcNuevoDocto=Docto
Replace Uso WITH 'SI'
ELSE
CALCULATE MIN(Docto) FOR Uso='NO' TO lcCorr
IF VAL(lcCorr)>0
GO top
LOCATE FOR Docto=lcCorr
lcNuevoDocto=Docto
Replace Uso WITH 'SI'
ELSE
CALCULATE MAX(Docto) FOR Uso='SI' TO lcCorr1
IF VAL(lcCorr1)=0
SELECT (lcVistaMadre)
lcCorr=MaxNumero
ELSE
SELECT (lcVistaMadre)
lcCorr2=MaxNumero
IF VAL(lcCorr1) > VAL(lcCorr2)
lcCorr=lcCorr1
ELSE
lcCorr=lcCorr2
ENDIF
ENDIF
lcCorr=VAL(lcCorr)
lcCorr=lcCorr+1

***** Esta parte es si tienes una tabla que guarda el numero inicial de
correlativo despues de un cierre de año
* IF lcCorr=1
* USE data\confcorr IN 0
* lcCorr=VAL(confcorr.Facts)
* USE IN ConfCorr
*ENDIF
****
lcNuevoDocto=PADL(ALLTRIM(STR(lcCorr)), 10, '0')
SELECT (lcCorrTabla)
SET DELETED off
SET FILTER TO DELETED()
COUNT TO lnReg
IF lnReg>1
GO top
replace User WITH lcUser
Replace Docto WITH lcNuevoDocto
Replace Uso WITH 'SI'
RECALL
SET DELETED on
SET FILTER TO
ELSE
SET DELETED on
SET FILTER TO
INSERT INTO (lcCorrTabla) (User, Docto, Uso);
VALUES (lcUser, lcNuevoDocto, 'SI')
Endif
Endif
ENDIF
RETURN lcNuevoDocto
**************************************

Esto debes acompañarlo de que cada vez que grabes el docto, pues debes d
eborrar el registro en la tabla de correlativos correspondiente al mismo
numero de correlativo.

Select Corr_Facts
Delete for Docto=Thisform.txtNumeFact.Value && Por ejemplo

Y si abandonas la operacion sin grabar el documento, pues debes de liberar
el numero que te habis sido asignado para que otro usuario pueda tomarlo.

Select Corr_Facts
Replace Uso with "NO" for Docto=Thisform.txtNumeFact.Value && Por ejemplo


Por razones que no recuerdo, no me fue posible usar valores boleanos en el
campo USO y lo hice con caracteres y la palabra SI o NO en vez de .t. o .f..

Espero que te sirva y que le sirva a alguien mas, pueden disponer del codigo
cualquiera que lo necesite.

Saludos.

Juan Carlos Flores
Cholutexas - Honduras




"Javier Parada" escribió en el mensaje
news:
Que tal amigos, hace un rato que no andaba por aqui, espero que esten
bien..

He programado, pero cuando se trata de hacer programas en red batallo, ya
que tengo dudas acerca de este tema, por ejemplo regularmente hago mi form
"clientes" por ejemplo, y este al ejecutarlo esta en blanco el espacio
para poner la clave, si no existe dar alta , si existe desplegar y
permitir modificaciones, bien todos sabemos eso, pero que pasa cuando es
en red y dos o mas usuarios dan una alta con la misma clave, como es
posible validar esto, otra forma es no permitir que el usuario capture la
clave de alta y asignarsela automaticamente, pero entonces si el usuario
quiere consultar, hay que hacer otro form ???, este tema es rebuscado para
mi a pesar de que ya he programado, si alguien me puede apoyar con alguna
forma de hacer bien las cosas, pero sin limitar al usuario se lo agradezco
bastante.

Saludos Amigos...




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#4 Javier Parada
14/10/2004 - 06:20 | Informe spam
Muchas Gracias Juan Carlos, por contestar con detalle a mi pregunta voy a
echarle un ojo al código que expones, pues ese siempre ha sido un tema que
se me dificulta aparte de otros.

Gracias...

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida