1

Konu: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Yeniden merhaba,
Oluşturduğum bir cursor'un yaratılma tarihini ve saatini nasıl öğrenebilirim?
ADIR() ile yapamadım.
Teşekkürler

2

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

asagidaki gibi bir komutla last modification date i alabilirsin

Visual Fox Pro
WAIT WINDOW FDATE(FULLPATH("d:\soykan\mysoftware\depomatik\data03\stok.dbf",1))

bu komulada saatini

Visual Fox Pro
WAIT WINDOW FTIME(FULLPATH("d:\soykan\mysoftware\depomatik\data03\stok.dbf",1))

asagidaki kodla da lastupdate tarihini

Visual Fox Pro
USE FULLPATH("d:\soykan\mysoftware\depomatik\data03\stok.dbf")

WAIT WINDOW LUPDATE()

3

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Soykan,
Keske o kadar basit olsa:) Yine de zor degil ve N tane yolu var:

API:

Visual Fox Pro
Clear

oFileTimes = _GetFileTime(_samples+'data\customer.dbf')
If !oFileTimes.Error
  ? 'Create:',    oFileTimes.createTime,    oFileTimes.createMilli
  ? 'LastAccess:',oFileTimes.lastAccessTime,oFileTimes.lastAccessMilli
  ? 'Modified:',  oFileTimes.modifiedTime,  oFileTimes.modifiedMilli
Else
  ? 'Error'
Endif
 
Function _GetFileTime
  Lparameters tcFile
  ***************************************
  * Declarations
  ***************************************
  Declare SHORT GetFileTime In Win32API;
    INTEGER hFile, String @lpftCreation,;
    STRING @lpftLastAccess, String @lpftLastWrite
 
  Declare SHORT FileTimeToSystemTime In Win32API;
    STRING @lpft,    String @lpst
 
  Declare SHORT FileTimeToLocalFileTime In Win32API;
    STRING @lpFileTime, String @lpLocalFileTime
 
  Declare Integer CreateFile In Win32API;
    STRING @lpFileName, Integer dwDesiredAccess,;
    INTEGER dwShareMode, String @lpSecurityAttributes,;
    INTEGER dwCreationDistribution, Integer dwFlagsAndAttributes,;
    INTEGER hTemplateFile
 
  Declare SHORT CloseHandle In Win32API;
    INTEGER hObject
 
  #Define GENERIC_READ     0x80000000
  #Define GENERIC_WRITE    0x40000000
  #Define FILE_SHARE_READ  0x00000001
  #Define FILE_SHARE_WRITE 0x00000002
  #Define OPEN_EXISTING    0x00000003
  ***************************************
  * Declarations
  ***************************************
 
  Local lcCreateTime, lcLastAccessTime, lcModifiedTime, lnMillis
  Local oFileTimes
  oFileTimes = CreateFileTimesReturnObject()
 
  lnhandle = CreateFile(@tcFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0) && Create handle
  If m.lnhandle > 0
    Store Replicate(Chr(0), 16) To m.lcCreateTime, m.lcLastAccessTime, m.lcModifiedTime
    oFileTimes.Error = (GetFileTime(m.lnhandle, ;
      @lcCreateTime, @lcLastAccessTime, @lcModifiedTime) = 0)
    =CloseHandle(m.lnhandle) && Close the handle
    If !oFileTimes.Error
      oFileTimes.createTime      = _DecodeFileTime(m.lcCreateTime,@lnMillis)
      oFileTimes.createMilli     = m.lnMillis
      oFileTimes.lastAccessTime  = _DecodeFileTime(m.lcLastAccessTime,@lnMillis)
      oFileTimes.lastAccessMilli = m.lnMillis
      oFileTimes.modifiedTime    = _DecodeFileTime(m.lcModifiedTime,@lnMillis)
      oFileTimes.modifiedMilli   = m.lnMillis
    Endif
  Else
    oFileTimes.Error = .T.
  Endif
  Return oFileTimes
Endfunc
 
