Buenos días, necesito ayuda de como se pueden proteger las bases de datos (.dbf) cuando están abiertos, por picos de luz; sacando el mensaje de error "not a table ". Se tiene estabilizador pero no es suficiente. Agradezco sus comentarios. Cordialmente, sofia2
1 Respuesta
Respuesta de Tomas Grecio Ramirez
1
1
Tomas Grecio Ramirez, Puedo ayudarlos a desarrollar aplicaciones corporativas...
El perjuicio por los cortes y picos de luz, en una BD, esa lo más normal del mundo, cada interrupción brusca daña la cabecera de los archivos DBF, sin embargo un etabilizador no es suficiente, puedes hacer 2 cosas : Un mantenimiento preventivo, y un correctivo Para el mantenimiento preventivo lo que tienes ue hacer es adquirir una unidada UPS, en mi país cuestan alrededor de US 60, este dispositivo eléctrico, te protegerá con unos minutosa adicionale de energía esto te dará segurridad ffente a los apagones. Si aún con esto no es suficiente y la distribución eléctrica de tu localidad tiene esa naturaleza, ni modo ya debes de empezar a considerar la posibilidad de pasar tus datos a SQL Server, que maneja los archivos de una manera más segura. Para el mantenimiento correctivo, puedes utilizar un código de reparar tablas, (sI no lotienes me avisasa para pegartelo en este foro)
Gracias, por tu respuesta, respecto a pasar los datos a SQL Server no sabría como empezar ya que es un aplicativo bastante grande hecho en foxprow 2.5b. **Me interesa lo del mantenimiento correctivo para reparar tablas, te agradezco si me lo puedes suministrar. Gracias, SOFIA
Lo que puedes hacer es pegar este código, en un archivo PRG, coloca primero el SET DEFAULT, en el directorio donde guardas tus tablas o BD no olvides hacer primero un Back Up de los mismos: *************inicio del programa***** *********************************** set talk off dimension l1dbfs(1) =adir(l1dbfs,'.\*.dbf') l1err=.f. clear ? 'Verificando tablas ' ? if alen(l1dbfs)<>1 for l1dbf=1 to alen(l1dbfs)/5 l1file=l1dbfs(l1dbf,1) ? right(' '+l1file,12)+' [' store fopen(l1file,2) to l1mess store fseek(l1mess, 0, 2) to l1ndx_sz =fseek(l1mess,0) l1str=fread(l1mess,4) l1ass=readx(4) l1head=readx(2) l1rec=readx(2) l1actual=(l1ndx_sz-(l1head+1))/l1rec l1actual=iif(l1ndx_sz=l1head,0,l1actual) if l1actual<>l1ass l1err=.t. ?? 'X]' =fseek(l1mess,0) l1str=fread(l1mess,4) l1replace=right('00000000'+hex(l1actual),8) l1tmp='' for l1loop=1 to 4 l1tmp=chr(dec(substr(l1replace,l1loop*2-1,2)))+l1tmp endfor =fwrite(l1mess,l1tmp) else ?? chr(251)+']' endif = fclose(l1mess) endfor endif ? ? iif(l1err,'Errores Encontrados! Haga reindex a las tablas que aparecen marcadas con x','Todo esta ok') return Function Readx parameter l1len l1str=fread(l1mess,l1len) l1tmp='' for l1loop=1 to l1len l1tmp=right('00'+hex(asc(substr(l1str,l1loop,1))),2)+l1tmp endfor l1value=dec(l1tmp) return l1value Function Hex parameters l1int private l1loop,l1hex,l1str l1str='0123456789ABCDEF' l1hex='' for l1loop=7 to 0 step -1 l1part=int(l1int/(16^l1loop)) l1hex=l1hex+substr(l1str,l1part+1,1) l1int=l1int-l1part*(16^l1loop) endfor do while left(l1hex,1)='0'.and.len(l1hex)>1 l1hex=substr(l1hex,2) enddo return l1hex Function Dec parameters l1hex private l1loop,l1int,l1str,l1ctr l1str='0123456789ABCDEF' l1int=0 for l1loop=len(l1hex)-1 to 0 step -1 l1int=l1int+(16^l1loop)*(at(substr(l1hex,len(l1hex)-l1loop,1),l1str)-1) endfor return l1int *****************************************fin del **prkgrama*************************** No olvides reindexar con elk comando REINDEX, para aquellas tablas que parezcan como falladas