-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdbcComp.PRG
More file actions
142 lines (119 loc) · 3.95 KB
/
dbcComp.PRG
File metadata and controls
142 lines (119 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
DEFINE CLASS dbcComp AS Session OLEPUBLIC
cOutputFolder = CURDIR()
cCompareLeft = ""
cCompareRight = ""
cCompareObjects = .null. && Folders or DBC
cDiffTool = [C:\PROGRAM FILES\BEYOND COMPARE 4\BCOMP.EXE]
* cSerializer = [DO C:\DEV\FOX\FOXBIN2PRG\FOXBIN2PRG.PRG WITH "%cTable", "D", '', .F., '1', '0', '1']
cSerializer = [This.oSerializer.Execute("%cTable", "D", '', .F., '1', '0', '1')]
oSerializer = .null.
cMessage = ""
cOutputLeft= ""
cOutputRight= ""
cResultsFile = ADDBS(This.cOutputFolder)+"CompareResults.txt"
PROCEDURE Init
LPARAMETERS cCompareLeft, cCompareRight, oSerializer
* Can be a folder or DBC Name
This.cCompareLeft = cCompareLeft
This.cCompareRight = cCompareRight
This.oSerializer = NEWOBJECT("c_FoxBin2Prg", "C:\DEV\FOX\FOXBIN2PRG\FOXBIN2PRG.PRG")
ENDPROC
PROCEDURE cCompareLeft_Assign
LPARAMETERS cValue
This.cCompareLeft = cValue
This.setCompare()
PROCEDURE cCompareRight_Assign
LPARAMETERS cValue
This.cCompareRight = cValue
This.setCompare()
PROCEDURE cOutputFolder_Assign
LPARAMETERS cFolder
IF DIRECTORY(cFolder)
This.OutputFolder = cFolder
ELSE
This.cMessage = cFolder + " is not a folder name."
ENDIF
PROCEDURE setCompare
This.cCompareObjects = ICASE(DIRECTORY(This.cCompareLeft) and DIRECTORY(This.cCompareRight),'Folders',FILE(This.cCompareLeft) and FILE(This.cCompareRight),'DBC',.null.)
PROCEDURE Compare
LOCAL lReturn
This.cOutputLeft = ADDBS(SYS(2023))+JUSTFNAME(This.cCompareLeft)+"_Left_"+TTOC(DATETIME(),1)+".txt"
This.cOutputRight = ADDBS(SYS(2023))+JUSTFNAME(This.cCompareRight)+"_Right"+TTOC(DATETIME(),1)+".txt"
DO CASE
CASE This.cCompareObjects = "Folders"
lReturn = This.SerializeFolder(This.cCompareLeft, This.cOutputLeft)
lReturn = lReturn AND This.SerializeFolder(This.cCompareRight, This.cOutputRight)
CASE This.cCompareObjects = "DBC"
lReturn = This.SerializeDBC(This.cCompareLeft, This.cOutputLeft)
lReturn = lReturn AND This.SerializeDBC(This.cCompareRight, This.cOutputRight)
OTHERWISE
This.cMessage = "Cannot compare until left and right values are set with either folder names or DBC names"
ENDCASE
IF lReturn
lReturn = This.CompareResults()
IF NOT lReturn
This.cMessage = "Could not create comparison file " + This.cResultsFile
ENDIF
ENDIF
RETURN lReturn
FUNCTION CompareResults
LOCAL cDiffTool
cDiffTool = This.cDiffTool + " " + oComp.cOutputLeft + " " + oComp.cOutputRight && + " >> " + This.cResultsFile
RUN /N &cDiffTool
RETURN FILE(This.cResultsFile)
PROTECTED FUNCTION SerializeFolder
LPARAMETERS cFolderName, cOutputFile
LOCAL ARRAY aTables[1,4]
LOCAL nTables, iRow, cCurrentFolder
cCurrentFolder = CURDIR()
CD (cFolderName)
ERASE (cOutputFile)
nTables = ADIR(aTables, ADDBS(cFolderName)+"*.dbf")
FOR iRow = 1 TO nTables
This.SerializeFile(aTables[iRow,1], cOutputFile)
NEXT
nTables = ADIR(aTables, ADDBS(cFolderName)+"*.dbc")
FOR iRow = 1 TO nTables
This.SerializeFile(aTables[iRow,1], cOutputFile)
NEXT
CD (cCurrentFolder)
RETURN FILE(cOutputFile)
PROTECTED FUNCTION SerializeFile
LPARAMETERS cFileName, cOutputFile
LOCAL cSerializer, cResultFile, lReturn
cResultFile = FORCEEXT(cFileName,'db2')
ERASE (cResultFile)
cSerializer = STRTRAN(This.cSerializer, "%cTable", cFileName)
&cSerializer
lReturn = FILE(cResultFile)
IF lReturn
STRTOFILE(FILETOSTR(cResultFile), cOutputFile, 1)
ENDIF
ERASE (cResultFile)
RETURN lReturn
FUNCTION ShowOutput
LPARAMETERS lRight
IF lRight
MODIFY FILE (This.cOutputRight)
ELSE
MODIFY FILE (This.cOutputLeft)
ENDIF
PROTECTED FUNCTION SerializeDBC
LPARAMETERS cDBCName, cOutputFile
ERASE (cOutputFile)
This.SerializeFile(cDBCName, cOutputFile)
cCurrentFolder = CURDIR()
CD (JUSTPATH(cDBCName))
USE (cDBCName) IN 0 ALIAS dbcName
SET DELETED ON
SELECT ObjectName FROM dbcName WHERE objectType='Table' ORDER BY ObjectName INTO CURSOR crsTables
SCAN
This.SerializeFile(ObjectName, cOutputFile)
ENDSCAN
USE IN SELECT(crsTables)
CD (cCurrentFolder)
ENDFUNC
PROCEDURE Error(nError, cMethod, nLine)
? "Error " + TRANSFORM(nError) + " in " + cMethod + ", Line " + TRANSFORM(nLine)
ENDPROC
ENDDEFINE