CHECK SUM

CHECK SUM

Postby Laurel » Tue Mar 14, 2006 1:03 am

Hola!

Alguien podría indicarme como calculo el CHECK SUM?

En espera de sus respuestas

Laura E. Hernández H.
Laurel
Laurel
 
Posts: 65
Joined: Fri Oct 21, 2005 8:07 pm
Location: México

Postby Willi Quintana » Tue Mar 14, 2006 1:59 am

Hola, puedes utilizar la funcion vTotal := nStrCrc(vCampo) ; donde nStrCrc, recibe una cadena de caracteres, que puede ser la suma de todos los campos de un registro, convirtiendo los numeros, las fechas y campos logicos en caracteres, luego esta funcion propia de FW, te devuelve un numero unico, el cual puedes utilizar opara comparar luego, es decir, si en la primera instancia, la cadena te devuelve un numero, si luego esa cadena es modificada, el numero resultante sera diferente al primero. Ej.

...........
Function OkChkSum(oModo,lAll)
local vRet := .f., vCount := FCount(), vFields := {}, oLbx, vVar
local vChkSum := ""
DEFAULT oModo := 0
DEFAULT lAll := .f.
vFields := LeeRegistro(vFields,vCount) // cargamos el registro al array vfields
vChkSum := ChkSum(vFields)
If Empty(_Field->codv)
oModo := 1
EndIf
If oModo == 0
If _Field->codv <> vChkSum
If !lAll
If MsgNoYes("Este Registro ha sido Alterado fuera de Sistema,,,","Corregir Balance?")
If Rec_Lock(10)
_Field->codv := vChkSum
DbUnLock()
EndIf
EndIf
EndIf
vRet := .f.
EndIf
Else
If Rec_Lock(10)
_Field->codv := vChkSum
DbUnLock()
vRet := .t.
EndIf
EndIf
Return(vRet)
//-----------------------------------------------------------------------------
Function ChkSum(vFields)
local vCont,vLen := Len(vFields) - 1
local vTotal,vCampo := "",lValor
vTotal := 0
For vCont := 1 To vLen
If ValType(vFields[vCont]) = "N"
vCampo := vCampo + AllTrim(Str(vFields[vCont]))
EndIf
If ValType(vFields[vCont]) = "C"
vCampo := vCampo + AllTrim(vFields[vCont])
EndIf
If ValType(vFields[vCont]) = "D"
vCampo := vCampo + DtoS(vFields[vCont])
EndIf
If ValType(vFields[vCont]) = "L"
lValor := vFields[vCont]
vCampo := vCampo + If(&lValor,"t","f")
EndIf
Next vCont
vTotal := nStrCrc(vCampo)
Return(vTotal)
//-----------------------------------------------------------------------------
Function OkChkSumAll()
local vRecno := Recno(), vCampo, lOk
CursorWait()
DbGoTop()
If LastRec() = 0
Return(Nil)
EndIf
While !Eof()
If Recno() <> 0
OkChkSum(0,.t.)
EndIf
DbSkip()
EndDo
DDbGoTo(vRecno)
Return(Nil)
//-----------------------------------------------------------------------------

Salu2
Willi........
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

CHECK SUM

Postby Laurel » Tue Mar 14, 2006 8:35 pm

Gracias Willi!
Voy a hacer la prueba.

Laura E. Hernández :D
Laurel
Laurel
 
Posts: 65
Joined: Fri Oct 21, 2005 8:07 pm
Location: México


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 12 guests

cron