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. filePath = directory & tableName & ".xml"
  12. VCS_IE_Functions.ExportObject acTableDataMacro, tableName, filePath, VCS_File.UsingUcs2
  13. FormatDataMacro filePath
  14. Exit Sub
  15. Err_export:
  16. ' Error to export dataMacro, no contains dataMacro. Do nothing
  17. End Sub
  18. Public Sub ImportDataMacros(ByVal tableName As String, ByVal directory As String)
  19. On Error GoTo Err_import
  20. Dim filePath As String
  21. filePath = directory & tableName & ".xml"
  22. VCS_IE_Functions.ImportObject acTableDataMacro, tableName, filePath, VCS_File.UsingUcs2
  23. Exit Sub
  24. Err_import:
  25. ' Error to import dataMacro. Do nothing
  26. End Sub
  27. 'Splits exported DataMacro XML onto multiple lines
  28. 'Allows git to find changes within lines using diff
  29. Private Sub FormatDataMacro(ByVal filePath As String)
  30. Dim saveStream As Object 'ADODB.Stream
  31. Set saveStream = CreateObject("ADODB.Stream")
  32. saveStream.Charset = "utf-8"
  33. saveStream.Type = 2 'adTypeText
  34. saveStream.Open
  35. Dim objStream As Object 'ADODB.Stream
  36. Dim strData As String
  37. Set objStream = CreateObject("ADODB.Stream")
  38. objStream.Charset = "utf-8"
  39. objStream.Type = 2 'adTypeText
  40. objStream.Open
  41. objStream.LoadFromFile (filePath)
  42. Do While Not objStream.EOS
  43. strData = objStream.ReadText(-2) 'adReadLine
  44. Dim tag As Variant
  45. For Each tag In Split(strData, ">")
  46. If tag <> vbNullString Then
  47. saveStream.WriteText tag & ">", 1 'adWriteLine
  48. End If
  49. Next
  50. Loop
  51. objStream.Close
  52. saveStream.SaveToFile filePath, 2 'adSaveCreateOverWrite
  53. saveStream.Close
  54. End Sub