1

Konu: grd içinde verilerin görünmesi

arkadaşlar problemim şu  aşağıfaki kodlar form bağımsız çalıştığında sonuçları grd içinde gösteriyor. ama başaka bir formdan bu formu çalıştırdığımda sonuçlar grd de gözükmüyor uysa filtrelemelerde sorun yok browsla baktığımda filtrelemelerin çalıştığını görüyorum. sorun başka bir forumdan bu formu çalıştırdığımda grd objesi sonuçları göstermiyor.

ilk filtreleme options ın validi

SELECT randevu
public sart11,sart12
*sart11=""
    IF this.Value=1
        sart11 ='tarara=date()'
    ENDIF
    IF this.Value=2
        sart11 ='tarih=date()'
    ENDIF
    IF this.Value=3
        sart11 ='tarih >= date()-7 AND TARIH=<DATE()'
    ENDIF
    IF this.Value=4
        sart11 ='tarih >= date()-15 AND TARIH =< DATE()'
    ENDIF
    IF this.Value=5
        sart11 ='tarih >= date()-30 AND TARIH =< DATE()'
    ENDIF
    IF this.Value=6
        sart11 =".t."
    ENDIF
IF EMPTY(sart12)
    SET FILTER TO &sart11
    ELSE
    set filter TO &sart11 and &sart12
ENDIF
a=0
count to a
GO top
if a<1
wait window "şarta uygun hiç bir kayıt yok" nowa
set filt to
endif
wait window "bulunan kayıt sayısı : =" +str(a) nowa
go top
thisform.grdRandevu.Refresh
thisform.refresh


2.optionsun validi

SELECT randevu
public sart12
*sart12=""
    if ara2 =1
        sart12="aciklama='Ulaşıldı'"
    endif
    if ara2=2
        sart12="aciklama='Ulaşılamadı'"
    endif
    if ara2=3
        sart12="aciklama='Not bırakıldı'"
    endif
    if ara2=4
        sart12="aciklama='Mesaj bırakıldı'"
    endif
    if ara2=5
        sart12="aciklama='Telefon yanlış'"
    endif
    if ara2=6
        sart12="empty(aciklama)"
    endif
    if ara2=7
        sart12=".t."
    endif
IF EMPTY(sart12)
    SET FILTER TO &sart12
    else
    set filter TO &sart12 AND &sart11
ENDIF
a=0
count to a
if a<1
    wait window "şarta uygun hiç bir kayıt yok" nowa
    set filt to
else   
    wait window "bulunan kayıt sayısı : =" +str(a) nowa
ENDIF
ThisForm.grdRandevu.Refresh

go top
thisform.refresh


sonuçların görüleceği
grd in
afterrowcolcahnge :

LPARAMETERS nColIndex
SELECT hasta
LOCATE FOR no=no
thisform.Refresh


formun bufferı 2
randevunun buffer 5

2 Son düzenleyen, mrduyar (19.01.2007 10:29:03)

Re: grd içinde verilerin görünmesi

sorunnunla ilgilimi bilemiyorum ama locate den önce her zaman go top koymalısın.

LPARAMETERS nColIndex
SELECT hasta
LOCATE FOR no=no
thisform.Refresh


Visual Fox Pro
SELECT hasta

go top
LOCATE FOR no=no
thisform.Refresh
Bilmediğin Neyse Yanıldığındır.

3

Re: grd içinde verilerin görünmesi

Eğer grid 'in olduğu pencerenin  "WindowType" property sini "Modal" duruma çevirirsen sonuç alabilirsin.

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: grd içinde verilerin görünmesi

sağolun arkadaşlar "WindowType" modal yapınca sorun çözüldü

5

Re: grd içinde verilerin görünmesi

Turk atasozu:
public kullanan aglamaz

Visual Fox Pro
PUBLIC oForm

oForm = CREATEOBJECT('filterSample')
oForm.Show()
 
DEFINE CLASS filterSample as Form
    DataSession = 2
 
    ADD OBJECT grdEmployee as grid WITH ;
        Left = 10,Top = 10, Height = 200, Width = 500
    ADD OBJECT optTitle as optionGroup WITH Left = 10, Top = 220
    ADD OBJECT optCountry as optionGroup WITH Left = 10, Top = 220
 
 
    PROCEDURE load
        USE (_samples+'data\employee')
    ENDPROC
 
    PROCEDURE init
        this.AddProperty('aTitles[1]')
        this.AddProperty('aCountries[1]')
        SELECT distinct title FROM employee WHERE !EMPTY(title) ;
            UNION ;
            select '--Hepsi--' as title FROM employee ;
            INTO ARRAY this.aTitles
 
        SELECT distinct country FROM employee WHERE !EMPTY(country) ;
            UNION ;
            select '--Hepsi--' as country FROM employee ;
            INTO ARRAY this.aCountries
 
 
        ASORT(this.aTitles)
        ASORT(this.aCountries)
 
        this.InitOptionGroups()
    ENDPROC
 
    PROCEDURE UpdateFilter
        SELECT employee
        DO case
            CASE this.optTitle.Value=1 AND this.optCountry.Value=1
        SET FILTER TO
            CASE this.optTitle.Value=1
        SET FILTER TO Country = thisform.aCountries[thisform.OptCountry.Value]
            CASE this.optCountry.Value=1
        SET FILTER TO Title = thisform.aTitles[thisform.optTitle.Value]
            OTHERWISE
        SET FILTER TO Title = thisform.aTitles[thisform.optTitle.Value] AND ;
            Country = thisform.aCountries[thisform.OptCountry.Value]
        endcase
        this.grdEmployee.Refresh
    ENDPROC
 
    PROCEDURE optTitle.Valid
        thisform.UpdateFilter()
    endproc
 
    PROCEDURE optCountry.Valid
        thisform.UpdateFilter()
    endproc
 
    PROCEDURE InitOptionGroups
        WITH this.optTitle
            .ButtonCount = ALEN( this.aTitles, 1 )
            FOR ix = 1 TO ALEN( this.aTitles, 1 )
                .Buttons[m.ix].Caption = this.aTitles[m.ix,1]
                .Buttons[m.ix].Autosize = .T.
            ENDFOR
            .AutoSize = .T.
            .Value = 1
        endwith
 
        WITH this.optCountry
            .Left = .Parent.optTitle.Left + .Parent.optTitle.Width + 10
            .ButtonCount = ALEN( this.aCountries, 1 )
            FOR ix = 1 TO ALEN( this.aCountries, 1 )
                .Buttons[m.ix].Caption = this.aCountries[m.ix,1]
                .Buttons[m.ix].Autosize = .T.
            ENDFOR
            .AutoSize = .T.
            .Value = 1
        ENDWITH
        this.Height = this.optTitle.Top + this.optTitle.Height + 10
        this.Width  = MAX(this.grdEmployee.Left + this.grdEmployee.Width,;
            this.optCountry.Left + this.optCountry.Width) + 10
        SELECT employee
        FOR ix=1 TO FCOUNT()
            IF FIELD(m.ix) == 'TITLE'
                this.grdEmployee.Columns(m.ix).ColumnOrder = 1
            endif
            IF FIELD(m.ix) == 'COUNTRY'
                this.grdEmployee.Columns(m.ix).ColumnOrder = 2
            endif
        endfor
    endproc
enddefine

6

Re: grd içinde verilerin görünmesi

cetinbasoz yazdı:

Turk atasozu:
public kullanan aglamaz

Visual Fox Pro
PUBLIC oForm

oForm = CREATEOBJECT('filterSample')
oForm.Show()
 
DEFINE CLASS filterSample as Form
    DataSession = 2
 
    ADD OBJECT grdEmployee as grid WITH ;
        Left = 10,Top = 10, Height = 200, Width = 500
    ADD OBJECT optTitle as optionGroup WITH Left = 10, Top = 220
    ADD OBJECT optCountry as optionGroup WITH Left = 10, Top = 220
 
 
    PROCEDURE load
        USE (_samples+'data\employee')
    ENDPROC
 
    PROCEDURE init
        this.AddProperty('aTitles[1]')
        this.AddProperty('aCountries[1]')
        SELECT distinct title FROM employee WHERE !EMPTY(title) ;
            UNION ;
            select '--Hepsi--' as title FROM employee ;
            INTO ARRAY this.aTitles
 
        SELECT distinct country FROM employee WHERE !EMPTY(country) ;
            UNION ;
            select '--Hepsi--' as country FROM employee ;
            INTO ARRAY this.aCountries
 
 
        ASORT(this.aTitles)
        ASORT(this.aCountries)
 
        this.InitOptionGroups()
    ENDPROC
 
    PROCEDURE UpdateFilter
        SELECT employee
        DO case
            CASE this.optTitle.Value=1 AND this.optCountry.Value=1
        SET FILTER TO
            CASE this.optTitle.Value=1
        SET FILTER TO Country = thisform.aCountries[thisform.OptCountry.Value]
            CASE this.optCountry.Value=1
        SET FILTER TO Title = thisform.aTitles[thisform.optTitle.Value]
            OTHERWISE
        SET FILTER TO Title = thisform.aTitles[thisform.optTitle.Value] AND ;
            Country = thisform.aCountries[thisform.OptCountry.Value]
        endcase
        this.grdEmployee.Refresh
    ENDPROC
 
    PROCEDURE optTitle.Valid
        thisform.UpdateFilter()
    endproc
 
    PROCEDURE optCountry.Valid
        thisform.UpdateFilter()
    endproc
 
    PROCEDURE InitOptionGroups
        WITH this.optTitle
            .ButtonCount = ALEN( this.aTitles, 1 )
            FOR ix = 1 TO ALEN( this.aTitles, 1 )
                .Buttons[m.ix].Caption = this.aTitles[m.ix,1]
                .Buttons[m.ix].Autosize = .T.
            ENDFOR
            .AutoSize = .T.
            .Value = 1
        endwith
 
        WITH this.optCountry
            .Left = .Parent.optTitle.Left + .Parent.optTitle.Width + 10
            .ButtonCount = ALEN( this.aCountries, 1 )
            FOR ix = 1 TO ALEN( this.aCountries, 1 )
                .Buttons[m.ix].Caption = this.aCountries[m.ix,1]
                .Buttons[m.ix].Autosize = .T.
            ENDFOR
            .AutoSize = .T.
            .Value = 1
        ENDWITH
        this.Height = this.optTitle.Top + this.optTitle.Height + 10
        this.Width  = MAX(this.grdEmployee.Left + this.grdEmployee.Width,;
            this.optCountry.Left + this.optCountry.Width) + 10
        SELECT employee
        FOR ix=1 TO FCOUNT()
            IF FIELD(m.ix) == 'TITLE'
                this.grdEmployee.Columns(m.ix).ColumnOrder = 1
            endif
            IF FIELD(m.ix) == 'COUNTRY'
                this.grdEmployee.Columns(m.ix).ColumnOrder = 2
            endif
        endfor
    endproc
