Hola
Como están espero que muy bien
tengo la siguiente pregunta
como debo manejar la edición de datos directamente en un xbrowse en RED
Gracias por adelantado
Saluditos
RodolfoRBG wrote:Hola Aida,
... lo importante es abrir los archivos preparados para ser usados red. Esto es, abrirlos con un alias diferente y ...
I:=0 ; Archivo:="ANIMALES.DBF" ; NomArch:="ANIMALES" ; AliasAA:=""
DO WHILE .T.
I+=1 ; DBSELECTAREA(I) //Se posiciona en el area correspondiente
IF EMPTY(ALIAS()) //Si esta vacia
AliasAA:=NomArch+STRZERO(I,3,0) ; EXIT //Al nombre del archivo le agrega el numero del area disponible
ENDIF
ENDDO
//DBUSEAREA(lNuevaArea,cDriver,cNombre,cAlias ,lShared,lReadOnly)
DBUSEAREA (.T. , ,Archivo,AliasAA,.T. ,.F. )
local cTrabajos:=cGetNewAlias('travva')
if lChDir(cCarpetaInstalacion) .and. file(".\DBF's\TRABAJOS.DBF")
use ".\DBF's\TRABAJOS.DBF" shared new alias (cTrabajos)
(cTrabajos)->(ordsetfocus(1) , dbgotop())
else
msginfo("Lo siento, no puedo acceder al directorio de trabajo")
return nil
endif
MarioG wrote:RodolfoRBG wrote:Hola Aida,
... lo importante es abrir los archivos preparados para ser usados red. Esto es, abrirlos con un alias diferente y ...
Rodolfo;
y como determino, desde una 2da PC que una DBF ya está abierta y quiero asignarle un nuevo Alias?
Consulto con Used() y Select() (desde una 2da PC, estando la 1ra con la app en ejecución) pero me duvelve el mismo Alias (y Select) que la primera
La consulta la hago inmediatamente luego del USE...SHARED
gracias
USE MiDBF //Abres tu DBF
DATABASE oDBF //Creas el objeto
oDBF:DBRLOCK() //Bloqueas el registro que vas a trabajar para que nadie mas lo pueda usar
oDBF:LOAD() //Pasa todos los campos al objeto oDBF
oDBF:Clave:="001" //Le asignas un valor temporal al campo MiDBF->Clave
oDBF:Descripcion:="Articulo 1" //Le asignas un valor temporal al campo MiDBF->Descripcion
oDBF:SAVE() //Al final pasa el contenido de oDBF:Clave y oDBF:Descripcion a MiDBF->Clave y MiDBF->Descripcion
oDBF:DBRUNLOCK() //Desbloqueas el registro para que ya lo puedan usar otros
rolando wrote:Hola,
Como decimos por acá: "meto la cuchara".
Utilizo, desde que lo vi en algún post, la función cGetNewAlias() que cada vez que se pasa por la apertura le asigna un nuevo valor al alias. En el caso del ejemplo será travva00, travva01, etc.
También, desde que me lo indicó Antonio, uso la clase Tdatabase lo cual simplifica mucho la programación (por lo menos para mi) porque además de tratar a la DBF como un objeto, se encarga de los bloqueos ella misma (aunque pueden ser incluidos por uno también).
Ejemplo de cGetNewAlias():
- Code: Select all Expand view RUN
local cTrabajos:=cGetNewAlias('travva')
if lChDir(cCarpetaInstalacion) .and. file(".\DBF's\TRABAJOS.DBF")
use ".\DBF's\TRABAJOS.DBF" shared new alias (cTrabajos)
(cTrabajos)->(ordsetfocus(1) , dbgotop())
else
msginfo("Lo siento, no puedo acceder al directorio de trabajo")
return nil
endif
Saludos.
Rolando
//
// Ejemplo para Aida
//
// se puede ver el uso primitivo de la TDatabase (oBrw:setodbf(oDbf))
//
// y también el uso del cGetNewAlias (coloco el cAlias en el title de la ventana)
//
#include "Fivewin.ch"
Function Main()
public oWnd
Define window oWnd ;
from 50,50 to 700,1100 pixel;
menu Buildmenu();
title "Sample para Aida";
mdi
Activate window oWnd
Return nil
//---------------------------------------------------------------------------
Function Buildmenu()
local oMenu, oAbrir
menu oMenu 2007
menuitem "Abrir" message 'Abrir un nuevo browse'
menu
menuitem oAbrir prompt '&Abrir un xBrowse' action Hojear() ;
message "Hojear "
endmenu
endmenu
Return oMenu
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
Function Hojear()
local cAlias:=cGetNewAlias('Sample')
local oChild, oBrw, oDbf
use "customer" shared new alias (cAlias)
database oDbf
Define window oChild title "Usando cGetNewAlias, el cAlias es "+cAlias mdichild of oWnd
oBrw := TXBrowse():New( oChild )
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .t.
oBrw:setoDbf(oDbf)
oBrw:CreateFromCode()
oChild:oClient := oBrw
Activate window oChild on init oBrw:setfocus() valid (oDbf:close() , .t.)
Return nil
//---------------------------------------------------------------------------------------------------
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 54 guests