Estimados Colegas
Tengo una aplicacion en red con un Twbrowse Maestro-detalle la cual
acceden varios usuarios a la vez como puedo hacer para optimizarla
Cuando el usuario navegue por el browse maestro, al otro usuario no
le aparezca fichero bloqueado por usuario
desde ya mucha gracias
Fabian
Databaselab2002@yahoo.com.ar
sele 15
USE ARTICULO alias articulo shared
if .not. neterr()
index on upper(articulo->descri) to articulo
set index to articulo
else
alert("archivo Bloqueado por otro usuario")
endif
REDEFINE LISTBOX oLbx FIELDS ;
ARTICULO->CODIGO,ARTICULO->DESCRI ,str(ARTICULO->PRECIO) ;
HEADER "CODIGO","Descripcion","Precio" ;
sizes 100,250,150 ;
ALIAS "articulo" ;
ID 199 OF ODLG ;
on change detail(olbx3)
Use garan2t alias garan2t shared
if .not. neterr()
INDEX ON (garan2t->codart) TO garan2t
SET INDEX TO garan2t
else
Alert("Archivo Bloqueado por otro usuario")
ENDIF
REDEFINE LISTBOX oLbx3 FIELDS ;
garan2t->codart,garan2t->DENOMI,Str(garan2t->pventa);
HEADER "Codigo","Articulo","Precio Venta" ;
sizes 150,150,150 ;
alias "garan2t";
ID 77 OF ODLG
Function Detail(olbx3)
Local xxXX
Store articulo->garantia to xxXX
Use garan2T
if .not. neterr()
set filter to garan2T->codgar=xxXX
olbx3:refresh()
else
alert("Archivo Bloqueado Por uusuario",,"Red")
endif
Consulta Twbrowse Maestro-Detalle en Red
-
- Posts: 142
- Joined: Sun Oct 09, 2005 1:36 am
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
Hola Fabian
Un par de observaciones que veo :
- Estas intentando abrir el mismo archivo 2 veces (garan2T) primero compartido y despues exclusivo, no entiendo la razon.
Porque precisamente en ese momento es que sucede lo que comentas
- Porque no usas una base temporal o un arreglo para el detalle
He usado esto en varios browses como el que indicas y no he tenido problema alguno.
Saludos
Un par de observaciones que veo :
- Estas intentando abrir el mismo archivo 2 veces (garan2T) primero compartido y despues exclusivo, no entiendo la razon.
Porque precisamente en ese momento es que sucede lo que comentas
- Porque no usas una base temporal o un arreglo para el detalle
He usado esto en varios browses como el que indicas y no he tenido problema alguno.
Saludos
FWH 10.6 + xHarbour + Borland 582
Matando pulgas a cañonazos......
Mas rapido y mas facil
1) no creo que tengas necesidad de crear el indice cada vez que entres a consultar, los indices no se tienen que estar creando a cada momento, se crean una vez y se reconstruyen hasta que fallan.
2) utiliza un scope, asi cada vez que te muevas en la base de datos padre, haces un scope en la base de datos hija y funciona como una bala.
[/list][/code]
Mas rapido y mas facil
1) no creo que tengas necesidad de crear el indice cada vez que entres a consultar, los indices no se tienen que estar creando a cada momento, se crean una vez y se reconstruyen hasta que fallan.
2) utiliza un scope, asi cada vez que te muevas en la base de datos padre, haces un scope en la base de datos hija y funciona como una bala.
Code: Select all
USE ARTICULO shared new
set index to articulo
USE garantt shared new
set index to garan2t
REDEFINE LISTBOX oLbx...... ON CHANGE (garan2t->(QuickScope(articulo->codigo), oLbx3:Refresh())
.....
REDEFINE LISTBOX oLbx3 Fields...... blha blha bla
REturn.
/***************************
mi mundialmente famosa funcion QuickScope
(c) 1996-2006 google
Parametros:
<cTop>: valor superior del scope
<cBottom>: valor inferior del scope
Notas:
1) ambos valores son opcionales, si se omiten el scope se elimina y se
retorna la base de datos al estado original
2) si se omite el segundo valor, toma por omision el valor del primero, esto hara un filtro dentro un rango determinado de datos
3) funciona solo con indices CDX en Clipper, y con NTX y CDX en harbour
*********************************/
Function QuickScope(cTop,cBottom)
DEFAULT cTop := NIL
DEFAULT cBottom cTop
OrdScope(0,cTop)
OrdScope(1,cBottom)
DBGOTOP()
RETURN
Saludos
R.F.
R.F.