RSalazarU wrote:Adriano:
Yo tengo unas rutinas que las llamo: Control de Integridad
VerificaDuplicados()
VerificaCabecerasDinDetalle()
VerificaDetallesSinCabecera()
VerificaCamposNulos()
Ahí hago la revisión y emito un informe.
Sin embargo no son automáticas, tiene que hacerlo el usuario.
Ahora, tb, estoy trabajando sobre un proceso automático de mantenimiento, es decir que cada cierto tiempo se ejecute un proceso de mantenimiento al iniciar el programa :
RecrearIndices()
ReprocesarSaldos()
Acá también se podría incluir la rutina de revisión de duplicados
Otra tarea también seria el de ejecutar la rutina de mantenimiento cuando ocurra situaciones extrañas: Crash, etc., en entornos multiusuario.
Atentamente,
Rolando.
Saludos desde Cochabamba, Bolivia
Hola Rolando gracias por contestar, el chiste es al momento de estar indexando se muestre un mensaje de error : "Codigo duplicado o ID duplicado, como se entienda...aunque no siempre se estara indexando, es de vez en cuando,dependiendo del usuario, que quiera reindexar sus archivos en forma semanal,mensual, etc etc , pero que se muestre que exista claves duplicadas, ese es el chiste,imaginate sino sabemos que dentro de la base de datos esten duplicados,todo por la caida de energia electrica o red ,que se yo,yo tengo esa funcion asi ....
- Code: Select all Expand view
MsgMeter({|oMeter,oText,oDlg,lEnd | BuildIndex(oMeter,oText,oDlg,@lEnd ,;
Dbf05,"S05","STR(CVEIVA,1)",;
Dbf05,.F.,.F.)},;
"Generando indice ..."+Dbf05,;
"Espera por favor..." )
Y aqui la rutina...
- Code: Select all Expand view
//------------------------------------------------------------------------------
Static Function BuildIndex(oMeter, oText, oDlg, lEnd, cDbf, cAlias, cCpo, cInd, lExclus, lRut)
LOCAL DirEmp:= "EMP"+TSTR(nNUMEMP)+"\"
CursorWait()
IF lRut
cDbf := DirEmp+cDbf
cInd := cInd
ENDIF
IF lExclus
Use &(cDbf) Alias &(cAlias) Exclusive
Pack
ELSE
Use &(cDbf) Alias &(cAlias)
ENDIF
oMeter:nTotal := RecCount()
INDEX ON &(cCpo) TAG &(cInd) FOR !DELETED() EVAL (oMeter:Set(RecNo()), SysRefresh(), !lEnd ) //....aqui es desde donde o como poner esa rutina de verificar claves duplicadas ...al momento de estar indexando la base de datos..espero que me entiendan, y ver desde donde poner la funcion,ando buscando y buscando y nada...pero en fin.
(DbCloseArea(cDbf))
RETURN NIL
Ah y las ultimas 3 rutinas como es la funcion que hace Rolando....
Saludos y buen dia Rolando.
Atte: Adriano C. C.
acc69@hotmail.com