Exporting additional information
My original export source code didn’t quite export everything. It mainly only exported the things I thought truly likely to change over time. That is just Tables, Queries, Forms, Reports, Macros, and Modules. Trouble is, I would need a lot more if I was going to rebuild the database from scratch. A lot of this information is not very useful on its own either. So I decided the way to go was to create a simple Project.xml file that would contain a lot of this meta-data.I know what your thinking: XML? Yuck! Well, I’ve come to realize why XML was so popular once upon a time. Not because it is easy to type, it isn’t. And not because it is easy to read either, because it does take a mental step to process. No, it was popular because it is very easy to generate and parse programmatically, especially with a good library. Enter the MSXML: not great, but very easy to automate.
MSXML2 Library
The first thing I noticed was that I had the easy IXMLDOMDocument.load and IXMLDOMDocument.save methods. Perfect, I thought. Load worked exactly as I had both hoped and needed. Save, on the other hand, was an entirely different story. My first try was to simply generate a simple XML file with a <database> root element and a <properties> child element. The resulting output looked like this:<database><properties /></database>
Private Sub WriteXmlDocument(ByVal XmlDocument, ByVal FilePath)
Dim Reader, Writer, Stream
Set Stream = CreateObject("ADODB.Stream")
Set Writer = CreateObject("Msxml2.MXXMLWriter.6.0")
Set Reader = CreateObject("Msxml2.SAXXMLReader.6.0")
Stream.Open
Stream.Charset = "UTF-8"
Writer.encoding = "UTF-8"
Writer.indent = True
Writer.omitXMLDeclaration = False
Writer.output = Stream
Set Reader.contentHandler = Writer
Set Reader.dtdHandler = Writer
Set Reader.errorHandler = Writer
Reader.putProperty "http://xml.org/sax/properties/declaration-handler", Writer
Reader.putProperty "http://xml.org/sax/properties/lexical-handler", Writer
Reader.parse XmlDocument.XML
Writer.flush
Stream.SaveToFile FilePath, adSaveCreateOverWrite
Stream.Close
Set Reader = Nothing
Set Writer = Nothing
Set Stream = Nothing
End Sub
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<database>
<properties />
</database>
No comments:
Post a Comment