Gå til innhold

XML-import i Access og andre MS-produkter


Anbefalte innlegg

Har et par XML-filer som jeg gjerne skulle hatt inn i en Access-database med det første, og på sikt lagt inn på SQL Server. Har nå kommet fram til at den beste (og eneste) løsningen er en VBA-macro.

 

Noen som har vært borti dette? Er vant med å programmere, men VBA har jeg aldri brukt. Kunne gjerne trengt litt hjelp med hvordan finne de forskjellige objektene osv.

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...
Noen ide om det finnes en funksjon som åpener "Open file"-dialogen og returnerer det valgte filnavnet? Vet det går an i VB, men tenkte å gjøre det samme i Access vha. VBA.

Det er to måter å gjøre det på:

 

1. Sett inn en "Microsoft Common Dialog Control, Version 6" ActiveX-objekt, og bruk følgende kode for å vise en Open File dialog:

 

Private Sub Command1_Click()
Dim dlg As CommonDialog
Dim strFile As String

' ActiveXCtl0 byttes ut med det navnet du gir activex-objektet
Set dlg = Me.ActiveXCtl0.Object

' Denne linjen setter filter i "Open File" dialogboksen slik at bare filer med .xml ending viser
dlg.Filter = "Xml documents (*.xml)|*.xml"

' Her viser vi "Open File" dialogen
Call dlg.ShowOpen

' Og her henter vi filnavnet som ble valg. Hvis brukeren trykker Cancel så inneholder FileName egenskapen "" (tom streng)
strFile = dlg.Filename
End Sub

 

 

2. Bruke API-funskjonen GetOpenFileName.

 

Legg følgende kode i en modul

Option Explicit

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Global Const OFN_READONLY = &H1
Global Const OFN_OVERWRITEPROMPT = &H2
Global Const OFN_HIDEREADONLY = &H4
Global Const OFN_NOCHANGEDIR = &H8
Global Const OFN_SHOWHELP = &H10
Global Const OFN_ENABLEHOOK = &H20
Global Const OFN_ENABLETEMPLATE = &H40
Global Const OFN_ENABLETEMPLATEHANDLE = &H80
Global Const OFN_NOVALIDATE = &H100
Global Const OFN_ALLOWMULTISELECT = &H200
Global Const OFN_EXTENSIONDIFFERENT = &H400
Global Const OFN_PATHMUSTEXIST = &H800
Global Const OFN_FILEMUSTEXIST = &H1000
Global Const OFN_CREATEPROMPT = &H2000
Global Const OFN_SHAREAWARE = &H4000
Global Const OFN_NOREADONLYRETURN = &H8000
Global Const OFN_NOTESTFILECREATE = &H10000
Global Const OFN_SHAREFALLTHROUGH = 2
Global Const OFN_SHARENOWARN = 1
Global Const OFN_SHAREWARN = 0

Type OPENFILENAME
       lStructSize As Long
       hwndOwner As Long
       hInstance As Long
       lpstrFilter As String
       lpstrCustomFilter As String
       nMaxCustFilter As Long
       nFilterIndex As Long
       lpstrFile As String
       nMaxFile As Long
       lpstrFileTitle As String
       nMaxFileTitle As Long
       lpstrInitialDir As String
       lpstrTitle As String
       flags As Long
       nFileOffset As Integer
       nFileExtension As Integer
       lpstrDefExt As String
       lCustData As Long
       lpfnHook As Long
       lpTemplateName As String
End Type

 

Deretter bruker du følgende kode, f.eks. i en knapp, for å vise dialogboksen

Dim OpenFile As OPENFILENAME
Dim wSize As Long
Dim memhandle As Long
Dim strFile As String
Dim strFilter As String
Dim lngResult As Long
Dim strOpenSavePath As String
Dim strOpenSavePathFile As String
Dim strOpenSaveFile As String


strFile = String(128, 0)
strOpenSavePath = CurDir$ & vbNullChar
strFilter = "Xml document (*.xml)" & vbNullChar & "*.xml" & vbNullChar + vbNullChar + vbNullChar

OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = Me.hWnd
OpenFile.flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
OpenFile.nFilterIndex = 1
OpenFile.nMaxFile = Len(strFile)
OpenFile.lpstrInitialDir = strOpenSavePath
OpenFile.lpstrFile = strFile
OpenFile.lpstrFilter = strFilter
OpenFile.lpstrTitle = "Velg xml dokument"

lngResult = GetOpenFileName(OpenFile)

If lngResult <> 0 Then
   strOpenSavePathFile = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, vbNullChar) - 1)
   strOpenSavePath = Left(strOpenSavePathFile, OpenFile.nFileOffset)
   strOpenSaveFile = Right(strOpenSavePathFile, Len(strOpenSavePathFile) - OpenFile.nFileOffset)
End If

 

Som du ser så er det LITT mer arbeid å bruke api-kall.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...