1

Konu: Multi User Icin ...

merhaba
formu icelerken bir arkadaşın (adını unuttum özür. yazdığım uçmasın diye dönüm arayamadım)

"**
MULTI USER ICIN ILK 4 SART

1. SET EXCLUSIVE OFF.
2. SET MULTILOCKS ON
3. formdaki dataenvironmenttta tabloların buffering mode ayarı "5" olmalı
4. form  datasession ayarı Private olarak ayarlanacak
"**

ibarisin gördüm..
bu 4. seçeneğin nedenini anlayamadım. private olması neden gerekiyor ?
bilgi için şimdiden teşekkürler..

2

Re: Multi User Icin ...

http://www.fox4um.com/viewtopic.php?id=208

buraya bi bak. bence soru sormadan arama kısmını bi kullan çok faydası oluyor.

Bilmediğin Neyse Yanıldığındır.

3

Re: Multi User Icin ...

o dediğini zaten yapmıştım ve sorumun tam cevabını bulamadım.

tam sorum şu
private olması bir zorunlulukmudur ? ki değil ben private kullnamadan programlıyorum. ama bu formda privete olmasını ısrarla önerliliyor. Evet bir çok durumda private olması programlama tekniği ve kalitesi için geçerli olabilir.
ama multiuser bir programda neden temel 4 şarttan biri olarak bahsediliyor ?
private kullnamazsam mulituser sorun mu yaratır? yada vfp hatalı işlemler mi yapar ?

yani bu bir teknik zorunlulukmudur ? yoksa tecrübe ve bilginin bir seçimimidir?

sorumun özü buydu..

4

Re: Multi User Icin ...

Private olması bir zorunluluk değil bir tercihtir. Private çalıştığın formları birden fazla çalıştırdığında sorunsuz olarak kullanabilirsin. Bu işi sanki birden fazla bilgisayarda programın çalışıyormuş gibi düşünebilirsin.

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

5

Re: Multi User Icin ...

ben bu ikisine de katılmıyorum...

aydın yazdı:

merhaba
...2. SET MULTILOCKS ON
3. formdaki dataenvironmenttta tabloların buffering mode ayarı "5" olmalı
...

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

6 Son düzenleyen, ercan (05.04.2007 21:27:05)

Re: Multi User Icin ...

eğer sadece bir kayıt değiştirilecekse ya da eklenecekse tablebuffer=3 && row       olmalı bence
eğer tüm tablo üzerinde kayıtlar  değiştirilecekse tablebuffer=5 ve set multilocks on olmalı

yanlışım var mı?

7

Re: Multi User Icin ...

aynı anda birden çok kaydı update veya revert yapabilmek istersen multilock yapman gerekir. yoksa gereksiz.

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

8

Re: Multi User Icin ...

aydın yazdı:

merhaba
formu icelerken bir arkadaşın (adını unuttum özür. yazdığım uçmasın diye dönüm arayamadım)

"**
MULTI USER ICIN ILK 4 SART

1. SET EXCLUSIVE OFF.
2. SET MULTILOCKS ON
3. formdaki dataenvironmenttta tabloların buffering mode ayarı "5" olmalı
4. form  datasession ayarı Private olarak ayarlanacak
"**

ibarisin gördüm..
bu 4. seçeneğin nedenini anlayamadım. private olması neden gerekiyor ?
bilgi için şimdiden teşekkürler..


Boyle sartlar yok. Ancak ben de olsam bunlari onerirdim. Onlarsız da olur ama başın agrır.

9 Son düzenleyen, aydın (06.04.2007 01:33:53)

Re: Multi User Icin ...

aslında benim başıma gelenlerden sonra multiuser için bunlarda yeterli değil.

örnek bir başıma gelen olay çözümü varsa lütfen bana bildirin..

