1

Konu: Foruma ornek data gondermek

Sorular bazen SQL iceriyor ve o SQL'i daha iyi anlayabilmek icin kendi makinenizde benzer datayi yaratmaniz gerekiyor. Soru sahibi gerekli cursorlari yaratip icini bir miktar data ile dolduracak kodu da gonderse ne guzel olurdu:) Bu kod burada devreye giriyor.

Bu daha once gonderdigim kodun biraz modifiye sekli ve daha rahat.

-Ornek data icin gerekli cursorlari yaratan ve icini dolduran kodu yazip clipboarda koyuyor
-Soru soran basitce Ctrl+V ile sorusuna ek olarak uretilen kodu yapistiriyor

Ornegin t1 ve t2 adinda iki cursor'unuz var ve "c:\my folder\myTable.dbf" tablonuz var. t1 ve t2'nin "tum" kayitlarini ve myTable.dbf'in 3 kaydini gondermek ve problemimi anlatmak istiyorum. O zaman soyle yapiyorum:

Command window:

SampleDataAsText("t1,0,t2,0,c:\my folder\myTable,3")

sonra forumdaki mesajima geli[ Ctrl+V ile yapistiriyorum:) O kadar. Artik forumdakilerin benimle ayni datayi gormek icin yapmalari gereken o kodu calisirmak.

Bu kod %100 her turlu data ve datatipiyle calisacak sekilde ayarlanmadi ama %98-99 is gorur. Her zaman rahatlikla ulasacaginiz bir yere saklayin (mesela VFP dizinine koyarsaniz:

do home()+'SampleDataAsText' with "t1,0,t2,0,c:\my folder\myTable,3"

seklinde kullanmak kolay olur. Kodu kullanarak cevap vermeye calisanlar icin de hayati kolaylastirdiginiz icin simdiden tesekkurler.

Visual Fox Pro
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
Yen yaz 1907'ye yolla FB gelsin evinde yensin.
(sonra salaklar ciksin alin terine şike desin)

2

Re: Foruma ornek data gondermek

hocam süpersiniz ilk sorumda kullanacağım.

Bilmediğin Neyse Yanıldığındır.

3

Re: Foruma ornek data gondermek

Üstad teşekkürler smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: Foruma ornek data gondermek

gerçekten mükemmel bir kod

5

Re: Foruma ornek data gondermek

enfes bir kod bu gün kullanacam sağol hocam

Son düzenleyen, avrasya34 (04.08.2009 21:02:12)