Avatar billede larsbachmanndk Nybegynder
20. februar 2006 - 23:34 Der er 24 kommentarer og
1 løsning

Compress mdb online

Jeg har fundet denne vb code, som skulle kunne komprimere en Access database på serveren, men den melder fejl. Er der en der kan hjælpe?

Koden ser sådan ud:
------
<%
Private Sub Form_Unload(Cancel As Integer)

  DBEngine.CompactDatabase "Lblog.mdb", "Lblog_old.mdb"

  Kill "Lblog.mdb"

  Dim OldName
  Dim NewName

  OldName = "Lblog_old.mdb": NewName = "Lblog.mdb" ' Define filenames.

  Name OldName As NewName ' Rename file.

End sub
%>
-------

Og fejlen ser sådan ud:

Tegnet ')' var ventet
compress.asp, line 2, column 31
Private Sub Form_Unload(Cancel As Integer)
------------------------------^
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:01 #1
Det du har der er en Visual basic kode.. og ikke en vbscript eller asp..

Du skal derimod bruge dette link til at løse det i asp:
http://www.motobit.com/tips/detpg_CompactMDB/
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:14 #2
Umiddelbart virker de 2 scripts ikke lokalt, men så vidt jeg kan forstå skal der være installeret nogle komponenter på serveren, er disse komponenter almindelige på diverse webhoteller?

Det er også vigtigt at scriptet automatisk omdøber den komprimerede database tilo det originale navn
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:21 #3
løsning 2 skulle du meget gerne kunne bruge, da mdac er almindelig..

Og så bruger du denne her:
Set fso = CreateObject("Scripting.FileSystemObject")
sourceFile = 'C:\windows\notepad.exe'
destFile = 'C:\'
fso.CopyFile sourceFile,destFile,true
fso.DeleteFile sourceFile
Set fso = Nothing

Hvor du udskifter sourceFile med stien til den nye database, som det ovenover lavet... og i destFile skriver du navnet på hvad den gamle db hed og så vil den overskrive den gamle db med den nye fil.. og slette den nye db, med det midlertidige navn ;-)
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:37 #4
Jeg har siddet og rodet lidt med det, men kan desværre ikke få det til at virke.
Jeg kunne godt bruge et helt færdigt script... :)

Set Engine = CreateObject("JRO.JetEngine")
  Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path\database.mdb", _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path\compacted_database.mdb"

Den kommer med noget OLE DB fejl...
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:38 #5
+ er det ikke muligt at bruger server.MapPath... da stien ellers henviser til c:\windows\system32\
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:43 #6
hvilken fejl få du...
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:47 #7
sourceFile = ""
destFile = ""
Set Engine = CreateObject("JRO.JetEngine")
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & destFile, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile sourceFile,destFile,true
fso.DeleteFile sourceFile
Set fso = Nothing
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:48 #8
det er hele scriptet... ren c&p...

Det eneste du skal definere er stien og navnet på databaserne... hvis du vil bruge server.mappath, er du velkommen til det...
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:50 #9
Med den kode du lige har lavet får jeg følgende fejl:

Microsoft JET Database Engine (0x80004005)
Filen "C:\WINDOWS\system32\Lblog.mdb" kan ikke findes.

Jeg har skrevet Lblog.mdb som destFile
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:51 #10
Det vil sige at hvis jeg skal bruge server.Mappath så skal scriptet se sådan ud:

sourceFile = "Lblog_old.mdb"
destFile = "Lblog.mdb"
Set Engine = CreateObject("JRO.JetEngine")
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Server.MapPath=" & destFile, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Server.MapPath=" & sourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile sourceFile,destFile,true
fso.DeleteFile sourceFile
Set fso = Nothing
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:51 #11
ja.. men du skal også skrive stien til hvor filen ligger jo...

så er destfile kan der f.eks. står C:\min\database\sti\Lblog.mdb
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:53 #12
Der kommer følgende fejl:

Microsoft JET Database Engine (0x80004005)
Den installerbare ISAM kan ikke findes.
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:53 #13
Nej.. Nej

Du skal gøre det hele op i variablerne destFile og SourceFile

F.eks. destFile = Server.Mappath(".") & "\Lblog.mdb"

Hvis db'en vel og mærke ligger i samme mappe som scriptet..
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:54 #14
men når det kører på et webhotel, kan jeg vel ikke bruge den nødagtige sti (C:\min\database\sti\Lblog.mdb)
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:55 #15
OK... prøver lige dit forslag kl. 00:53:52
Avatar billede ttopholm Nybegynder
21. februar 2006 - 00:56 #16
Jo.. du kan sagtens bruge den nøjagtige sti... hvis du har den ellers kan den fåes ved response.write Server.Mappath(".")
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 00:59 #17
<%
sourceFile = Server.Mappath(".") & "\Lblog_old.mdb"
destFile = Server.Mappath(".") & "\Lblog.mdb"
Set Engine = CreateObject("JRO.JetEngine")
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & destFile, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sourceFile
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile sourceFile,destFile,true
fso.DeleteFile sourceFile
Set fso = Nothing
%>

Giver følgende fejl...

Microsoft JET Database Engine (0x80040E09)
Microsoft Jet-databasemotoren kan ikke åbne filen "c:\inetpub\wwwroot\Lblog_old.mdb". Den er allerede åbnet med udelt adgang af en anden bruger, eller du skal have tilladelse til at vise dataene.
compress.asp, line 5


Men der er ikke en database der hedder Lblog_old.mdb
Avatar billede ttopholm Nybegynder
21. februar 2006 - 01:02 #18
Prøv med den her:

<%
sourceFile = Server.Mappath(".") & "\Lblog_old.mdb"
destFile = Server.Mappath(".") & "\Lblog.mdb"
Set Engine = CreateObject("JRO.JetEngine")
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & destFile, _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sourceFile
Set Engine = Nothing
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile sourceFile,destFile,true
fso.DeleteFile sourceFile
Set fso = Nothing
%>
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 01:04 #19
Cool.. det virker på serveren, der kan åbenbart ikke gøres lokalt....

Du skal have mange tak.. smid et svar
Avatar billede ttopholm Nybegynder
21. februar 2006 - 01:06 #20
Svar....

Grunden til det ikke virker lokalt, er at du nok ikke har skriveadgang på din lokale server
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 01:12 #21
Jeg takker endnu engang :)
Avatar billede ttopholm Nybegynder
21. februar 2006 - 01:18 #22
Det var så lidt... at jeg skulle hjælpe din lille blog på vej...

Må man godt redist. den...
Avatar billede ttopholm Nybegynder
21. februar 2006 - 01:19 #23
og rette i den.. så vi kan lave den om til MySQL ;-)
Avatar billede larsbachmanndk Nybegynder
21. februar 2006 - 15:04 #24
:)
hvad mener du med redist. den?
Avatar billede ttopholm Nybegynder
21. februar 2006 - 16:48 #25
at man må videregive den.

du kan evt. fange mig på tt@device.dk
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester