Consulta Twbrowse Maestro-Detalle en Red

Post Reply
Databaselab2002
Posts: 142
Joined: Sun Oct 09, 2005 1:36 am

Consulta Twbrowse Maestro-Detalle en Red

Post by Databaselab2002 »

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
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

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
FWH 10.6 + xHarbour + Borland 582
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.

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
[/list][/code]
Saludos
R.F.
Post Reply