1 Son düzenleyen, Gökçe Özçınar (11.06.2007 16:37:22)

Konu: Şubelerden table alma

Sevgili ustalar ve arkadaşlar..
Sanırım bir table'a uzaktan erişim söz konusu olamıyor. Ben şubelerden bir tableyi bir şekilde ana makineye ulaştırmam gerekiyor. Şehirler farklı olduğundan Local area network söz konusu değil. Tableyi yada içindeki kayıtları bir şekilde internet üzerinden servere taşımam acaba mümkünmü ?

Örneğin http://www.fox4um.com/viewtopic.php?id=256 ' deki örnekte olduğu gibi  ftp get ile netten dosya get edebiliyoruz. VFP ile o adrese söz konusu dosyayı upload edebilirsen sanırım iş hallolacak.

Şimdiden çok teşekkür ederim.

2

Re: Şubelerden table alma

Konu kısmen çözüldü. Yukarıdaki linkteki Soykanın koduyla host'a daha önceden kopyalanan bir dbf dosyasını kolayca indirebiliyorum. Şimdi herhangi bir şubeden o vfp ile host'a söz konusu dbf yi kopyalamaya kaldı.

3

Re: Şubelerden table alma

tam tersi ftp_put smile yapacaksin

Visual Fox Pro
**********************************************************************************

*... FTPPut.PRG ...*
 
PARAMETERS lcHost, lcUser, lcPassword, lcSource, lcTarget, lnXFerType
 
*.................................................................................
*:   Usage: DO ftpput WITH ;
*:         '[url=ftp://ftp.host]ftp.host[/url]', 'name', 'password', 'source.file', 'target.file'[, 1 | 2]
*:
*:  Where:  lcHost     = Host computer IP address or name
*:          lcUser     = user name - anonymous may be used
*:          lcPassword = password
*:          lcSource   = source file name (remote)
*:          lcTarget   = target file name (local)
*:          lnXFerType = 1 (default) for ascii, 2 for binary
*.................................................................................
 
DECLARE INTEGER InternetOpen IN wininet.DLL;
   STRING  sAgent,;
   INTEGER lAccessType,;
   STRING  sProxyName,;
   STRING  sProxyBypass,;
   STRING  lFlags
 
DECLARE INTEGER InternetCloseHandle IN wininet.DLL INTEGER hInet
 
DECLARE INTEGER InternetConnect IN wininet.DLL;
   INTEGER hInternetSession,;
   STRING  lcHost,;
   INTEGER nServerPort,;
   STRING  lcUser,;
   STRING  lcPassword,;
   INTEGER lService,;
   INTEGER lFlags,;
   INTEGER lContext
 
DECLARE INTEGER FtpPutFile IN wininet.DLL;
   INTEGER hConnect,;
   STRING  lpszLocalFile,;
   STRING  lpszNewRemoteFile,;
   INTEGER dwFlags,;
   INTEGER dwContext
 
PUBLIC hOpen, hftpSession
 
lcHost     = ALLTRIM(lcHost)
lcUser     = ALLTRIM(lcUser)
lcPassword = ALLTRIM(lcPassword)
lcSource   = ALLTRIM(lcSource)
lcTarget   = ALLTRIM(lcTarget)
 
IF connect2ftp (lcHost, lcUser, lcPassword)
   WAIT WINDOW 'Transferring....' NOWAIT
   IF FtpPutFile(hftpSession, lcSource,;
         lcTarget, lnXFerType, 0) = 1
      WAIT WINDOW lcSource + ' transferred.' TIMEOUT 2
   ENDIF
 
   = InternetCloseHandle (hftpSession)
   = InternetCloseHandle (hOpen)
ENDIF
 
*..................... connect2ftp .........................................
*...  Makes sure there is actually a valid connection to the host
FUNCTION  connect2ftp (lcHost, lcUser, lcPassword)   
   * open access to Inet functions   
   hOpen = InternetOpen ("vfp", 1, 0, 0, 0)   
 
   IF hOpen = 0   
      ? "Unable to get access to WinInet.Dll"   
      RETURN .F.   
   ENDIF   
 
   *... The first '0' says use the default port, usually 21.
   hftpSession = InternetConnect (hOpen, lcHost,;
      0, lcUser, lcPassword, 1, 0, 0)   &&... 1 = ftp protocol
 
   IF hftpSession = 0   
   * close access to Inet functions and exit   
      = InternetCloseHandle (hOpen)   
      ? "ftp " + lcHost + " is not available"   
      RETURN .F.   
   ELSE   
      ? "Connected to " + lcHost
   ENDIF   
