Bidra til å eliminere DBF Corruption

bidra til å eliminere DBF Korrupsjon med en Publisering Engine
FoxTalk mai 1999
Copyright Pinnacle Publishing, Inc. Alle rettigheter reserved.Help Eliminer DBF Korrupsjon med en Publisering Engine
Steve Zimmelman
DBF fil har vært med oss ​​i ca 15 år, og mens jeg virkelig liker den åpne arkitekturen av strukturen, det har alltid vært et iboende problem med indeksen og data korrupsjon - særlig i et nettverksmiljø. Problemet ser ut til å være sammen med mengden data som overføres opp og ned nettverket wire. Par dette med flere brukere, og det tar ikke lang tid å komme en indeks. På den annen side, enkelt brukersystemer synes å være mye mer stabil og har ikke de samme korrupsjonsnivå som sine nettverk fettere. En løsning, som ofte brukes av utviklere (meg selv inkludert), har vært å Indekser eller gjenskape indeksfilene når en indeks relatert feil steiler hodet. Men dette kan bli uhåndterlig når datasettene begynner å nærme seg fire millioner posten mark. En langsiktig løsning kan være å tvinge flerbrukerprogram til å oppføre seg som en enkelt bruker system ved å utvikle det som er blitt kjent som et oppslag motor.
Teorien bak oppslaget motor er egentlig ganske enkelt. Den grunnleggende regelen er å aldri tillate brukeren å legge inn noe direkte til den delte bord. Istedenfor bruker poster til en skygge-table de. Etter skyggen-tabellen er befolket og ingen feil har oppstått under innlegget, går programmet et direktiv til oppslaget motor, som i hovedsak forteller motoren hva den er ment å gjøre. I dette tilfelle, oppdaterer den hovedtabellen fra dataene i skyggen-tabellen. Så hva som faktisk skjer er at oppslaget motor, eller en enkelt arbeidsstasjon, er den eneste annonsen til hovedtabellen. Dette er akkurat hva en enkelt bruker system gjør.
Anatomien til en engineMost av konterings motorene jeg har sett er i stand til å behandle en rekke forespørsler ved hjelp av en tabell for å motta sine direktiver. En enkel direktiv tabell kan ha en struktur som dette: FieldFieldNameTypeSize1IDCharacter102PROGRAMCharacter503PARAMSCharacter604SHADOWTABLCharacter505DATEREQESTDate86DATEDONEDate87START_TIMECharacter88END_TIMECharacter89DONELogical110USERIDCharacter5
Motoren sitter i en løkke og ser for poster hvor Ferdig feltet er falsk. Når den ser en, vil den begynne å behandle det ved hjelp av informasjon som er lagret i posten.
For eksempel, la oss si et program trenger å oppdatere en kundes posten. Søknaden vil få en kopi av posten og lagre den i en skygge-tabell. Når brukeren gjør de ønskede endringene, klikker han eller hun på innlegg eller forplikte knappen, og søknaden skriver en post til direktivet tabellen. Koden kan se omtrent slik ut: * - Kopier kundepost å skygge-bordet * - for redigering. *
Velg Customer Hvis Seek (m.CustNo) cTempTable = 'Temp' + Høyre (Sys (3), 4) + 'dbf.' Kopier til (m.cTempTable); Mens Customer.CustNo = m.CustNo Endif * * - Når du redigerer er ferdig, legge posten til * - Publisering av direktiv Table. *
Sett inn direktiv; (ID, Program, Parms, ShadowTabl ,; DateReqest, UserID, Done); Verdier (SYS (2015), «CustUpDt.fxp ',; m.CustNo, m.cTempTable, Date (), m.UserID, .F.) Når oppslaget motor ser posten, begynner det å behandle posten noe sånt dette: Hvis Seek (. .F, 'Directiv')
Erstatt Directiv.Start_Time Med Time ()
Hvis! Tom (Directiv.ShadowTabl) Hvis filen (Directiv.ShadowTabl) Bruk (Directiv.ShadowTabl) Alias ​​Shadow In 0 Endif Endif Hvis! Tom (Directiv.Program) Og; File (AllTrim (Directiv.Program)) Hvis! Tomme (Directiv.Parms) pParms = Directiv.Parms gjøre (Directiv.Program) Med pParms Else Do (Directiv.Program) Endif Endif * * - Lukk shadow-tabellen. *
Hvis brukt ( 'Shadow') Bruk I Shadow Endif * * - Oppdater direktivet tabellen. *
Velg Directiv Skift Ferdig med .T,.; DateDone Med Date () ,; END_TIME Med Time ()
Endif
Motoren kan være et ikke-synlig eller synlig søknad. Jeg foretrekker en synlig motor slik at jeg kan overvåke motorens fremgang hvis det er nødvendig.
Bruk av et oppslag motor er åpenbart ikke for mindre installasjoner, og det krever litt reengineering. Men for store installasjoner der dataintegriteten må sikres, kan det være veien å gå.