1

Konu: dataenvironment kayırlarını saklama programı

Forumda dataenvironment kayırlarını saklama programı görmüştüm, (galiba Çetin B'den)
şimdi bulamadım.

Kendi bilgisayarımda geliştirdiğim programları networkde çalıştırırken path olmasına rağmen göremiyor. Bu sorunu çözmek için..

VFP9 SP2

2 Son düzenleyen, ugurlu2001 (10.08.2007 12:58:04)

Re: dataenvironment kayırlarını saklama programı

Visual Fox Pro
SET PATH TO \\PalasimBilgisayari\C$\ProgramPath\

biçiminde kullanabilirsin; Ayrıca IP ile de path bildirisi yapabiliyorsun

Visual Fox Pro
SET PATH TO \\192.168.0.18\C$\ProgramPath\

gibi
Exe dosyasını çalıştırdığın Directory 'de MyPath.Txt dosyası oluşturup Path i bu dosyadan okutabilirsin; eğer Path i şifreli yazarsan normal kullanıcıların dosya ile oynaması zor olur.
Tek yapacağın her Local makineye aynı exe ve txt dosyasını yerleştirmen.

Kolay gelsin

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ü

3

Re: dataenvironment kayırlarını saklama programı

Bu mu acaba UT'de postalamistim galiba:

Visual Fox Pro
*UpdateDE.prg

Lparameters toDE,tcAppDb,tcPath
Do setups && contains general "set" like set century on, exact off, ...
Local Array aDEMembers[1]
Local lnMembers,ix,lcMembers
if !(Type('oApp')='O' and !IsNull(oApp)) && in case testing with customer's data
  public oApp
  tcAppDb = iif(empty(m.tcAppDb),"mydefault.dbc", m.tcAppDb)
  tcPath  = iif(empty(m.tcPath), "myDefaultDataFolder",m.tcPath)
  oApp = CreateObject('myApp',m.tcAppDb,m.tcPath)
endif
lnMembers = Amembers(aDEMembers,toDE,2)
For ix=1 To m.lnMembers
    With Evaluate('toDe.'+aDEMembers[m.ix])
        If Lower(.BaseClass) == 'cursor'
            If Atc(oApp.cAppDBC,.Database) > 0
                .Database = Addbs(oApp.cAppDataPath)+oApp.cAppDBC
            Else
                .CursorSource = Addbs(oApp.cAppDataPath)+Justfname(.CursorSource)
            Endif
        Endif
    Endwith
Endfor
 
Define Class myApp As Custom
    cAppDBC = ''
    cAppDataPath=''
    cCurPath = ''
    Procedure Init(tcAppDb,tcPath)
      This.cCurPath = Set('path')
      This.cAppDataPath = m.tcPath
          this.cAppDbc = (m.tcAppDb)
      set Path To (this.cAppDataPath+';'+This.cCurPath)
    Endproc
    Procedure Destroy
      Set Path To (This.cCurPath)
    Endproc
Enddefine
 
* And I have this in DE.BeforeOpenTables
UpdateDe(this)

4

Re: dataenvironment kayırlarını saklama programı

tam bu değil galiba - yorumlarda gereği yok vb. yazılar vardı

konuyu  açmak istiyorum.
örneğin bir form yaptım, free dbf'ler ile
projeyi geliştirdim, C de pathları tanımladım, çalıştırdım:
SET DEFA TO C:\fox\proje_dizini
SET PATH TO C:\fox\proje_dizini\data_dizini
(burada dataenvorinment.cursor1. Cursorsource=C:\fox\proje_dizini\data_dizini\dosyam.dbf)

sonra aşağıdaki default ve path  değiştirip sunucuya yükledim:
SET DEFA TO \\anasunucu\proje_dizini
SET PATH TO \\anasunucu\proje_dizini\data_dizini
(burada dataenvorinment.cursor1. Cursorsource=\\anasunucu\proje_dizini\data_dizini\dosyam.dbf)

Project maneger Data tabında dosyaları \anasunucu\proje_dizini\data_dizini altında görüyor.
Ama çalıştırdığında dosyaları bulamıyor.

Her seferinde her formu , Dataenvironmentini açıyorum, ufak bir dragdrop yapıp save ediyorum (değişiklik yapmazsan save etmiyor) , sonra derleyince çalışıyor.

ARADIĞIM; projeye mahsus Cursorsourceleri path ile birlikte program içerisinden yeniden yükleyebilmek.
AKŞAM evde çalışırken lokale dönüşte ve ertesi gün işte networkde yukarıda açıkladığım süre kaybina uğramadan

şimdiden teşekkürler

VFP9 SP2

5 Son düzenleyen, konuka (12.08.2007 11:27:36)

Re: dataenvironment kayırlarını saklama programı

yanıt alamıyınca kendi uçağımı kendim yaptım, umarım arkadaşlara faydalı olur...
HEDEF: Aynı programı çeşitli veri kaynaklarında (sunucularda) çalıştırmak için derlemeden önce Dataenvironmentlerindeki CursorSource pathlarını değişitirmek. (Aksi takdirde program içerisinden sadece path değişikliği yeterli olmuyor, VFP derlerken formların tasarım sırasında kullanılan verilere (dataya) başvuruyor)

Visual Fox Pro
* yazılım: KONUK A

*  ilham :Ç.Başöz (form.scx in aslında bir dbf olduğu)
*         Ramani (Projenizdeki Tabloların Yapısını Text Dosyaya alma)
*  çalışılan proje içerisinden DO komutu ile çalıştırılır....
*
IF ! 6=MESSAGEBOX("AÇIK FORM OLMAMALI"+CHR(13)+"DEVAM EDİLSİN Mİ ?",292,application.ActiveProject.NAME)
  RETURN
ENDI
WAIT "işlem süresince"+CHR(13)+ "projeden form açmayın" WINDOW NOWAIT NOCLEAR 
 
PUBLIC oForm
oForm=NEWOBJECT("MyForm")
oForm.Show(1)  && enfeksiyonlara kapalı
 
DEFINE CLASS MyForm AS Form
  ADD OBJECT Label1 AS Label WITH Caption="değişecek dizin bölümünü girin", Top=3, Left=180, Width=200,;
                                  BackStyle=0, FontUnderline=.t., ForeColor=RGB(200,100,100),;
                                  ToolTipText="tıklayarak dizin yardımı alın"
  ADD OBJECT Label2 AS Label WITH Caption="yerine gelecek dizin adını yazın", Top=3, Left=390, Width=200,;
                                  BackStyle=0, FontUnderline=.t., ForeColor=RGB(220,100,100),;
                                  ToolTipText="tıklayarak dizin yardımı alın"
  ADD OBJECT Text1 AS TextBox WITH Left=180, Top=20, Height=25, Width=200
  ADD OBJECT Text2 AS TextBox WITH Left=390, Top=20, Height=25, Width=200
  ADD OBJECT Button2 AS CommandButton WITH Left=600, Top=20, Height=25,Width=60, Caption="değiştir",;
                                  ToolTipText="dizin değişiklikleri yapılır"
  ADD OBJECT Grid1 AS Grid WITH ColumnCount=5, DeleteMark=.f., FontName="Tahoma", ;
                                ReadOnly=.t., ;
                                Height=200, Left=3, Top=50, Width=660
 
  PROCEDURE Load
    SET MEMOWIDTH TO 1000 && properties alanının tamamını alsın
 
  PROCEDURE Destroy
    CLOSE TABLES
    WAIT CLEAR
    oForm=.f.
 
  PROCEDURE Init
    CLOSE TABLES
    CREATE CURSOR dform (fad C(40),cursAd C(50),cursAdYeni C(50),fsira I,UnikAd C(20), propertiler M)
 
    WITH This
    .WindowType=0
    .ShowTips=.t.
    .Width=670
    .Caption="Dosya dizin düzeltme: "+application.ActiveProject.NAME
    ENDWITH
 
    WITH ThisForm.Grid1
    .FontName="Tahoma"
    .FontSize=8
    .RecordSource="dForm"
    .Column1.Header1.Caption="form adı"
    .Column2.Header1.Caption="cursor dizini"
    .Column3.Header1.Caption="yeni cursor dizini"
    .Column4.Header1.Caption="form sıra"
    .Column5.Header1.Caption="kontrol"
    .Column1.Width=160
    .Column2.Width=210
    .Column3.Width=210
    .Column4.Width=50
    ENDWITH
 
    ThisForm.FormdanDosyaYükle
    * SELE 3
    * SELECT * FROM dForm INTO TABLE "c:\_"+CHRTRAN(TTOC(DATETIME()),". :","")
    * hata olursa ilk kayıtlar propertiler alanından geri alınır
    * istenirse gerialma ile ilgili kod ayrıca yazılır..
     SELE 1
 
*------------------------       
 
  PROCEDURE Button2.Click
    IF 6=MESSAGEBOX("Proje içerisindeki formların"+CHR(13)+"dosyaların dizinini değiştiriyorsunuz",292,"DİKKAT")
      ThisForm.DizinDeğiştir
    ENDI
 
  PROCEDURE Text1.InterActiveChange
    REPLACE ALL dform.cursAdYeni WITH STRTRAN(dform.cursAd,ALLTRIM(ThisForm.Text1.Value),ALLTRIM(ThisForm.Text2.Value))
    GO TOP
    ThisForm.Refresh
 
  PROCEDURE Label1.Click
    ThisForm.Text1.Value=ADDBS(JUSTPATH(cursAd))  && backslash ekle
                                                 && veya aşağıdaki var
    ThisForm.Text2.Value=ThisForm.Text1.Value
    Thisform.Text1.InterActiveChange
 
  PROCEDURE Label2.Click
    ThisForm.Text2.Value=GETDIR()
    *ThisForm.Text2.Value=LEFT(ThisForm.Text2.Value,LEN(ThisForm.Text2.Value)-1) && son backslash olmasın
                                                                                 && veya yukarıdaki addbs()
    Thisform.Text1.InterActiveChange
 
  PROCEDURE Text2.InterActiveChange
    Thisform.Text1.InterActiveChange
 
  PROCEDURE FormdanDosyaYükle
    SELECT 2
    FOR Xfsira= 1 TO application.ActiveProject.Files.Count
      Xform = application.ActiveProject.Files(Xfsira).NAME
      IF UPPER(JUSTEXT(Xform))== "SCX"
        USE (M.Xform)
        SCAN
          IF UPPER(MLINE(BaseClass,1))="CURSOR"
            SCATTER MEMVAR MEMO FIELDS properties,uniqueid
            Xcursor=STRTRAN(MLINE(M.properties,ATLINE("CursorSource = ",M.properties)),"CursorSource = ","" )
            INSERT INTO dform VALUES(M.Xform,Xcursor,Xcursor,Xfsira,M.uniqueid,M.properties)
          ENDIF
        ENDSCAN
      ENDI
    ENDF
    USE
    SELECT 1
    GO TOP
    This.Refresh
 
  PROCEDURE DizinDeğiştir
    *dform (fad C(40),cursAd C(50),cursAdYeni C(50),fsira I,UnikAd C(20), propertiler M)
    SELECT 1
    SELECT dForm
    SCAN   
      IF ! ALLTRIM(dForm.cursAd) == ALLTRIM(dForm.cursAdYeni)
        SCATTER MEMVAR FIEL fad, cursAd, cursAdYeni, fsira, UnikAd
        SELECT 2
        *USE (application.ActiveProject.Files(M.fsira).NAME)
        USE (M.fad)
        LOCATE FOR ALLTRIM(uniqueid)=ALLTRIM(M.UnikAd)
        IF FOUND()
          REPLACE properties WITH STRTRAN(properties,ALLTRIM(dForm.cursAd),ALLTRIM(dForm.cursAdYeni))
        ENDIF
        USE
        SELECT 1
      ENDI
    ENDS
 
    SET SAFETY OFF
    SELECT dform
    ZAP
    SET SAFETY ON
    ThisForm.Text1.Value=""
    ThisForm.Text2.Value=""
 
    ThisForm.FormdanDosyaYükle
 
ENDDEFINE
VFP9 SP2