Avatar billede maf01 Nybegynder
12. juli 2004 - 15:44 Der er 10 kommentarer og
1 løsning

Oprette en system variable Word WBA

Jeg har en database connektion i min vba som går igen flere gange i løbet af coden..

Jeg ved der kan laves en systemvariabel, som skal skrives og derefter kan genbruges i resten af dokumentet .. Også for at undgå at skulle rette andet end dette ene sted.. når database stien ændre sig..

Koden jeg bruger:

  Dim dbSI As Database
  Dim wsSI As Workspace

  Set wsSI = CreateWorkspace("", "admin", "", dbUseJet)
  Set dbSI = wsSI.OpenDatabase("c:\Dokumenter\Test\Databaser\testskabelon.mdb", True)
 

Pft.
Avatar billede vbcoder Nybegynder
12. juli 2004 - 15:54 #1
Jeg er almindelig vb mand og flg. kode virker i vb

du kunne prøve flg. kode i et nyt modul

Public dbSI As Database
Public wsSI As Workspace


Function OpenDatabase(dbName As String, Optional user As String = "admin")

  Set wsSI = CreateWorkspace("", user, "", dbUseJet)
  Set dbSI = wsSI.OpenDatabase(dbName, True)

End Function

Function closeDatabase()
 
  Close dbSI
  Set dbSI = Nothing
  Close wsSI
  Set wsSI = Nothing
 
End Function

du skal så ved åbning af dokumentet kalde opendatabase med dit dbnavn

og ved lukning kalde closedatabase
Avatar billede kabbak Professor
12. juli 2004 - 15:55 #2
kan denne måske bruges, er i ThisDokument modulet

Dim dbSI As Database
Dim wsSI As Workspace

Private Sub Document_Open()
  Set wsSI = CreateWorkspace("", "admin", "", dbUseJet)
  Set dbSI = wsSI.OpenDatabase("c:\Dokumenter\Test\Databaser\testskabelon.mdb", True)

End Sub
Avatar billede vbcoder Nybegynder
12. juli 2004 - 15:55 #3
den er justeret efter din kode
Avatar billede maf01 Nybegynder
13. juli 2004 - 09:44 #4
Kan desværre ikke få det til at virke i min modul.. sikkert fordi jeg skal kalde den funktion hvert eneste sted i koden hvor databasen skal bruges ?.. Men how ??
Avatar billede vbcoder Nybegynder
13. juli 2004 - 09:56 #5
hmm

hvis jeg laver et nyt word dokument og så trykker Alt+F11 kommer jeg ind i vba editor

i vba editor menu -> insert -> module

paster flg. kode

'kode start
Public dbSI As Database
Public wsSI As Workspace


Function OpenDatabase(dbName As String, Optional user As String = "admin")

  Set wsSI = CreateWorkspace("", user, "", dbUseJet)
  Set dbSI = wsSI.OpenDatabase(dbName, True)

End Function

Function closeDatabase()
 
  Close dbSI
  Set dbSI = Nothing
  Close wsSI
  Set wsSI = Nothing
 
End Function
'kode slut

Derefter klikker jeg på This Document. I kodevinduet vælger jeg Document

Dette object har events Close New Open

'kode start
Private Sub Document_Close()
 
    CloseDatabase
   
End Sub

Private Sub Document_Open()

    OpenDatabase ("c:\test.mdb")
   
End Sub
'kode slut

Som sagt har jeg ikke arbejdet med vba før men jeg vil mene at når du åbner dit dokument vil vba selv lede efter databasen og åbne den, eller er der noget jeg har overset ?
Avatar billede vbcoder Nybegynder
13. juli 2004 - 09:58 #6
når du har åbnet databasen skal du lave et db udtræk fra databasen.

dvs du skal have defineret et recordset men det recordset kan du fylde fra den åbne database forbindelse.

du behøver således kun at kalde åbningen af databasen når dokumentet åbnes og lukke den når dokumentet lukkes.

ind i mellem skal du bruge et recordset objekt med data.
Avatar billede vbcoder Nybegynder
13. juli 2004 - 10:03 #7
du skal vel egentlig også have en reference til access for at kunne åbne en database i word
Avatar billede maf01 Nybegynder
13. juli 2004 - 10:17 #8
tester lige dit efterflg. kode af.. :-)
Avatar billede vbcoder Nybegynder
13. juli 2004 - 10:36 #9
nu har testet ovenstående kode i et word dokument og den skal rettes lidt til

koden forudsætter en database c:\test.mdb

med tblTest
felt id = autonummering
felt navn
'module1

Public dbSI As Database
Public wsSI As Workspace
Public rsSI As Recordset

Function OpenDatabase(dbName As String, Optional user As String = "admin")

  Set wsSI = CreateWorkspace("", user, "", dbUseJet)
  Set dbSI = wsSI.OpenDatabase(dbName, True)

End Function

Function CloseDatabase()
 
  dbSI.Close
  Set dbSI = Nothing
  wsSI.Close
  Set wsSI = Nothing
 
End Function

Function OpenRecordset(strSQL As String)

    Set rsSI = dbSI.OpenRecordset(strSQL)
   
End Function

Function CloseRecordset()

    rsSI.Close
    Set rsSI = Nothing
   
End Function

'ThisDocument
Private Sub Document_Close()
 
    CloseDatabase
   
End Sub

Private Sub Document_Open()

    OpenDatabase ("c:\test.mdb")
    OpenRecordset "select * from [tblTest] where [navn] = 'Anders'"
    Debug.Print rsSI.Fields("navn").Value
    Debug.Print rsSI.Fields("adresse1").Value
    Debug.Print rsSI.Fields("adresse2").Value
    Debug.Print rsSI.Fields("postnr").Value & " " & rsSI.Fields("by").Value
   
End Sub
Avatar billede vbcoder Nybegynder
13. juli 2004 - 10:37 #10
koden forudsætter en database c:\test.mdb

med tblTest
felt id = autonummering
felt navn = tekst
felt adresse1 = tekst
felt adresse2 = tekst
felt postnr = tekst
felt by = tekst

men du kan lave sql så den passer til din db
Avatar billede vbcoder Nybegynder
13. juli 2004 - 10:38 #11
lige en linje for at lukke recordset for en god ordens skyld

'ThisDocument
Private Sub Document_Close()
 
    CloseRecordset
    CloseDatabase
   
End Sub

Private Sub Document_Open()

    OpenDatabase ("c:\test.mdb")
    OpenRecordset "select * from [tblTest] where [navn] = 'Anders'"
    Debug.Print rsSI.Fields("navn").Value
    Debug.Print rsSI.Fields("adresse1").Value
    Debug.Print rsSI.Fields("adresse2").Value
    Debug.Print rsSI.Fields("postnr").Value & " " & rsSI.Fields("by").Value
   
End Sub
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