Avatar billede 123456789 Nybegynder
20. august 2001 - 17:19 Der er 18 kommentarer og
1 løsning

Kald af macro fra et andet program

Jeg har en PC som styrer en maskine. Et operatør program bruger access som db, og det kører fint. Ligeledes kaldes en udskrift macro OK. MEN en anden macro for at komprimere databasen kan jeg ikke få til at køre. Macroen er bygget op via taste funktion, og hedder således \"%kfe\", for at komprimere, og den kører fint fra access, men jeg kan ikke aktivere den fra det andet program. Nogen gode forslag
20. august 2001 - 17:29 #1
Kan du ikke bare kalde databasen med kommandolinie-parameteren /compact, således at databasen komprimeres?

Hvis du laver en genvej, som f.eks. ser således ud:
C:\\program files\\Office\\msaccess.exe C:\\Dokumenter\\MinDatabase.mdb /compact

Derved skal du bare kalde denne genvej for at få databasen komprimeret.

/Thomas
Avatar billede 123456789 Nybegynder
20. august 2001 - 17:30 #2
Måske skal jeg lige nævne at operatørprogrammet har VBA inkluderet, og det er via dette at access kaldes.
Fra et endet spørgsmål er foreslået:
Application.DBEngine.CompactDatabase \"C:\\Data.mdb\", \"C:\\DataComp.mdb\"
men jeg får det ikke helt til at virke
20. august 2001 - 17:38 #3
Du kan også godt kalde en bestemt makro via din genvej:

C:\\program files\\Office\\msaccess.exe C:\\Dokumenter\\MinDatabase.mdb /x DinMakro

/Thomas
Avatar billede 123456789 Nybegynder
20. august 2001 - 18:16 #4
Ja jeg kan sagtens kalde en macro, og andre macroer kører fint. I Visual Basic skriver jeg blot:
DoCmd.RumMacro \"macronavn\"

Men det virker bare ikke ved komprimering
Avatar billede 123456789 Nybegynder
20. august 2001 - 18:18 #5
Iøvrigt skal jeg også nævne at access står åben/i run hele tiden
20. august 2001 - 21:02 #6
Du siger, at operatørprogrammet har VBA inkluderet. Vil det sige en reference til \"Microsoft Access 8/9.0 Object Library\"?
Avatar billede 123456789 Nybegynder
20. august 2001 - 22:46 #7
Tjaaa nu er vi ude  hvor jeg vist ikke kan bunde, men det er Visual Basic for Application. Som jeg hr forstået det, så har udbyderen af operatør programmet købt en del af basic softwaren til at bruge i sit eget program. Derfor er der også funktioner som ikke kan udføres som eks funktionen AcCommandCompactDatabase (hed en vist), hvor jeg ellers troede jeg havde fundet de vise sten.

Jeg ved ikke om det var svar på dit spørgsmål, men jeg bruger VBA dele til at foretage alle DB forespørgsler/skrivninger

VH
Avatar billede 123456789 Nybegynder
20. august 2001 - 22:47 #8
VBA delen (sorry)
Avatar billede hugopedersen Nybegynder
21. august 2001 - 08:19 #9
Velkommen til den forunderlige verden af problemer med komprimering af Access db :-)
( undskyld jeg kunne ikke lade være )

Som jeg forstår dit problem, så vil du komprimere databasen fra en applikation mens en anden har fat på den også - det kan man ikke !
Man skal være 100% sikker på at databasen kan låses exclusivt før det er muligt at komprimere. Jeg har selv tidligere lavet et modul med nogle funktioner der kan checke om db kan låses o.s.v.

Jeg kan ikke give dig et endegyldigt svar på hvordan du gør, men kun sige at du absolut ikke er alene :-)
Avatar billede terry Ekspert
21. august 2001 - 15:13 #10
hi 123...

As hugopedersen says, your database must not be in use by others, so before you are allowed to compact it you will have to terminate other applications using the database.
In other words, you must be able to open the database exclusivly!

Once this is done you can use either the method mentioned by Thomas, or the DBEngine.CompactDatabase method.




