Shamil Salakhetdinov
shamil at smsconsulting.spb.ru
Fri Feb 12 14:32:35 CST 2010
Hi Max et al --
And here is the import part of code - just a working prototype to port to
Add-in in C#. I do not check object existence here etc.
As you can find in my another message I have also get exported MSys* tables
into XML - and that worked(?) well for all the MSys* tables (Access 2007).
Import didn't work even for MSysRelationships but one can use this
information to recreate relationships - just a note...
Thank you.
--
Shamil
P.S. Import code:
Option Compare Text
Option Explicit
Public Sub ImportObjects()
'
' 1. Imports Queries, Forms, Reports, Macros, Modules from
' text files located \Objects subfolder
'
' 2. Imports Tables from
' xml files with schema located \Objects subfolder
'
On Error GoTo errhandler
Dim strSourceFolder As String
Dim strSourceFileName As String
Dim app As Access.Application
Dim intObjType As Integer
Dim strObjectFileFullPath As String
Dim strObjectName As String
Set app = Access.Application
strSourceFolder = Access.Application.CurrentProject.path + "\Objects\"
strSourceFileName = Dir(strSourceFolder, vbNormal)
While (Len(strSourceFileName) > 0)
Debug.Print getObjectTypeByFileName(strSourceFileName) & _
" - [" & _
getObjectNameFromFileName(strSourceFileName) & _
"] - " & _
strSourceFileName
intObjType = getObjectTypeByFileName(strSourceFileName)
If (intObjType <> -1) Then
strObjectName = getObjectNameFromFileName(strSourceFileName)
strObjectFileFullPath = strSourceFolder + strSourceFileName
Select Case intObjType
Case acTable:
app.ImportXML strObjectFileFullPath, acStructureAndData
Case acQuery, _
acForm, _
acReport, _
acMacro, _
acModule:
app.LoadFromText intObjType, _
strObjectName, _
strObjectFileFullPath
Case Else
End Select
End If
strSourceFileName = Dir
Wend
MsgBox ("Import DONE!")
exithere:
Exit Sub
errhandler:
MsgBox "Unhandled Error in sExportAllObjects(): " & Err.Number & vbCrLf
& Err.Description
Resume exithere
End Sub
Private Function getObjectTypeByFileName(ByVal s As String) As Integer
Dim intObjType As Integer
intObjType = -1
If Left(s, 5) = "Table" Then intObjType = acTable
If Left(s, 5) = "Query" Then intObjType = acQuery
If Left(s, 4) = "Form" Then intObjType = acForm
If Left(s, 6) = "Report" Then intObjType = acReport
If Left(s, 5) = "Macro" Then intObjType = acMacro
If Left(s, 6) = "Module" Then intObjType = acModule
If intObjType = acTable And _
InStr(s, "Schema.xml") > 0 Then intObjType = -1
getObjectTypeByFileName = intObjType
End Function
Private Function getObjectNameFromFileName(ByVal s As String) As String
Dim strObjectName As String
Dim intPos As Integer
If InStr(s, "Schema.xml") > 0 Then Exit Function
s = Left(s, Len(s) - 4) ' cut fileExt
intPos = InStrRev(s, "Table_")
If (intPos = 0) Then intPos = InStrRev(s, "Query_")
If (intPos = 0) Then intPos = InStrRev(s, "Form_")
If (intPos = 0) Then intPos = InStrRev(s, "Report_")
If (intPos = 0) Then intPos = InStrRev(s, "Macro_")
If (intPos = 0) Then intPos = InStrRev(s, "Module_")
If (intPos = 0) Then Exit Function
intPos = InStr(intPos, s, "_")
intPos = intPos + 1
strObjectName = Mid(s, intPos)
getObjectNameFromFileName = strObjectName
End Function
-----Original Message-----
From: Shamil Salakhetdinov [mailto:shamil at smsconsulting.spb.ru]
Sent: Friday, February 12, 2010 11:18 PM
To: 'Access Developers discussion and problem solving'
Subject: RE: [AccessD] Add-In Express 2009 for MS Office and .NET
Hi Max --
Thank you for code samples - I plan to make it a bit different for first
version - something like the code in P.S. of this message (Export), and
Import will be posted in the other message.
Thank you.
--
Shamil
P.S. MS Access DB Export code (watch line wraps):
<<< snip >>>
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Max Wanadoo
Sent: Friday, February 12, 2010 12:48 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Add-In Express 2009 for MS Office and .NET
Section 3 - Import
That's the lot now. No form or user interface. I hope it works ok, seem ok
on my test system but caveat emptor as always.
<<< snip >>>
__________ Information from ESET NOD32 Antivirus, version of virus signature
database 4861 (20100212) __________
The message was checked by ESET NOD32 Antivirus.
http://www.esetnod32.ru