1 Son düzenleyen, metin (27.09.2007 09:35:09)

Konu: Idle time?

SQL Server ile oluşturduğum bir cursorum var.

xcs.FetchSize=100
xcs.FetchAsNeeded=.F.

help'te anlattığı gibi idle time'da kayıtları okumasını istiyorum. bunu command ortamında yapabiliyorum. o kayıtları okurken ben aşağı yukarı gezinebiliyor ve başka formları filan çalıştırabiliyorum. ama bir gridden oluşan formumu çalıştırdığımda sadece ilk 100 kayıdı okuyor. kalanını okuması için page down yapmam gerekiyor. ama eğer formun init veya gotfocus kısmına bir wait window koyarsam kayıtları okumaya başlıyor.

help'te idle time'dan kastedilen sadece bir wait window anı mı yoksa başka birşeyleri mi yanlış yapıyorum???

not: eğer datasession u default yaparsam wait window olmadan da tamamını okuyor...

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

2

Re: Idle time?

Metin,
Ben SPT kullanarak SQL'i kullanıyorum. Fetch kullanmak istediğimde sorun yaşamıştım. SQLExec kullandığımda bazı komutlarda 1 sonucu yerine 0 dönmeye başladı ki bu ciddi sorun oldu.
Cursor'u gridde göstermediğimden hic kayıt gelmiyor veya 100 kayıt geliyordu. Aynı SQLExec'i bir veya daha fazla çalıştırdığımda sonuc geliyordu.

Galiba ben bu işi beceremedim. O yüzden Fetch'den vazgeçmiştim.

Not: Biraz garip anlattım galiba smile

/o---------------------o\
     www.haser.com
\o---------------------o/

3

Re: Idle time?

senin sonuçların sıfır dönmesinin sebebi connection busy olayı. bir fetch bitmeden başka birşey yapamazsın.
benim problem biraz daha farklı. sad
bir stok kartları ekranı istiyorum. binlerce stok kartı ekrana gelecek. fetch yapmazsan hepsini okuyana kadar çok bekliyor. fetch yaparsan da fetch bitene kadar başka bir işlem yapmıyor. bunu engellemek için FetchAsNeeded=.F. parametresini kullanmak istedim. ama anlayamadığım bir şekilde private data session formlarda FetchAsNeeded=.F. bir işe yaramadı. page down yapmadıkça fetch yapmıyor. veya wait window koyarsam fetch yapmaya başlıyor... sad

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

4

Re: Idle time?

Anlattığın sorun bir anlamda benim sorunumla kesişiyor aslında.
Herhalde bu senin de aklına gelmiştir ama yazdığından şunu anlıyorum olay default datasesionda çalışıyorda Default datasesion'da ki bir ayarı private datasesinda yapmamışsındır. Set komutlarında bir olabilir.

/o---------------------o\
     www.haser.com
\o---------------------o/

5

Re: Idle time?

cursoradaptor kullanıyorum. o yüzden setlerle alakası yok. kaldı ki sıfır bir vfp açtım. hiçbir set komutuyla oynamadan denedim. yine değişen birşey yok... sad

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

6

Re: Idle time?

Hiç cursoradaptor kullanmadım sad

/o---------------------o\
     www.haser.com
\o---------------------o/

7

Re: Idle time?

acaba bu bir bug mı?

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

8

Re: Idle time?

Haklisin, private'da yapmiyor. Belki bu isini gorur:

Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show
 
Define Class myForm As Form
  DataSession=2
  Add Object myFetchStatus As Label With Caption='Fetching...', AutoSize=.T.
  Add Object myGrid As Grid With Top = 50
  Add Object myAsynchLoader As Timer With Interval = 100
 
  Procedure Load
    TEXT TO m.lcSQL noshow
SELECT *
   FROM AdventureWorks.Sales.SalesOrderHeader h
   JOIN AdventureWorks.Sales.SalesOrderDetail d ON h.SalesOrderID = d.SalesOrderID
    ENDTEXT
 
    m.lcConnection = ;
      "Driver=SQL native client;Server=.\sqlexpress;"+;
      "Trusted_connection=Yes;"
 
    This.AddProperty('oCA')
    This.oCA = Createobject("AsynchCA", "myData",m.lcSQL,m.lcConnection)
    This.oCA.CursorFill()
    Select (This.oCA.Alias)
  Endproc
 
  Procedure Init
    This.myGrid.RecordSource = Thisform.oCA.Alias
  Endproc
 
  Procedure myAsynchLoader.Timer
    This.Enabled = .F.
    With Thisform.oCA
      If CursorGetProp("FetchIsComplete", .Alias)
        Thisform.myFetchStatus.Caption = 'Fetch complete'+Ltrim(Str(Reccount(.Alias)))
        Use In 'fetchMe'
        Return
      Endif
      If !Used('fetchMe')
        Use Dbf(.Alias) In 0 Again Alias FetchMe
      Endif
      Thisform.myFetchStatus.Caption = 'Fetching...'+Ltrim(Str(Recno('fetchMe')))
      Skip (.FetchSize) In 'fetchMe'
    Endwith
    This.Enabled = .T.
  Endproc
Enddefine
 
 
Define Class AsynchCA As CursorAdapter
  DataSourceType="ODBC"
  FetchAsNeeded = .F.
  FetchSize = 1000
  MaxRecords = -1
  AllowSimultaneousFetch = .T.
 
  Procedure Init
    Lparameters tcAlias, tcSQL, tcConnection
    This.Alias = m.tcAlias
    This.AddProperty('Connection', ;
      SQLSTRINGCONNECT(m.tcConnection))
    This.Datasource = This.Connection
    This.SelectCmd = m.tcSQL
    SQLSetprop(This.Connection,"Asynchronous",.T.)
  Endproc
Enddefine

9 Son düzenleyen, metin (28.09.2007 23:38:56)

Re: Idle time?

çok teşekkürler. sonunda bir cevap alabildim. deli etti bu beni. en azından olmadığını öğrendim...

UT'de iki defa sordum ama pek doğru düzgün bir cevap alamadım...

ya bu kadar programcı var orda. hiçbiri mi kullanıyor böyle fetch??? öbür türlü connection busy veriyor. fetch bir işe yaramıyor. en sonunda olmazsa ayrı connectionlar açıcam belki...

bu sadece cursoradaptor de mi acaba viewlerde de aynı sorun var mı diye bir bakıcam. bu durumda bu bir bug. acaba report etsem düzeltirler mi? daha önce 4 hata report etmiştim 3'ünü de düzeltmişlerdi. ama o zamanlar vfp'yi geliştirmeye devam ediyorlardı.

bug olarak report ettim. bakalım nolcak...

aslında sen foxpro takımını direk tanıyorsun. sen söylesen daha  iyi olurdu... roll

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