RETURN .T.   
RETURN
*** End of ftpPut.PRG *************************************************************

4

Re: Şubelerden table alma

Üstadım Soykan ...

Hepimiz kumsalda kumdan kaleler yapıyoruz. Aramızdaki tek fark siz üstadlarımız FOXYANUS'u aşmış karşı sahildesiniz.

Tüm üstadlarıma sonsuz teşekkürlerimle....

5

Re: Şubelerden table alma

iltifat için teşekkürler ama bende hala kumdan kaleler yapiyorum sad belki bir kac konuda daha onceki bir tecrubemi paylasmisimdir.

VFP denizinde yüzmeye devam edicem .... smile

6

Re: Şubelerden table alma

SH-DSL Teknolojisi ile uzak bir sistemde yerel ağda çalışıyormuş gibi çalışabilirsiniz.  Bu işi yapan bir hosting firmasından özel bir kira bedeli ile yapılabilir. Bir noktanın yaklaşık aylık maliyeti 1,250 YTL civarında (2 bm download - 2 mb upload reel transfer hızı) . Ancak sistem performansı ve verimliliği yönünden internete göre çok daha performanslı. Maliyeti biraz yüksek ama  kurumsal gereklilik söz konusu olduğunda istenen sonuç  kesin oluyor ... Ayrıca geçenlerde Çetin üstad ile bir şey denedik, Foxpro table larını SQL SERVER içerisinden Ouery  Analyser ile real time olarak sorgulayabiliryorsunuz. Bu sistem biraz yavaş işliyor ama sonuç fena sayılmaz. Bir denemenizi öneririm.

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ü

7

Re: Şubelerden table alma

Ugur, SQL serverdaki yavaslik o islemin yavas olmasindan kaynaklanmiyor. Query Analyzerda sonuclari gosteren grid sanirim VB tabanli, yavaslamaya o neden oluyor. Ayni islem SQL2005 ile cok hizli, ya da arada SQL analyzeri degil de sorguyu VFP'den SQLExec() ile yaparsan. Ayni anda SQL server uzerinden ilginc seyler yapmak mumkun (ki bir kere excel ile yapmistim). Mesela:

MS Excel, VFP, Access ve SQL serverda tablolarin var. Bunlarin bir sekilde join ile baglanip sana sonuc gerekiuyor. O kullandigimiz teknikle VFP'den bir query hazirlayip, SQL server'dan calistirmasini ve sonucu vermesini isteyebilirsin. Hiz acisindan zamanlamasi yapilmis bir testde:
SQL server'da 120binden biraz fazla kaydi, dogrudan SQL server pivot yapip sonucu almak 0.3 saniye civarindaydi. O datayi VFP'ye alip, pivot islemini orada yapmak 0.5 sn civarinda. Bir baska islemde (Tarkan sormustu soruyu hatirladigim kadariyla) 1 milyon civarinda kaydin icinden birkac bin kaydin "proximity" yontemiyle eslenmesi (birisinde tarih&saat ve kur degerleri, digerinde tarih&saat ve miktar, fiyat, doviz var. O tarih saate karsilik gelen kur yok ama ona en yakin alinmis kur) 1sn altinda gerceklesti (ilk gordugumde ben de inanamadim - SQL server VFPnin hiz kralligina son verdi galiba, desktopda hala kral VFP:)

