1

Konu: SET PROCEDURE ile ilgili

merhaba üsdatlar,geliştirdiğim projemde,daha önceden yazdığım bir projenin içerisinde kullandığım  fonksiyonları çağırıp kullanmam gerekiyor.Kullanmak istediğim fonksiyonlar her iki proje içinde ortak.ihtiyacım olan Kodları form içerisinden  çağırırken SET PROCEDURE to ORTAK.PRG diye set etmezsem,kodlara ulaşamıyorum.Her seferin de PRG yi set edip fonksiyonları çağırmak pek mantıklı gelmiyor bana.Programı çalıştırdığımda Tek seferde Kullanmak istediğim PRG yi nasıl SET ederim?.Görüşleriniz için şimdiden teşekkür ederim.:)

En büyük sermaye nakit,nakit sermaye vakittir...

2

Re: SET PROCEDURE ile ilgili

tüm fonksiyonları ana prg nin içine göm ve ana form u bu prg den çalıştır , her seferinde fonksiyonları set procedure ile çağırmana  gerek kalmadan sorunsuz çalışacaktır.

3

Re: SET PROCEDURE ile ilgili

ercan üsdadım,ana prg nin içinde olmaz neden? çünki 2 ayrı proje bu bahsettiğim.O zaman kodları iki kere tekrarlamış olmazmıyım?kullandığım fonksiyonlar iki projede de aynı işi yapıyor.Ancak projeler farklı dizinlerde çalışıyor tabiiki,Dolayısıyla çağırarak kullanmak gerek diye düşünüyorum.yorumun için teşekkür ederim.

En büyük sermaye nakit,nakit sermaye vakittir...

4

Re: SET PROCEDURE ile ilgili

set procedure'u ana icinde yalnizca bir kere kullaninca olmuyor mu?
Ben "Set procedure" komutu birakali yillar gecti. Yan etkileri dolasi ile tavsiye de etmem. Basit ve net bir yan etki:
2 adet procedure dosyan var ve ikisinde de "Hesapla" adinda bir procedure var, yaptiklari da cok farkli. Hangisini calistirdigindan nasil emin olursun, cevabi var ama zahmete degmez. Set procedure yerine classlari kullan bence o zaman NewObject() ile isler rahat.

5

Re: SET PROCEDURE ile ilgili

çetin üsdadım demek istediğinizi anladım sanırım.dediğiniz doğru,aynı isime ait 2 foksiyon olsa (ki var) o zaman hangisinin çalışacağı bir problem.NewObject()  konusuna biraz daha açıklık getirebilir miyiz?

En büyük sermaye nakit,nakit sermaye vakittir...

6

Re: SET PROCEDURE ile ilgili

cetinbasoz yazdı:

set procedure'u ana icinde yalnizca bir kere kullaninca olmuyor mu?
Ben "Set procedure" komutu birakali yillar gecti. Yan etkileri dolasi ile tavsiye de etmem. Basit ve net bir yan etki:
2 adet procedure dosyan var ve ikisinde de "Hesapla" adinda bir procedure var, yaptiklari da cok farkli. Hangisini calistirdigindan nasil emin olursun, cevabi var ama zahmete degmez. Set procedure yerine classlari kullan bence o zaman NewObject() ile isler rahat.


bir problemi de set proc ile bir .plb dosyasını açarsan mevcut set proc uçuyordu. windows'ta da aynı problem devam ediyor mu bilmem ama ben de ondan sonra bırakmıştım...

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

7

Re: SET PROCEDURE ile ilgili

set procedure ile genelde icinde bir dizi procedure olan dosyalar aciliyor ( class kodu da olabilir - simdilik ilk durum oldugunu varsayalim):

Visual Fox Pro
* programlib1.prg

procedure KareAl( tnValue )
return m.tnValue ^ 2
endproc
 
Procedure FullName( tcFirstName, tcLastName )
  return m.tcFirstName - (' ' + m.tcLastName )
endproc
 
* diger procedure ....

Simdi bunu class yapsak topu topu basi ile sonuna bir satir gerekiyor

Visual Fox Pro
* programlib1.prg

define class Prosedurlerim as Custom
 
procedure KareAl( tnValue )
return m.tnValue ^ 2
endproc
 
Procedure FullName( tcFirstName, tcLastName )
  return m.tcFirstName - (' ' + m.tcLastName )
endproc
 
* diger procedure ....
enddefine

Bir baskasi:

Visual Fox Pro
* programlib2.prg

define class Prosedurlerim as Custom
 
procedure KareAl( tnValue )
return m.tnValue ^ 2
endproc
 
Procedure FullName( tcFirstName, tcLastName )
  return m.tcLastName - (', ' + m.tcFirstName )
endproc
 
* diger procedure ....
enddefine


Ustelik artik class oldugundan extra property filan ekleme sansi var. Parametre gecisleri "this" nedeniyle azalir vs.

FullName proceduru bunun gibi 10 tane daha class'imiz var ve hepsinde var. Ayirmasi cok basit ama artik:

oLib1 = NewObject("Prosedurlerim", "programlib1.prg")
oLib2 = NewObject("Prosedurlerim", "programlib2.prg")

use employee
? oLib1.FullName(employee.FirstName, employee.LastName)
? oLib2.FullName(employee.FirstName, employee.LastName)

oLib1, oLib2 alias gibi hangisini cagirdigin acik (oysa is daha da karmasik olsun diye her ikisinde de class adi "Prosedurlerim").

