Feynman Skrevet 21. desember 2004 Del Skrevet 21. desember 2004 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
kaffenils Skrevet 22. desember 2004 Del Skrevet 22. desember 2004 I Access 2003 (er usikker på Access XP) så kan du importere XML filer fra File->Get External Data, og så velge å importere xml data. Lenke til kommentar
Feynman Skrevet 22. desember 2004 Forfatter Del Skrevet 22. desember 2004 Jeg prøvde den, men det fungerte dårlig. Alle dataene i XML-filen er lagret som attributter, tror problemet ligger der. Tror jeg trenger en XML DOM-interface, men vet ikke helt hvilke objekter jeg skal bruke. Det beste hadde vært XML-readeren til ADO Lenke til kommentar
kaffenils Skrevet 22. desember 2004 Del Skrevet 22. desember 2004 Denne linken om ADO og XML kan sikker hjelpe deg. Lenke til kommentar
Feynman Skrevet 5. januar 2005 Forfatter Del Skrevet 5. januar 2005 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. Lenke til kommentar
kaffenils Skrevet 6. januar 2005 Del Skrevet 6. januar 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå