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
*!*    *** 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

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 Son düzenleyen, avrasya34 (04.08.2009 21:02:12)

Re: Foruma ornek data gondermek

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