VFP tablolarina uzaktan erisime gelince is biraz farkli. VFP tablolari "dosya" tabanli, SQL server gibi sistemler ise "servis" tabanli. VFP dosyasina ulasmak o nedenle bir cesit herhangi bir text dosyasina ulasmaya benziyor. Bunu yapmanin N tane yolu var, 2 ucun ne kadar senin kontrolunde olduguna bagli. Mesela yillar oncesinden beri calisan bir yol uzak sisteme senin kullanici olarak tanimli olman. Windowsta duz iki makinenin baglanmasi gibi. O sekilde baglanirsan, uzaktaki makine ister dunyanin obur ucunda ister yan odada olsun bir cesit Intranet yontemi. Bu yontemin avantaji real time multiuser kullanim. Ancak ne yazikki degisen isletim sistemleri ve guvenlik arttirimlari, eskiden kolay olan bu yontemi neredeyse ayni odadaki 2 makine icin bile cekilmez hale getirdi. Simdi illaki bir server araya girecek efektif birseyler yapabilmek icin.
Bir baska yontem windows sockets. Soket yonteminde de iki ucun kontrol altinda olmasi ve birinin dinleyici olamsi lazim. Dinleyiciye read-write islemleri yapabiliyorsun o zaman. Uygulamasi cok efektif ve hizli ama ne yazikki karmasik ve herkesin harci degil.
FTP get/put baska care olmayinca kullanilabilecek statik bir yontem. O zaman UT'de benim 10-15 sene kadar once (o zaman ne internet ne modem illaki disketle filan gidecek) yayinladigim bir article ve kod var. Ona bakmak isteyebilirsiniz. Bu tip bagimsiz dosyalarin senkronasyonu icin. Ancak VFP'de simdi (daha dogrusu cok uzun yillardir) offline view var. O bu isler icin bicilmis kaftan gibi (notebooka datatyi al, git isle, 1 ay sonra tatilden don, ana datayla senkronize et).
Bir baska yontem web servisleri veya web server uzerinden browser ile erisme. Son derece basit ve bir o kadar da zor secenekler (hem basit hem zor nasil oluyor - yapana kadar kabus, yapmaya baslayinca kolay diyelim. Sagolsun Cemal ve Hakan yillar once ona "ASP ne ya"  diye sordugumda benim cahillegime laf etmeden bana anlattilar ve ornek gosterdiler de yavas yavas emeklemeye basladim:).
Benim favori yontemlerimden birisi isin icine .Neti sokuyor. .Net remoting ile network uzerinde dunyaninin neresinde olursa olsun bircok makineyi birlestirmek kolay olmaya basladi. Benim o alanda calismam oldukca yeni oldugundan hazir birsey yok elimde VFP icin ama zaman ne gosterir bir arac filan yapar miyim bilmiyorum (son derece kucuk ihtimal).
SQL express ile haberlesmek ve onu arada data transfer ortami olarak kullanmak iyi bir fikir olabilir (bastaki query anayzer yontemi - OpenRowset() ve OpendDatasource()).  Sadece select icin kullanilacaksa SQL server VFP'yi linked server olarak ta kullanabiliyor.

Gene cenem dustu:)

8

Re: Şubelerden table alma

ugurlu2001 yazdı:

SH-DSL Teknolojisi ile uzak bir sistemde yerel ağda çalışıyormuş gibi çalışabilirsiniz.  Bu işi yapan bir hosting firmasından özel bir kira bedeli ile yapılabilir. Bir noktanın yaklaşık aylık maliyeti 1,250 YTL civarında (2 bm download - 2 mb upload reel transfer hızı) . Ancak sistem performansı ve verimliliği yönünden internete göre çok daha performanslı. Maliyeti biraz yüksek ama  kurumsal gereklilik söz konusu olduğunda istenen sonuç  kesin oluyor ... Ayrıca geçenlerde Çetin üstad ile bir şey denedik, Foxpro table larını SQL SERVER içerisinden Ouery  Analyser ile real time olarak sorgulayabiliryorsunuz. Bu sistem biraz yavaş işliyor ama sonuç fena sayılmaz. Bir denemenizi öneririm.


ugura ek olarak söyleyebilecegim ücretsiz bir cozum var smile

http://www.filehippo.com/download_hamachi/

adresinden indireceginiz yazilim ile ücretsiz bir VPN yaratmis oluyorsunuz 512 K DSL baglantisi ile bile oldukca iyi ki artık 1024 standart ta .. gerekli guvenlik ayarlarini yaptiktan sonra artik bu baglantinin ucu sizde yerel ağ sürücüsü gibi calisiyor ...