Bu arada:
local oLib1 as "Prosedurlerim" of "programlib1.prg"

dersen, NewObject ile yaratmadan oncel bile intellisense vasitasiyla icindeki property metod vs goruluyor:

oLib1. (intellisense devrede)

8

Re: SET PROCEDURE ile ilgili

Herkese merhaba,

Set Procedure To ile ilgili başıma çok ilginç bir sorun geldi.

Çetin, hatırlar mısın bilemiyorum ama bir ara seni rahasız etmiş ve bir projemde akşam üstüne doğru formların çok yavaş açıldığını söylemiştim. Bir çok yere bakmıştık. Hafızaya, dataenvironment'e, session'lara vs. özetle sorun şuydu; projemde kullanıcılar özellikle öğleden sonra herhangi bir formu açtıklarında çok yavaş açılıyordu. Programı kapatıp açtıklarında ise program çok hızlanıyordu. En sonunda sorunun Set Procedure To'dan kaynaklandığını bulduk.

Programımında Ana.prg isminde başlangıç komutlarımın ve genel fonksiyonların tanımlandığı bir prg dosyam var. Tabi formlarda bu bu ana.prg dosyasındaki fonksiyonları kullanıyorum. Tasarım sırasında programı hep ana.prg'den çalıştırmak yerine sadece üzerinde çalıştığım formu çalıştırarak test etmek istediğimden formun base class'ına

Visual Fox Pro
If Not "ANA" $ Set("Procedure")

    Set Procedure To Ana Additive
EndIf

Yazmıştım. Ancak program exe'den çalıştığında ANA isminde bir prg dosyasını görmüyor procedure dosyalarının arasında ANA yerine exe dosyasının ismi görünüyor. Dolayısıyla yazmış olduğum koşul ifadesi her zaman için doğru oluyor ve her form açıldığında procedure listesine exe'nin adreside ekleniyor. Procedure listesi o kadar çok büyüyordu ki form açılmak istediğinde classlarımın kullandığı fonksiyonlar (grid, header, column vs) procedureleri bulmak için çok uzun bekliyordu. Bu sorunu şu şekilde çözdüm.

Visual Fox Pro
If Version(2) <> 0 And Not "ANA" $ Set("Procedure")

    Set Procedure To Ana Additive
EndIf

Aman dikkat beni çok uğraştırdı big_smile

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

9

Re: SET PROCEDURE ile ilgili

çetin üsdadım, ve diğer arkadaşlar açıklamalarınız için teşekkür ederim.

En büyük sermaye nakit,nakit sermaye vakittir...

10 Son düzenleyen, cetinbasoz (17.07.2007 11:40:31)

Re: SET PROCEDURE ile ilgili

Tarkan,
Hatirladim, cozecek birsey gelmemisti aklima:) Sevindim bulduguna, hakikaten cok zor bulunacak bir nedenmis. Gene de cozumu biraz tehlikeli olmamis mi? Soyle daha iyi geliyor(sen gene de calisana dokunma:)

Visual Fox Pro
ALINES( aProcedures, SET("Procedure"), 1, ',' )

if ASCAN( aProcedures, 'ana.fxp', 1, -1, 1, 1+2+4) = 0 ;
   and ASCAN( aProcedures, FULLPATH('ana.fxp'), 1, -1, 1, 1+2+4) = 0
   set procedure to ana additive
endif

11

Re: SET PROCEDURE ile ilgili

Çetin,
O günden sonra 3-5 defa daha sebep aramasında bulundum. Sonra ümidim hepten giderken nasıl oldu bilemiyorum buldum big_smile

Ana.prg benim main programım. Aslında ben iki tane procedure dosyası kullanıyorum. Birincisi Ozel diğeri ise Grid class'ım için Grid.prg

Grid.prg içerisinde Column, Header, (Gridde kullanılan) TextBox ve EditBox classlarım var. Nedense bu grid.prg'yi Set Procedure To ile eklemezsem bazen formları modify ederken sorun yaşıyordum. (beklide bu VFP'nun release olmamış versiyonundaydı ama ben de o tarihten beri öyle kullanıyorum)

Neyse konuya geri döneyim cool

Exe'nin içerisinden Set("Procedure") ile baktığımda
OZEL.FXP, GRID.FXP, D:\PROJELER\PROJE\QUIPUS\QUIPUS.EXE
şeklinde yazıyor. (ANA.FXP yerine D:\PROJELER\PROJE\QUIPUS\QUIPUS.EXE yazıyor)

Dolayısıyla senin kodunda Ana için değil ama diğerleri için çok daha doğru görünüyor.
Zaten senin gibi kod ne zaman yazabilir onu da bilmiyorum tongue

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

12

Re: SET PROCEDURE ile ilgili

cetinbasoz yazdı:

Bu arada:
local oLib1 as "Prosedurlerim" of "programlib1.prg"

dersen, NewObject ile yaratmadan oncel bile intellisense vasitasiyla icindeki property metod vs goruluyor:

oLib1. (intellisense devrede)


hocam intellisense devreye girmiyor neden olabilir

13

Re: SET PROCEDURE ile ilgili

intellisense böyle devreye girmez. ancak class'ını vcx te kontrol olarak tanımlar ve o kontrolü form'a yapıştırıp ta kullanırsan o zaman intellisense devreye girer.

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

14

Re: SET PROCEDURE ile ilgili

Neden girmesin? Ben hep oyle kullaniyorum.
Girmiyorsa digeri daha compile edilmemistir.