22. august 2001 - 00:04 #11
...or you could use a program like JetComp.Exe (still requires exclusivliy access to the database)
Avatar billede 123456789 Nybegynder
22. august 2001 - 19:33 #12
Jeg har måske udtryke mig lidt uheldig, men jeg har kun et program som komm med access.
Fra dette program (VBA) har jeg nu fundet ud af  komprimere via DBEngine.Compact metoden  (jubiii).
Men det går kun hvis access er lukket ned????

Det med at låse exclusiv forstår jeg ikke helt ???
Skal jeg i skriptet slukke for hele access eller blot den aktuelle fil (??), køre komprimeringen, og derefter kalde databasen \"til live\" igen, eller hvilke muligheder har jeg.
Avatar billede terry Ekspert
22. august 2001 - 20:04 #13
123... Access is a program (.EXE) in its own right. It can be used to open an Access database, for example a .mdb file.

To open an Access database (.mdb) it is not necessary to have Access (.EXE) installed. You can use for example a Visual Basic program. Your VBA program you mention, is this a Visual Basic program? 

If you open the .mdb file in Access and also open it from a VB (VBA?) program there are now two (users) using the database. When you are in this situation you can NOT compact the database. So yes, you can only do this when Access is closed and only the VB (VBA?) program is running.

It is possible to open an Access database (.mdb) exclusivly. This means that others can not open it at the same time. This allowes you to compact the database without others interfering.
NOTE: If you are sure that others are NOT using the database when you compact then you need not worry about it being opened (locked) exclusivly.

So you should ensure that all applications using the .mdb file are closed. Then you can use the DBEngine.Compact metod from your VB (VBA?) program to compact the .mdb file. Once this is complete you can start using the database (.mdb) from Access (EXE) or other VB (VBA) programs.

Does that help at all?
Avatar billede terry Ekspert
22. august 2001 - 20:07 #14
Exclusive means simply that only one user can use the database.
Avatar billede 123456789 Nybegynder
23. august 2001 - 21:51 #15
Jeg ved ikke rigtig om det hjælper.....For at få data fra mit VBA program er det nødvendig at access.exe er åben og at dette program har åbnet databasen .mdb. Ellers kan jeg ikke hente data frem til operatøren. Bla kalder jeg nogle macro i access som finde data frem som jeg skal bruge, ud fra nogle kreterier som jeg har skrevet i databasen. Så jo der er vel 2 brugere af databasen. Den er også indstillet til \"delt\" adgang (altså ikke \"eksklusiv\").

Så ud fra det du skriver terry, så skal jeg fra VBA lukke access.exe...komprimer...og så åbne access.exe igen

Jeg kender bare ikke VBA koden for dette.

PS VBA er VB, blot i et light udgave, og som så følger med mit operatør program/software.
(Visual Basic for Applications)



Avatar billede terry Ekspert
24. august 2001 - 11:01 #16
You dont say if your VBA is a visual basic program. If it is a Visual Basic program then I cant see why you need Access.EXE running!

Or do you have a front end (MDB) with VBA code in, which links to the backend (MDB) withj just data in.

I need some more information about your setup....

24. august 2001 - 11:09 #17
123...->
Du behøver jo ikke at lukke MSAccess.exe. Du skal bare have lukket alle forbindelser til den pågældende .mdb. Det være sig enten fra Access eller fra en anden applikation.

/Thomas
Avatar billede 123456789 Nybegynder
28. august 2001 - 20:05 #18
Normalt skal access ikke køre det er korrekt, men jeg har lavet nogle macroér i access som jeg kalder, og derfor har jeg access til at stå åben under driften. Jeg kan godt se bagefter at det skulle ikke have været programmeret sådan, men det er for sent nu.

Til Thomas, ja det lyder korrekt, men jeg ved bare ikke hvordan jeg gør dette, altså at lukke alle forbindelserne??

VH
123
Avatar billede 123456789 Nybegynder
04. september 2001 - 08:17 #19
Spørgsmål lukkes hermed
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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