Function _DecodeFileTime
  Lparameters tcFileTime, tnMillis
  Local lcLocalTime, lcSysTime, lnresult, ltTime
  ltTime = {/:}
  Store Replicate(Chr(0), 16) To m.lcLocalTime, m.lcSysTime
  If FileTimeToLocalFileTime(@tcFileTime, @lcLocalTime) # 0 And ;
      FileTimeToSystemTime(@lcLocalTime, @lcSysTime) # 0
    ltTime = Datetime(Str2Val(Substr(m.lcSysTime,1,2)), ;
      Str2Val(Substr(m.lcSysTime, 3,2)),;
      Str2Val(Substr(m.lcSysTime, 7,2)),;
      Str2Val(Substr(m.lcSysTime, 9,2)),;
      Str2Val(Substr(m.lcSysTime,11,2)),;
      Str2Val(Substr(m.lcSysTime,13,2)) )
 
    tnMillis = Str2Val(Substr(m.lcSysTime,15,2))
  Endif
  Return m.ltTime
Endfunc
 
Function Str2Val
  Lparameters tcStr
  Local lnVal
  lnVal = 0
  For ix=1 To Len(m.tcStr)
    lnVal = m.lnVal + Asc(Substr(m.tcStr,m.ix,1))*256^(m.ix-1)
  Endfor
  Return m.lnVal
Endfunc
 
Function CreateFileTimesReturnObject
  Local oReturn, lnSelect
  If Type('VERSION(5)') = 'N' And Version(5) >= 900
    oReturn = Createobject('empty')
    AddProperty(oReturn, 'error', .F.)
    AddProperty(oReturn, 'createTime')
    AddProperty(oReturn, 'createMilli')
    AddProperty(oReturn, 'lastAccessTime')
    AddProperty(oReturn, 'lastAccessMilli')
    AddProperty(oReturn, 'modifiedTime')
    AddProperty(oReturn, 'modifiedMilli')
  Else
    lnSelect = Select()
    Create Cursor tmp (Error L,;
      createTime L, createMilli L, ;
      lastAccessTime L, lastAccessMilli L, ;
      modifiedTime L, modifiedMilli L )
    Scatter Name oReturn Blank
    Use In 'tmp'
    Select (m.lnSelect)
  Endif
  Return oReturn
Endfunc

Bu daha basit ve dosya kullanimda olsa da calisiyor. VFP'yle gelen filer.dll'i kullaniyor (do form home()+'tools\filer\filer.scx' de bunu kullaniyor):


Visual Fox Pro
? GetTree(_Samples+'data','*.dbf')

Select ;
  cast(filepath As Varchar(250)) As filepath, ;
  cast(filename As Varchar(250)) As filename, ;
  filesize, fattr, createtime, lastacc, lastwrite ;
  From filelist ;
  ORDER By 1,2
 
 
Function GetTree
  Lparameters tcStartDir, tcSkeleton
  tcSkeleton = EVL(m.tcSkeleton, "*.*")
  Create Cursor filelist ;
    (filepath m, filename m, filesize i, ;
    fattr c(8), createtime T, lastacc T, lastwrite T)
 
  Create Cursor folderlist (filepath m)
  oFiler = Createobject('filer.fileutil')
  With oFiler
    .SearchPath = m.tcStartDir
    .Subfolder = 1
    .FileExpression = m.tcSkeleton
    .Find(0)
    For ix=1 To .Files.Count
      With .Files(ix)
 
        Insert Into filelist ;
          (filepath, filename, filesize, fattr, createtime, lastacc, lastwrite)  ;
          values ;
          (.Path, .Name, .Size, Attr2Char(.Attr), ;
          Num2Time2(.Datetime), Num2Time2(.LastAccessTime), Num2Time2(.LastWriteTime) )
 
      Endwith
    Endfor
    Return .Files.Count
  Endwith
Endfunc
 
Function Num2Time2
  Lparameters tnFloat
  Return Dtot(Date(1899,12,30) + m.tnFloat)
Endfunc
 
Function Attr2Char
  Lparameters tnAttr
  Return ;
    IIF(Bittest(tnAttr,0),'RO','RW')+;
    IIF(Bittest(tnAttr,1),'H','_')+;
    IIF(Bittest(tnAttr,2),'S','_')+;
    IIF(Bittest(tnAttr,4),'D','_')+;
    IIF(Bittest(tnAttr,5),'A','_')+;
    IIF(Bittest(tnAttr,6),'E','_')+;
    IIF(Bittest(tnAttr,7),'N','_')
