Clipper/FiveWin - MODI STRU

 
Vista:

MODI STRU

Publicado por pepelui (2 intervenciones) el 21/08/2007 04:45:12
necesito insertar un campo en una DBF pero necesito hacerlo desde un programa, no encuentro ningun ejemplo, como se hace?
es que es una gran cantidad de archivos (ctas. ctes. de clientes) y quisiera evitar hacerlo uno por uno con el dbu.
gracias.
pepelui
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

MODI STRU

Publicado por pepelui (2 intervenciones) el 21/08/2007 04:45:12
necesito insertar un campo en una DBF pero necesito hacerlo desde un programa, no encuentro ningun ejemplo, como se hace?
es que es una gran cantidad de archivos (ctas. ctes. de clientes) y quisiera evitar hacerlo uno por uno con el dbu.
gracias.
pepelui
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

RE:MODI STRU

Publicado por pepe (39 intervenciones) el 21/08/2007 08:31:29
Así puedes crear o modificar una BD :

// ---------------------------------------------------------------------------
// Funci¢n ....: CrearConceptos
// Descripci¢n : Creaci¢n fichero de base de datos e ¡ndice.
// ---------------------------------------------------------------------------
FUNCTION CrearConceptos()

? "* Creando fichero de Conceptos *"

dbCreate( "CONCEPTO", { { "CODIGO" , "C", 03, 0 }, ;
{ "DESCRIPCION" , "C", 40, 0 }, ;
{ "IMPORTE" , "N", 07, 0 } } )

use CONCEPTO
index on CODIGO to CONCEPTO // Creaci¢n .NTX
dbCloseAll()

RETURN Nil
// ---------------------------------------------------------------------------

Saludos
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

RE:MODI STRU

Publicado por juan carlos escobar (19 intervenciones) el 21/08/2007 17:19:08
prueba con esta funcion

Y=AGREGA_CAMPO("BASE1")
Y=AGREGA_CAMPO("BASE2")
... ETC


FUNCTION AGREGA_CAMPO
PARA MBASE
USE &mbase
COPY STRU EXTE TO t1
USE t1
APPE BLANK
** nombre del campo
REPLA FIELD_NAME WITH "CAMPO",FIELD_TYPE WITH "N",FIELD_LEN WITH 10,FIELD_DEC WITH 2
create t2 from t1
USE t2
APPE FROM &MBASE
copy to &mbase
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

RE:MODI STRU

Publicado por pepelui (1 intervención) el 22/08/2007 00:33:09
gracias!!!!!
funcionó perfecto.
un abrazo.
pepelui
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

RE:MODI STRU

Publicado por amauri (3 intervenciones) el 23/08/2007 21:53:05
faz o seguinte


#include "FiveWin.ch"
#include "FileIO.ch"

*****************************
FUNCTION E_IGUAL( A1 , A2 )
*****************************
//
// Compara duas matrizes verificando se todos os elementos sao iguais
//
LOCAL I
//
IF LEN( A1 ) != LEN( A2 )
RETURN .F.
ENDIF
FOR I:= 1 TO LEN(A1)
IF VALTYPE( A1[I] ) == "A"
IF ! E_IGUAL( A1[I] , A2[I] )
RETURN ( .F. )
ENDIF
ELSE
IF A1[I] != A2[I]
RETURN .F.
ENDIF
ENDIF
NEXT
RETURN ( .T. )

*************************
PROCEDURE AR_TRIM( A1 )
*************************
//
LOCAL I
//
FOR I:= 1 TO LEN(A1)
IF VALTYPE( A1[I] ) == "A"
AR_TRIM( A1[I] )
ELSEIF VALTYPE( A1[I] ) == "C"
A1[I] := ALLTRIM( A1[I] )
ENDIF
NEXT
RETURN

*****************************************
PROCEDURE MODISTRU( file , arq , cDirec)
*****************************************
//
// MODIFY SYTRUCT
//
local orig , Fname, Ftype, Arrblock, Block, Dummy, Pos, i, new_arq ,;
cAreafile , cAreanew
*
DBCLOSEALL()
*
file := UPPER(ALLTRIM(file))

IF VALTYPE(cDirec) <> "U"
cDirec := ALLTRIM(cDirec)
file := cDirec + file
new_arq:= cDirec + "NEW.DBF"
ELSE
new_arq:="NEW.DBF"
ENDIF

