VCS_DataMacro.bas 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. Option Compare Database
  2. Option Private Module
  3. Option Explicit
  4. ' For Access 2007 (VBA6) and earlier
  5. #If Not VBA7 Then
  6. Private Const acTableDataMacro As Integer = 12
  7. #End If
  8. Public Sub ExportDataMacros(ByVal tableName As String, ByVal directory As String)
  9. On Error GoTo Err_export
  10. Dim filepath As String
  11. mktree directory
  12. filepath = joinpaths(directory, to_filename(tableName) & ".xml")
  13. ExportDocument acTableDataMacro, tableName, filepath
  14. FormatDataMacro filepath
  15. Exit Sub
  16. Err_export:
  17. ' Error to export dataMacro, no contains dataMacro. Do nothing
  18. End Sub
  19. Public Sub ImportDataMacros(ByVal tableName As String, ByVal directory As String)
  20. On Error GoTo Err_import
  21. Dim filepath As String
  22. filepath = joinpaths(directory, to_filename(tableName) & ".xml")
  23. ImportDocument acTableDataMacro, tableName, filepath
  24. Exit Sub
  25. Err_import:
  26. ' Error to import dataMacro. Do nothing
  27. End Sub
  28. 'Splits exported DataMacro XML onto multiple lines
  29. 'Allows git to find changes within lines using diff
  30. Private Sub FormatDataMacro(ByVal filepath As String)
  31. Dim saveStream As Object 'ADODB.Stream
  32. Set saveStream = CreateObject("ADODB.Stream")
  33. saveStream.Charset = "utf-8"
  34. saveStream.Type = 2 'adTypeText
  35. saveStream.Open
  36. Dim objStream As Object 'ADODB.Stream
  37. Dim strData As String
  38. Set objStream = CreateObject("ADODB.Stream")
  39. objStream.Charset = "utf-8"
  40. objStream.Type = 2 'adTypeText
  41. objStream.Open
  42. objStream.LoadFromFile (filepath)
  43. Do While Not objStream.EOS
  44. strData = objStream.ReadText(-2) 'adReadLine
  45. Dim tag As Variant
  46. For Each tag In Split(strData, ">")
  47. If tag <> vbNullString Then
  48. saveStream.WriteText tag & ">", 1 'adWriteLine
  49. End If
  50. Next
  51. Loop
  52. objStream.Close
  53. saveStream.SaveToFile filepath, 2 'adSaveCreateOverWrite
  54. saveStream.Close
  55. End Sub