Endfunc

4

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Benim orneklerim en basiti idi smile

5

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Seninki basit ama yaratilma zamanini gostermiyor di mi? Ben mi goremedim?

6

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

evet gostermiyor Last Modification Date ve Time alinabiliyor yani arkadasin tam aradigina yanit olmadi benim ornek .

7

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Yanıtlar için çok teşekkürler, yine çok şey öğrendim.
Ek bir soru: Yukarıdaki çözümler cursor dosyaları için de geçerli olabilir mi?

8

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Cursor derken? Bildigimiz VFP deki cursor mi? Onu olusturdugun zamani zaten biliyorsun. Hem cursor'un bir dosyasi olacaginin hic garantisi yok.

9

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Doğru bildiğimiz cursor. Aslında haklısınız, cursorun yaratılma tarih ve saatini sormak saçma bir soru oldu. Zaten onu ben oluşturmuşum.:(  (İzmir bugün çok sıcaktı da ondan sanırım!)

Bu da saçma bir soru mu bilmem ama sormam gerek. Network ortamında iki ayrı kullanıcı aynı adı olan cursorlar oluşturabilir mi? ya da bunların çakışma olasılığı var mıdır?

10 Son düzenleyen, ugurlu2001 (17.07.2010 09:30:07)

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Kandilzade;

Oluşturduğun cursor 'un network ile alakası yok. O tamamen senin local bilgisayarındaki bilgisayarın memory sinde oluşuyor. Dolayısı ile o cursorde yaptığın tüm işlemler sadece o işi yapan aktiF programa özel. Yani programını aynı bilgisayarda n kez açabiliyorsan; her bir programın cursor ü diğerlerinden bağımsız.

Not: Eğer büyük boyutlu cursor ler kullanıyorsan, cursor için  INDEX/LER oluşturabilir ve sorgu sürelerinde önemli ölçüde kısaltabilirsin.

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ü

11

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Ugur'un dedigi gibi cursor networkten bagimsiz. Ister  cok kullanici olsun, ister ayni makinede calisan cok sayida VFP olsun cursorler biribirinden bagimsiz. Onlari hafiza degiskenleri gibi dusunebilirsin. Cogu kez ortada yaratilan bir dosya bile yok, oldugunda da dosyalarin gercek adlari senin kullandiklarin degil. Onlarin gercek adlari VFP tarafindan belirlenip kullaniliyor. Ayni zamanda cursorler daima "exclusive" kullanimdadir. Kullanici A ve B ayni anda "Musteriler" diye bir cursor yaratabilir ama ikisi de birbirinden tamamen bagimsiz. Degisken yaratmak gibi dusun, ama en onemli fark, Datasession'larin birinden digerine cursorler gecemez, degiskenler gecer. Ayni VFP icinde, birden fazla session'da ayni cursor yaratilabilir ve hepsi gene bagimsiz.

Izmir hakikaten sicak:) Izmir'de neredesin? Ben Inciralti'ndayim (Turkuaz'in orada Deniz Bilimleri ve Tek. Enstitusu).

12

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Teşekkürler.
İzmir'de ev Bornova'da, iş yeri Manisa'da (Celal Bayar Üniv. Tıp Fak.). Manisa İzmir'e göre 1-2 derece daha sıcak oluyor, kışın da daha soğuk.

Ama haftasonları Ildırı'da (yazlık: deniz, balık smile ) oluyorum.

13

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Sevgili Çetin,
Ben İzmirde doğup büyüdüm. Sonra hayat rügarları beni oyle bir savurdu ki onlarca yıldır İzmiri görmek nasib olmadı.
Eskiden İnciraltı demek güzel bir plaj demekti. Ama İnciraltından son geçtiğimde çevre öylesine değişmiştiki plajın yerini bile belirleyemedim.
Belki budalaca bir soru olacak ama "İnciraltında hala plaj veya ona benzer birşeyler var mı"
Sen İnciraltı deyince doğrusu gençliğimi çok güzel saatlerini geçirdiğim o İnciraltı plajı aklıma geldi ve merakettim.
Sevgilerimle.
Erdal

14

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Abi senin dedigin yeri ben ancak genclik (hatta cocukluk) yillarimda gorebildim. Simdi ne yazik ki o dogal halleri kalmadi. Yine de belediye buralari imara acmadi. Simdi bu alanda buyuk bir park alani var, bataklik olan bolum okaliptuslarla ve diger agaclarla agaclandirildi. Kafeler, yurume yollari filan yapildi. Hic olmazsa Izmir'linin fuara alternatif yakin mesafede gidebilecegi bir yer oldu. Plaj yok ama alisveris merkezi, park, yurume alanlari var:) Bu zamanda buna sukrediyorum. Simdi denize girilebilen en yakin yer Guzelbahce (Kilisman) dolaylari.

Not:(Eski plajin yeri simdi Inciralti son durak ve onun ilerisindeki yerler). Yolunuz duserse beni arayin:)