IF ! FILE( file + ".DBF" )
MsgStop( file + " Nao encontrado no pasta dados" ,"Erro na abertura dos dados")
QUIT
ENDIF
*
IF !NETUSE( file , .F. , 5)
MSGSTOP("Sistema em uso exclusivo no momento.","Atencao")
QUIT
ENDIF

orig := DBSTRUCT()
CLOSE DATA
*
AR_TRIM( orig ) // Estrutura antiga
AR_TRIM( arq ) // Estrutura nova
*
IF ! E_IGUAL( orig , arq )

* Se houve alteracao
MsgRun("ALTERANDO... " + file)

DBCREATE(new_arq , arq )
USE (new_arq)

cAreanew:=ALIAS(SELECT())

SELECT 0

IF ! NETUSE( file , .T. , 5)
MSGSTOP("Sistema em uso exclusivo no momento.","Atencao")
QUIT
ENDIF

cAreafile:=ALIAS(SELECT())

Arrblock := {}
FOR i:= 1 TO LEN(arq)
fname := arq[i,1]
ftype := arq[i,2]
Pos := ASCAN( orig , {|x| IF(x[1] == fname , .T. , .F. )} )
IF pos > 0
*
IF ftype == Orig[pos,2]
* Se de tipos iguais
*
/* Campo origem */
AADD(arrblock,{ fname,FIELDWBLOCK(fname,SELECT(cAreafile))})
ENDIF
*
ENDIF
NEXT

(cAreafile)->( DBGOTOP() )

WHILE !(cAreafile)->( EOF() )

(cAreanew)->( DBAPPEND() )

FOR i:= 1 TO LEN(arrblock)
fname := arrblock[i,1]
block := arrblock[i,2]
Dummy := (cAreafile)->(EVAL( block )) // Campo Origem
*
(cAreanew)->( EVAL( fieldblock(fname) , Dummy ) )
*
NEXT
*
(cAreafile)->( DBSKIP(+1) )
*
END

DBCLOSEALL()

FERASE(".\DADOS\" + file )

FRENAME(".\DADOS\" + new_arq ,".\DADOS\" + file )

FERASE(".\DADOS\*.CDX" )

ENDIF

DBCLOSEALL()

RETURN

///////////////////////////////////////////////////////////////
* NetUse( <cDatabase>, <lOpenMode>, <nWaitSeconds> ) --> lSuccess
* Attempt to USE a database file with optional retry

FUNCTION NETUSE( CDATABASE, LOPENMODE, NSECONDS )

LOCAL LFOREVER

LFOREVER = (NSECONDS = 0)
DO WHILE (LFOREVER .OR. NSECONDS > 0)
IF LOPENMODE
USE (CDATABASE) EXCLUSIVE NEW
ELSE
USE (CDATABASE) SHARED NEW
ENDIF
IF .NOT. NETERR() // USE SUCCEEDS
RETURN (.T.)
ENDIF
INKEY(1) // WAIT 1 SECOND
NSECONDS = NSECONDS - 1
ENDDO

RETURN (.F.) // USE FAILS

compile e link a rotina junto com seu sistema

aqui exemplo de como usar a funcao

aStr := {}
AADD(aStr,{'CODIGO', 'C' ,13, 00})
AADD(aStr,{'NOME', 'C' ,40, 00})
AADD(aStr,{'QUANT', 'N' ,10, 02})
AADD(aStr,{'VALOR', 'N' ,10, 02})
AADD(aStr,{'TOTAL', 'N' ,10, 02})
AADD(aStr,{'DATA', 'D' ,08, 00})
AADD(aStr,{'CVENDE', 'N' ,10, 00})
AADD(aStr,{'VENDED', 'C' ,40, 00})

IF ! FILE('DEVOLUC.DBF')
DBCREATE('DEVOLUC.DBF',aStr)
ELSE
MODISTRU("DEVOLUC.DBF",aStr)
ENDIF
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

RE:MODI STRU

Publicado por pepelui (1 intervención) el 24/08/2007 00:46:25
eeeeeee amigo, muito longo, mais facil o prg de escobar.
brigado igual.
forza italia.
pepelui
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