22. marts 2006 - 02:30Der er
8 kommentarer og 2 løsninger
Komprimer DB
Nedenstående kode har jeg fra jesperthomsen. Hvordan bruger jeg den? Han skrev at jeg skulle kalde funktion med komprimer (<databasenavn>,<størrelsen>), men det kører ikke rigtigt for mig.
Er der nogen der kan komme med et godt "dummie" beskrivelse på hvordan jeg bruger den. :-)
Public Function Komprimer(ByVal vsFil As String, ByVal vlThreshold As Long) ' Formål : Foretager en komprimering af den angivne fil, hvis den har overskredet størrelsen ' angivet ved vlThreshold ' Parametre : ' vsFil : Navnet på filen der skal komprimeres ' vlThreshold : Den maksimale størrelse. Er filen mindre end Threshold skal der ' ikke gøres noget ' Dato : 9. juli 2001 Dim oFS As FileSystemObject Dim oFile As File Dim lOrgSize As Long Dim lNewSize As Long
On Error GoTo errHandle
Set oFS = New FileSystemObject
Set oFile = oFS.GetFile(vsFil) lOrgSize = oFile.Size
Set oFile = Nothing ' For at sikre at filen ikke er åben
If lOrgSize > vlThreshold Then If Dir(vsFil & "_cmp") <> "" Then Kill vsFil & "_cmp" ' Denne oprydning er nødvendig hvis komprimeringen gik galt sidst End If DBEngine.CompactDatabase vsFil, vsFil & "_cmp" ' Selve komprimeringen oFS.MoveFile vsFil, vsFil & "_tmp" ' Den oprindelige fil flyttes til en tmp-fil oFS.MoveFile vsFil & "_cmp", vsFil ' Den komprimerede fil ændres til at være den aktive Kill vsFil & "_tmp" ' Temp-filen slettes Else ' Filen skal ikke komprimeres - størrelsen er ikke overskredet. Ingen besked videre ' bare forlad Set oFS = Nothing Exit Function End If
' Komprimeringen er på plads og der skal ikke håndteres fejl. Opstår der fejl herefter ' gør det ikke så meget; der kommer bare ikke nogen statusmail On Error Resume Next
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Slettet bruger
22. marts 2006 - 09:40#1
Lav en formular, en knap og 2 tekstfelter:
Kode:
Dim fil as string dim threshold as long fil = me.tekstfelt1 threshold = me.tekstfelt2 call komprimer(fil, threshold)
---> netmejer: Når jeg nu kigger på den rutine du har fået, er der en ting som slår mig:
Du har forhåbentlig forstået, at du ikke kan bruge rutinen mod sig selv? Altså, at rutinen skal placeres i et andet program, som kan eksekvere den. Hvis du placerer rutinen i den samme Access database, som den skal komprimere, vil den jo altid være åben, og vil ikke virke.
Du vil altså skulle have f.eks. en anden database kørende, som engang imellem kalder denne rutine. Du vil f.eks. kunne indsætte rutinen i et modul i en database og have en form med en timer-event, som f.eks. trigges for hver 3600000 millisekunder, svarende til ca. 1 time. Tjek så evt., at det nu er uden for arbejdstid (hvor den formastelige database må formodes at være "fri"), og kald så rutinen med de rigtige parametre: Sti til din database, og den maksimale størrelse denne database må have, før den skal komprimeres. Med dette forslag skal du altså have to Access databaser kørende: Den database der skal komprimeres og en database, som foretager komprimeringen af den anden.
De to links til mvps.org, som terry har angivet giver dig netop hhv. en "kompileret" Access database og et VB5 program, som kan gøre det samme som den rutine du har fået. Også her, er det altså nødvendigt at kalde et eksternt program til at gennemføre komprimeringen.
Egentlig for dårligt, at Microsoft ikke kan finde ud at at give os mulighed for at foretage en "selvkomprimering" fra koden uden alle de krumspring, når man nu kan gøre det manuelt fra menuen. Her kan den jo godt finde ud af at genstarte, så der må jo findes et lille program, som klarer det. Men det er åbenbart ikke rigtigt dokumenteret, hvordan det kan kaldes fra kode.
Hmm.. jeg ved ikke rigtigt, om jeg fik det forklaret ordentligt.
"Hvis du placerer rutinen i den samme Access database, som den skal komprimere, vil den jo altid være åben, og vil ikke virke."
Skal læses som:
Hvis du placerer rutinen (funktionen) i den samme Access database, som den skal komprimere, vil database filen være låst. Det vil derfor ikke virke.
Den Access kommando der gøres brug af (DBEngine.CompactDatabase), laver en kopi af den oprindelige database, hvor den under kopieringen fjerner "fedtet". Herefter skal den oprindelige database (den med "fedtet") slettes eller omdøbes, hvorefter den "nye" database skal have det "gamle" navn. Men det kan som sagt ikke ske, så længe filen er låst, hvilket den vil være men databasen "kører". Det er grunden til at denne funktion skal køre fra et andet program. Til slut skal den komprimerede database startes igen.
Synes godt om
Slettet bruger
22. marts 2006 - 22:25#5
hej SPG og Kjulius, lav lige et svar, så jeg kan give jer jeres velfortjente point.
Velfortjent!? Det ord kan jeg godt lide!! ;-) Tak for det...
Synes godt om
Slettet bruger
24. marts 2006 - 08:08#7
!~)
Synes godt om
Slettet bruger
12. juli 2006 - 14:43#8
Du skal lige markere vores navne og acceptere!~)
Synes godt om
Slettet bruger
12. juli 2006 - 14:55#9
Det havde jeg glemt, er klaret nu. Beklager forsinkelsen :-)
Synes godt om
Slettet bruger
12. juli 2006 - 14:59#10
!~)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.