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
| *!* *** Calling samples
*!* Set Textmerge Delimiters To '%%','%%'
*!* TEXT TO cSampleDataAsText TEXTMERGE noshow
*!* myCursor1,0
*!* myCursor2,0
*!* MyCursor3,10
*!* <<_samples+'data\Customer'>>,3
*!* <<_samples+'data\Employee'>>,5
*!* ENDTEXT
*!* sampleDataAsText(m.cSampleDataAsText)
*!* SampleDataAsText( ;
*!* 'myCursor1,0,'+;
*!* 'myCursor2,0,'+;
*!* 'myCursor3,10,'+;
*!* _samples+'data\Customer,3,'+;
*!* _samples+'data\Employee,5' )
*!* *** Calling is in pairs.
*!* **First one is an alias of open cursor/table
*!* **second specifies how many records to copy - 0 means all
* SampleDataAsText.prg
Lparameters tcInfo
LOCAL loCloseTemp, ix
loCloseTemp = CREATEOBJECT('CloseTemp')
LOCAL ARRAY laInfo[1]
Create Cursor crsSampler (procedureName m, procedureCode m)
For ix = 1 To ALINES(laInfo,m.tcInfo,1+4,',',CHR(13),CHR(10)) STEP 2
GetProcedureCode(laInfo[m.ix],VAL(laInfo[m.ix+1]))
Endfor
DataCreationCodeToClip()
MESSAGEBOX('Data creation is copied to clipboard',0,'Sample Data',3000)
Procedure DataCreationCodeToClip
Local Array aProcCode[1]
Local lcTemp1,lcTemp2
lcTemp1 = Sys(2015)+'.tmp'
lcTemp2 = Sys(2015)+'.tmp'
Select crsSampler
Scan
Strtofile(procedureName,m.lcTemp1,.T.)
Strtofile(procedureCode,m.lcTemp2,.T.)
Endscan
_Cliptext = Filetostr(m.lcTemp1) + Filetostr(m.lcTemp2)
Erase (m.lcTemp1)
Erase (m.lcTemp2)
Endproc
Procedure GetProcedureCode(tcAlias,tnRecords)
Local lcTemp, ix, lcData, lcRetVal
lcTemp = Sys(2015)+'.tmp'
If !Used(m.tcAlias)
Select * From (m.tcAlias) Into Cursor crsSampling nofilter
lcCursorName = Juststem(m.tcAlias)
Else
Select (m.tcAlias)
lcCursorName = Alias()
Endif
Locate
If Empty(m.tnRecords)
Copy To (m.lcTemp) Type Delimited
Else
Copy To (m.lcTemp) Type Delimited Next m.tnRecords
Endif
lcData = Filetostr(m.lcTemp)
Erase (m.lcTemp)
Set Textmerge Delimiters To '%%','%%'
Set Textmerge To (m.lcTemp) Noshow
Set Textmerge On
\
\ Procedure CreateCursor_%%m.lcCursorName%%
\ LOCAL lcData, lcTemp
\ lcTemp = SYS(2015)+'.tmp'
\ TEXT TO m.lcData noshow
\ %%m.lcData%%
\ ENDTEXT
\
\ STRTOFILE(m.lcData,m.lcTemp)
\
\ create CURSOR %%m.lcCursorName%% ;
\ ( ;
For ix=1 To Afields(aStruc)
\ %%IIF(m.ix > 1,',','')%%
\\%%aStruc[m.ix,1]%% %%aStruc[m.ix,2]%%(%%aStruc[m.ix,3]%%,%%aStruc[m.ix,4]%%)
\\ %%IIF(aStruc[m.ix,5],'',' NOT ')%% NULL
\\ %%IIF(aStruc[m.ix,6],'NOCPTRANS','')%% ;
Endfor
\ )
\
\ APPEND FROM (m.lcTemp) TYPE delimited
\ ERASE (m.lcTemp)
\ endproc
Set Textmerge To
Set Textmerge Off
Insert Into crsSampler Values ( Textmerge('CreateCursor_%%m.lcCursorName%%()%%CHR(13)+CHR(10)%%'), Filetostr(m.lcTemp) )
Set Textmerge Delimiters
Erase (m.lcTemp)
ENDPROC
** Class to close any cursors created after it was instantiated
** Author: Dragan Nedeljkovich
Define Class CloseTemp As Custom
Dimension a1[1]
nFiles=0
Procedure Init
This.nFiles=Aused(atemp)
If This.nFiles > 0
Acopy(atemp, This.a1)
Else
This.a1=""
Endif
endproc
Procedure Destroy
For i=1 To Aused(aNow)
If Ascan(This.a1, aNow[i,1],-1,-1,1,2+4)=0
Use In aNow[i,1]
Endif
Endfor
endproc
Enddefine |