15

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Sevgili Çetin,
Cevabın için çok teşekkürler. Bundan 15 sene kadar önce Çeşmeye giderken İnciraltindan geçmiş, o zamanlarda bile gördüğüm manzara karşısında şaşıp kalmıştım. Karşıyaka sahilinin apartmanlarla değil, yalılarla dolu olduğu yılardan sonra İzmiri özellikle Karşıyakayı görünce sanki eskiden güzeller güzeli bir kadının yüzüne asit dökülmüş halini görür gibi olmuştum ve inanılmaz şekilde üzülmüştüm.
Ama sen gene de şanslı sayılırsın çünki kıyısından da olsa o günleri yakalamışsın. Neyse fazla uzatmayayım; çünkü seni de İzmirden soğutabilirim.
Sevgilerimle.
Erdal

16

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Ya siz koskoca İzmir'den bahsediyorsunuz. Ben çocukluğumun Karasu (Sakarya'ya bağlı) sahilini hatırlıyorum sadece çadır ve barakalar olan, içeri 1-2 km giren muhteşem kum sahil bitmiş, şehir olmuş. Resimlerini gördüm geçen gerçekten şoke oldum. 2 sene önce Marmaris Günlücek'e ve Marmaris şehir merkezine götürdüm ailemi yine aynı şok. Çocukluğumun harika günlücek sahili ve bir pansiyon kasabası olan Marmaris'i mahfolmuş. Öylesine bozulmuş ki Günlücek denize girilecek hali yoktu.
Şu an Çıralı (Olimpos), Patara gibi birkaç sahil kaldı. Sanırım 20 yıl sonra onlar da kalmayacak. Belki 10 yıl bile sürmez.
İstanbul'un 40-50 sene önceki resimlerini gördüm. Çok güzel bir şehirmiş. İstanbul aşığı arkadaşlar kusura bakmasın ama İstanbul bitmiş. İstanbul gibisi yok filan diyorlar. Ben topu topu 2 şehir gördüm yurtdışında; Taşkent ve Taipei. İkisi de İstanbul'dan kat kat güzeldi.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

17

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Sevgili Arkadaşlar,
Bütün bu yazılan, çizilenlerden sonra anlaşılıyorki "MEDENİYET DEDİĞİN TEK DİŞİ KALMIŞ CANAVAR" gerk maddi, gerekse manevi tüm güzellikleri hızla yiyip bitiriyor.
Ben üniversiteyi, hatta liseyi bitirdiğim zaman geleceğe ümit ve güvenle bakıyordum.
Kızım üniversiteyi bitirdiği zaman onun geleceğine şüphe ve güvensizlikle bakabildim.
Torunumun geleceğini ise kapkara olarak görüyorum.
Allah bizden sonraki kuşaklara acısın.
Sevgilerimle.
Erdal

18

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

cetinbasoz yazdı:

Ugur'un dedigi gibi cursor networkten bagimsiz. Ister  cok kullanici olsun, ister ayni makinede calisan cok sayida VFP olsun cursorler biribirinden bagimsiz. Onlari hafiza degiskenleri gibi dusunebilirsin. Cogu kez ortada yaratilan bir dosya bile yok...