olay şu :
a ve b kullanıcıları aynı table da aynı record u edit ediyor.. TUTAR alanında düzeltme yapma yetkisi sadece b kullanıcısında... bufferring =5
a kayda geliyor.. vfp kaydın kopyasını bufferde tutarak tableupdate oluncaya kadar yapılan revizyonları bufferda tutuyor..
b de a kullanıcısından sonra aynı kayıt üzerine geliyor ve TUTAR bilgisini değiştiriyor...ve tableupdate işlemi ile kaydı kalıcı hale getiriyor.. ancak a kullanıcısının bufferında hala TUTAR ın eski değeri yada boş değeri var..
a kullanıcı da tableupdate işlemi yapınca eski TUTAR bilgiside kayda tekrar yazılıyor ve b kullanıcısının yapmış olduğu TUTAR düzeltmesi ne yazıkki silinmiş oluyor..
oysa ben hep tableupdate işlemi sadece değişen alanları etkiler sanıyordum.
oysa buffering=5 olunca değişen alanlar değil tüm alanlar tekrar yazılıyor..  benim yaşadığım ve anlayıncaya kadar nerdeyse kafa yediğim bir durum..gözden kaçırmışım..
umarım anlatabildim ...
bunun pratik bir çözümü var mı? örneğin
denemedim ama
TableUpdate(nRecords, lForce, cAlias, ArrayName)
foksiyonunda yer alan lforce bu işe mi yarıyor ? açıkcası şüphedeyim artık..

ayrıca...
datasession private olması yada olmaması bu sorunun çözümüne yardımcı olurmu?

10

Re: Multi User Icin ...

Bence OldVal() ve CurVal() özelliklerini kullanarak ikinci kullanıcı kaydı saklarken uyarabilirsin,
Dikkat, bu kayıt başka kullanıcı tarafından değiştirildi diye veya record lock ile ikinci kullanıcıya hiç izin verme değişiklik yapmasına. Böylece bu sorunun kalmamış olur.

11 Son düzenleyen, aydın (06.04.2007 10:29:53)

Re: Multi User Icin ...

dediğim gibi belki bu 4 şartta yetersiz kalıyor bazen.. flock ,rlock kullanmak da gerekiyor..


TableUpdate(nRecords, lForce, cAlias, ArrayName)

foksiyonunda yer alan lforce tam ne işe yarıyor ?

benim ingilizcem yetmedi.. smile

ayrıca
datasession private olması yada olmaması bu sorunun çözümüne yardımcı olur mu?

12

Re: Multi User Icin ...

lForce zor kullan demek:) Yani baskasi degistirdiyse de beni ilgilendirmiyor ustune yazmak istiyorum ben ne dersem o olur hesabi. Son yazan kazanir modeli.
lForce .F. ise tableupdate() degisikligin oldugunu goruyor ve .F. donuyor. O zaman niye basaramadigini kontrol etmen gerekiyor. Tam senin istedigin modelin ornekli anlatimi help dosyasinda var. Transaction'a da bak. rlock(), flock() iyi cozumler degil. Transaction icindeyse otomatik rlock() var. Hangisini nasil ne zaman kullanacagin cok uzun bir konu (komple kitap bolumleri ayiriliyor ona).

13

Re: Multi User Icin ...

Kendi tecrübemle kabaca ben şu işlemeri yapıyorum.
Private Datasession kullanıyorum. Dolayısıyla formun Load'unda

Visual Fox Pro
Set Deleted On

Set Exclusive Off
Set Reprocess To 3 Automatic
Set MultiLocks On

Kullancağım tabloları buffer (5) modda açıyorum.
Gerekli insert, update ve delete işlemlerini yapıyorum. en son

Visual Fox Pro
Begin Transaction

If TableUpdate(.T., .T., "TabloAdi1") And TableUpdate(.T., .T., "TabloAdi2")
    End Transaction
    MessageBox("İşlem başarılı!", 64, "Bilgi")
Else
    Rollback
    = TableRevert(.T., "TabloAdi1")
    = TableRevert(.T., "TabloAdi2")
    MessageBox("İşlem başarasız!", 16, "Hata")
EndIf
/o---------------------o\
     www.haser.com
\o---------------------o/

14

Re: Multi User Icin ...

anladığım kadarı ile sadece değişen field ları tableupdate() ile yazmanın doğrudan bir yolu yok.
ek işlemler yapmak gerekiyor.

yardımlarınız için teşekkürler . bayağı bir ders çalışacağız demektir..:)

15

Re: Multi User Icin ...

aydın yazdı:

anladığım kadarı ile sadece değişen field ları tableupdate() ile yazmanın doğrudan bir yolu yok.
ek işlemler yapmak gerekiyor.

yardımlarınız için teşekkürler . bayağı bir ders çalışacağız demektir..:)


doğrusu bu durumu şimdiye kadar hiç farketmedim. ilginç. ben son kaydedene bakarım. diğer işlerle kafamı yormam.

ama çözümü var:
view oluştur, sonra da hangi fieldleri updatable yapmak istiyorsan onu işaretle.

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