bu programin guzel yani ucretsiz olmasinin yani sira hic VPN bilgisi olmayan birinin bile bir kac ayarlar VPN yaratabiliyor olmasi .. normal ugrasanlar bilir 2003 serverde VPN yaratmak bir dizi ayar gerektiriyor...

9

Re: Şubelerden table alma

ben çok şubeli bir organizasyonu web server ile çözdüm. merkezden hem veri okuyorum hemde merkeze veri yazdırıyorum. internet hattını kullanıyor... ek bir donanım malieti gerekmiyor.. gün içinde toplu trasferler ile şimdilik sorunu çözdüm..iyi bir kodla online gibi çalışabilir.. ( yeni versiyonda bunu deniyeceğim) ..sistemden çok memnunum.. 1 kbyte bilgi yaklaşık 1 saniye civarında gidip geliyor..benim için oldukça tatmin edici bir yöntem..
incelmenizi öneririm web server yöntemini..

10

Re: Şubelerden table alma

aydın yazdı:

ben çok şubeli bir organizasyonu web server ile çözdüm. merkezden hem veri okuyorum hemde merkeze veri yazdırıyorum. internet hattını kullanıyor... ek bir donanım malieti gerekmiyor.. gün içinde toplu trasferler ile şimdilik sorunu çözdüm..iyi bir kodla online gibi çalışabilir.. ( yeni versiyonda bunu deniyeceğim) ..sistemden çok memnunum.. 1 kbyte bilgi yaklaşık 1 saniye civarında gidip geliyor..benim için oldukça tatmin edici bir yöntem..
incelmenizi öneririm web server yöntemini..


nasil hallettigini biraz aciklamali yaparsan diger arkadaslarda fikir sahibi olurlar smile

11

Re: Şubelerden table alma

XML WEB SERVER YÖNTEMİ
vfp9 yardım dosyasında "Walkthrough: Creating XML Web Services with Visual FoxPro " bölümünden bende yola çıkarak yaptım.
Özetle yardım bölümünde anlatıldığı gibi bir xml web server 'ı merkeze kodladım. Şubelerden bu servere ulaşıp veri okuyorum ve veri yazıyorum.

server bölümünde kabaca iki temel fonksiyon var diyelim.
1. xml formatında gönderilen verileri alıp dbf 'e cevirip merkezde yer alan table'a güncelleyen bir fonksiyon.
2. kendine parametre olarak gönderilen sql stringine göre merkez table'dan veriyi süzüp, xml formatina çevirip tekrar sonuç olarak geri döndüren fonksiyon.

client tarafındada bu fonsiyonları kullanan fonsiyonlar var...
1. merkezden istanecek bilgiyi sql stringi haline getirip merkez xml web server a gönderip ,sonucu alıp (sonuç xml formatında), table'a çevirip locali güncelleyen bir fonsiyon..
2. merkeze gönderilmesi gereken bilgileri hazırlayıp, xml formatına çevirip merkeze gönderen bir fonksiyon...

Öxetle veriler xml formatında gönderilip alınıyor.. Bu tek bir record olduğu gibi, birden çok record da olabiliyor. Tabi her bir xml paketinin büyüklüğü sınırlı olabiliyor. Bu durumda record büyüklüğüne göre 10 arlı, 20 şerli vs. recordlar halinde veri alışverişi yapılıyor..

Bu bilgiler şubeler tarafından istenildiği zaman merkeze trasfer ediliyor. Örneğin gün sonunda vs.
Ancak şubeda çalışan programda istenilirse veri kaydet tuşuna transfer işlemi bağlabilir ve bir anlamda on-line çalışma ortamı oluşturulabilir. Aynı şekilde okunacak veri de istenilirse local datadan değil merkez datasından okutulabilir. (kullanıcı bunu online gibi hissedebilir )
Yani iş biraz da yaratıclığa kalmış.

kabaca yöntem bu...bir fırsatını bulursam örnek bir iki kod gönderebilirim.

12

Re: Şubelerden table alma

evet kodla desteklersen daha iyi olur