iyi ama o zaman bu kod parçası neden çalışıyor her zaman?

Visual Fox Pro
Create Cursor test ( test c(10))

xx=Dbf()
Select 0
Use (xx) Again
Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

19 Son düzenleyen, ugurlu2001 (20.07.2010 17:31:36)

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Metin ,  sorunu tam anlayamadım? Verdiğin kod parçasının çalışmaması mı gerekiyor?

Verdiğin örnekte  bir çok benzer  table oluşturulabilir?

Tam olarak ne demek istedin?


Visual Fox Pro
CLOSE TABLES 

LOCAL lni, lcCursorName, lcxx
SET
 
FOR lni = 1 TO 15
    m.lcCursorName= "Test"+Padl(Alltrim(Str(m.lni)),2,"0")
    ? m.lcCursorName
    Create Cursor &lcCursorName (test c(10))
    m.lcxx=Dbf()
    Select 0
    Use (m.lcxx) Again
ENDFOR
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ü

20

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Çetin'in Cogu kez ortada yaratilan bir dosya bile yok. cümlesine itiraz ettim.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

21

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Sorun degil, ilk itiraz eden sen degilsin:) Ne zaman bunu soylesem itiraz eden birisi cikiyor zaten. Ben de her nedense her seferinde ispat etmekle ugrasiyorum. Simdilik sana o kod seni aldatiyor desem inanmazsin:

Visual Fox Pro
CLOSE DATABASES ALL

Clear
LOCAL lcFile
SELECT * FROM (_samples+'data\customer') ;
    WHERE country = 'USA' ;
    INTO CURSOR x1 ;
    nofilter
 
lcFile = DBF('x1')
? m.lcFile, FILE(m.lcFile)
WAIT WINDOW 'Any key to continue'
 
Handle = FCREATE(m.lcFile)
? m.handle, FERROR()
Handle = FOpen(m.lcFile)
? m.handle, FERROR()
WAIT WINDOW 'Any key to continue'
 
? STRTOFILE("hello", m.lcFile)
? m.lcFile, FILE(m.lcFile)
WAIT WINDOW 'Any key to continue'
 
Handle = FOpen(m.lcFile)
? m.handle, FERROR()
? FILETOSTR(m.lcFile)
WAIT WINDOW 'Any key to continue'
 
SELECT * FROM (m.lcFile)
 
? DBF('x1'),DBF()
 
WAIT WINDOW 'Any key to continue'
 
? FILETOSTR( DBF('x1') ) && ;)
 
WAIT WINDOW 'Thank you'

Kodu yuruttugum yer foxite:
http://www.foxite.com/archives/0000211644.htm

22

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

en başta dbf() fonksiyonunun cursorlerle çalışmasını engelleselermiş böyle tutarsızlıklar olmazmış. kodu inceledim. bazı komutlar aldatmaya devam ediyor, bazıları etmiyor.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

23 Son düzenleyen, cetinbasoz (26.07.2010 13:26:17)

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

Neden cursorler ile calismayacakmis:) O gerekli bir ayrinti. O zaman ortaya NOFILTER tartismasi cikiyor. Foxite.com'a bak son zamanlarda da o tartisma vardi. Okumak istemezsen isin ozeti, Select-SQL'de NOFILTER kullanin.

Bu arada aldatma filan yok, VFP oyle calisiyor.

24

Re: Bir cursor'un oluşturulma tarih ve saatini öğrenmek

nofilter'in niye gerektiğini biliyorum. bir select komutu sadece set filter ile yapılabiliyorsa gerçekten select komutu çalıştırmıyor. sadece set filter ile sanal bir select oluşturuyor ve eğer set filter'i etkileyen birşeyler olursa cursor değişebiliyor. böyle bir sakıncası vardı.
ben zaten artık bütün programlarımı sql server'a taşıyorum. yani böyle bir meselem yok diyebilirim. bir de biz de senin gibi paket program geliştirdiğimiz için biz farketmesek bile müşterilerden birkaçı farkediyor hataları.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com