enddefine


deneyimler : Kılavuzu fox4um.com olan yolda kalmaz smile bu daha doğru galiba. Hocam sağol harıkasın bu benimkinden çokdaha hızlı ve hatasız çalışıyor

7

Re: grd içinde verilerin görünmesi

Gene de filter konusunda tavsiye: Filter kullanma:)
Alternatifleri dene:
set key to
cursor
view
Hicbiri istedigin degilse son care filter.

8

Re: grd içinde verilerin görünmesi

cetinbasoz yazdı:

Gene de filter konusunda tavsiye: Filter kullanma:)
Alternatifleri dene:
set key to
cursor
view
Hicbiri istedigin degilse son care filter.


haklısın hocam ama bu komutlar öğrenmem lazım eskiden yoktu bunlar mecburen set filt diyorduk.
ama şimdi görüyorumki filter çok yavaş çalışıyor. Öğrenecez yavaş yavaş sayenizde

9

Re: grd içinde verilerin görünmesi

avrasya34 yazdı:

...ama şimdi görüyorumki filter çok yavaş çalışıyor. Öğrenecez yavaş yavaş sayenizde


filter eskiden yavaş çalışıyordu. optimizasyon desteği artık filterde de var.

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

10

Re: grd içinde verilerin görünmesi

Metin,
NO Filter:) Tek derdi hiz degil. Bazen son derece sacmalayan sonuclar alabilirsin, gridde scrollbar sacmalar, seek() kayit bulamaz (bunu duzelttiler gerci)  vs.

11

Re: grd içinde verilerin görünmesi

cetinbasoz yazdı:

Metin,
NO Filter:) Tek derdi hiz degil. Bazen son derece sacmalayan sonuclar alabilirsin, gridde scrollbar sacmalar, seek() kayit bulamaz (bunu duzelttiler gerci)  vs.


foxpro dos'ta BROWSE FOR diye bir şansımız vardı. çok güzel çalışıyordu o. şimdi VFP de gridlerde bu imkan yok. bu biraz can sıkıcı oluyor. DOS tan çevirdiğim programlarda hızlı bir çözüm olarak set filter kullanıyorum bazen. set key her zaman işe yaramıyor. select sql de yapının değişmesini gerektiriyor. windows a acilen çevirmem gereken o kadar çok kod var ki... sad

söylediğin gridde scroll bar saçmalamasını göze alabilirim. windows'a geçme sevincinden kullanıcılar onu hazmedebilir. bir sonraki versiyonda düzeltirim onu... seek zaten kullanmıyorum bu tür yerlerde ki onu da düzelttiler diyorsun.

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

12

Re: grd içinde verilerin görünmesi

Tamam o zaman en azindan dosya uzerinde dolasirken degeri degismeyecek expression kullan:) Basit bir sacmalatma ornegi:

set filter to tarih >= ttod(datetime())

browse

ve bunu saat 23:59:55'te calistir:)

13

Re: grd içinde verilerin görünmesi

hocalarım sorunum malesef devam ediyor ... çözüldü zannetmişim ama malesef olmadı.
ilk formdaki relasyon 2. formdaki relasyona izin vermiyor galiba relkasyonu off yapmama ragmen.
ilk formda hasta.no=randevu.no relasyonu var ikincisindede bunun tam tersi olamlı. randevunun gridindeki kayıtlarda dolaşınca hastanın.txt leri kendini yenilemiyor. randevu.grd.afterrowcolchangine thisform.refresh yazmam sonucu değiştirmiyor locate kullanıncada kayıtlar içinde dolaşamıyorum.

14

Re: grd içinde verilerin görünmesi

formalrin datasession'ına bak. 2 olsun.

15

Re: grd içinde verilerin görünmesi

cetinbasoz yazdı:

formalrin datasession'ına bak. 2 olsun.


sağol hocam 2 ci formun dxatasasionunu pas geçmişim