IB/FB de database i veya db nin yerini değiştirme

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

IB/FB de database i veya db nin yerini değiştirme

Mesaj gönderen sair »

Ib de bir alias bulunmadığı için bir çok arkadaş database in yerini değiştirmekte veya database in kendisini değiştirmekte zorlanıyorlar. Daha da önemlisi database bir server da ise yazılan hem terminal hemde server için ayrı program derlemek zorunda kalıyorlar bu yüzden aşağıdaki kodu deneyin...

Not defteri ile Data.pth isimli bir dosya oluşturun. İçine database i koyduğunu path i doğrudan yazın.. Misal c:\MyProg\Data\Data.Gdb gibi.
ve dosyayı programınızın exe dosyasınin bulunduğu klasöre kopyalayın.
Programınızı açın ve anaformun OnShow olayına aşağıdaki gibi kodlarınızı kendi table ve database isimlerinize göre değiştirerek yazın..

Kod: Tümünü seç

procedure TAnaForm.FormActivate(Sender: TObject);
var
  dosya: TextFile ;
  yol: string;
begin
     AssignFile(dosya,'Data.PTH');  // Data.pth Dosyası Açılıyor
    {$I-}
    Reset(dosya);
    {$I+}
   if IOResult = 0 then begin
      ReadLn(dosya,yol);       // ilk satır okunarak yol değişkenine aktarılıyor
      CloseFile(dosya); 
Try
      Data.IBData.DatabaseName:=yol;  //Data.pth dosyasından yol değişkenine aktarılan databasein yolu IBDatabase e aktarılıyor.
      Data.IBData.Connected:=True;    // Database active ediliyor..
      Data.IBTrans.Active:=True;         //Transaction active ediliyor
      Data.Kimlik.Active:=True;           // Queryler active ediliyor.
      Data.Bordro.Active:=True;
      Data.Sabit.Active:=True;
      Data.Toplam.Active:=True;
      Data.Isim.Active:=True;
      Data.Vasif.Active:=True;
      Data.isyeri.Active:=True;
      Data.Birim.Active:=True;
      Data.Amir.Active:=True;
      Data.AKimlik.Active:=True;
      Data.ABordro.Active:=True;
      Data.Sendika.Active:=True;
except
        On exception do
        raise;
end;
    end
    else begin
       MessageDlg('Data.pth dosyası bulunamadı.Program kapatılacak', mtWarning, [mbOk], 0);
       Data.IBData.Connected:=False;
       Application.Terminate;
    end;
end;

Bundan sonra yapmanız gereken tek şey. Database inizi kopyaladığınız yerin adresini Data.pth dosyasına yazmak sadece... Şayet Server üzerinde yani başka bir makinadaki bir database e bağlanacaksanız bu sefer data.pth dosyasını serverdaki path i gösterecek şekilde düzenliyorsunuz..

IP ile direk bağlantı (Statik Ip kullanılıyorsa):
192.168.0.1:c:\MyProg\Data\Data.gdb gibi..

Yukardaki IP databasein bulunduğu makinanın Ip sidir..

Şayet IP Kullanılmıyorsa:
Ana_Makina_Adı:c:\MyProg\Data\Data.gdb

şeklinde data.pth dosyasını değiştirerek basit bir şekilde bağlantı kurabilirsiniz...

Sevgiler.....
En son sair tarafından 01 Şub 2005 08:14 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

Ellerine saglık Sair abi cok acıklayıcı olmus.

Kolay Gelsin.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustam eline beynine sağlık faydalandım ve uyguladım.

küçük bi sorunum var başka yoldan hallettim ama öğrenmek açısından sormak istedim. bu kod ile db yolunu uyguluyorum fakat kodun aktiv yapma bölümünde dataset leri aktiv yapmıyor. o yüzden diğer formun oncreate bölümünde aktif yapıyorum.

bide kodun end else begin den sonra gelen mesaj ve kapatma bölümünü silmek zorunda kalıyorum çünkü çalıştırınca hemen bulunamadı mesajı çıkoyor ve programı sonlandırıyor bu satırlar olmazsa komut çalışıyor ve db yolunu yazıyor. sorun ne acaba.

kolay gelsin
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Neyi yanlış yaptığını bilmiyorum ama ben bu kodu bütün programlarımda uyguluyorum.. Hiç bir hatası yok kodun kusursuz çalışıyor. Kodu buraya yazarsan belki yardımcı olabiliriz.

Sevgiler..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Merhabalar @sair hocam,

Ben de Firebird için bir ek yapmak istedim izninle.

Firebird ile birlikte Alias desteği gelmiştir. Firebird klasöründeki aliases.conf dosyasına tanımlayacağınız alias'ları yazabilir ve veritabanına bağlanabilirsiniz.

Örnek: Aliases.conf dosyasına dummy = c:\data\dummy.fdb satırını eklediğinizde, programınızda veritabanı yoluna serveradı:dummy yazmanız veritabanına bağlanmanızı sağlayacaktır.
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

bunu biliyorum da embedded serverlarda ve client yüklendiğinde hiç bir işe yaramıyor maalesef.. :)
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustam,

kodunda bi değişiklik yapmadım aynen kullandım. programlama formunda şu an tarıtışılıyor bir database mi bir transaction mu çok faydalı bi tartışma oldu. bu forum üzerine ben ana formum üzerine bi ibdatabase ve bir transaction koydum ve vermiş olduğun kodu burada formun onshow olayına uyguladım. kodu veremeyeceğim çünkü bilgisayarım çok kötü göçtü ve bütün sürücüler format yedi. bir gün içinde olduğu içinde yedek almamıştım.

senin kodun da sadece database adını ve transaction adı form adı gibi yerleri kendime uyarladım.

benim çalışmamda bazı formlarda ibdataset lerin ana form açılır açılmaz aktif hale gelmesi gerekiyor seninde kodunda query leri aktif hale getirdiğin gibi bende kendi ibdataset olan ve aktif olması gereken leri kodun bu kısmına yazdım fakat çalıştırdığımda bunların aktif olmadığını gördün bu kısım önemli değil diğer formun onshow unda işi hallettim.

kodunun en altında bulunan end else begin dahil alt kısmı yani dosya bulunamadığında yapılacak işlem kısmını kullanırsam program çalıştırdığımda direk dosya bulunamadı işlem sonlandırılacak diyor. bu kısmı kullanmaz isem program sorunsuz çalışıyor.

özellikle denedim databasename leri sürücü e ye göre ayarlı olan programımı d sürücüsüne kopyaladım ve data.pth text dosyası içine d:\.... sürücüsündeki yolu yazdım ve program çalıştı aynı işi client bilgisayarda da denedim çalıştı. kodunda sorun yok çalışıyor fakat dosya olduğu halde end else begin kısmı olursa direkt bu kısım algılanıyor ve program sonlandırılıyor.

sanırım çok uzattım. acemiliğim dolayısı ile hata bizde olma ihtimali yüksek tek amacım yanlışımı öğrenmek. dediğim gibi kodunda sadece

Kod: Tümünü seç

end 
    else begin 
       MessageDlg('Data.pth dosyası bulunamadı.Program kapatılacak', mtWarning, [mbOk], 0); 
       Data.IBData.Connected:=False; 
       Application.Terminate;
kısmını kullanmıyorum. diğer kısımları aynı

belki algoritmam yanlış bu kısmıda anlayıp çözmeye çalışıyorum. çünkü bazı zamanlar oncreate kısmında çalışan active yapma komutu onshow kısmında çalışmıyor hata veriyor bazende onshow da çalışan active komutu oncreate kısmında çalışmıyor.

aslında hangi seviyede olduğumu anlamak ve hatalarımı bilmek amacı ile programı bi ustam kontrol etse çok iyi olurdu ama kimseden bunu yapmasını isteyemem çünkü zaman çok kıymetli

şu an çalışıyor ve işimizi görüyor

saygılarımla
kolay gelsin
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Sevgili olc
Yukardaki kodu değiştirdim... Formun OnShow olayına değil de OnActive olayına aldım.. Ben aslında bunu düzeltmişim kendim de ancak buraya yansıtmayı unutmuşum. Formun On Show Olayında Ana forma her dönüşte kod tekrar çalışıyor. Bu kodun yazılı olduğu formun üstüne bir form daha açıp kapatsanız bu kodun yazılı olduğu formda onshow olayı tekrar tetikleniyor. Bu yüzden bir sürü hata alınıyor. Ancak onActive de form ilk çalıştığında bu kod tetikleniyor. Bu sebeble yukardaki kodu formun OnActive olayına alırsan sorun düzelecektir büyük ihtimalle... Programı satır satır çalıştırıp hangi satırdan sonra dosya bulunamadı hatası veriyor bildirirseniz yardımcı olabilirim... Ben aşağıdaki kodu şu anda en son yazdığım programımda kullanıyorum.. Herhangi bir sorun da almıyorum..

Kod: Tümünü seç

procedure TAnaForm.FormActivate(Sender: TObject);
var
  dosya: TextFile ;
  yol: string;
begin
     AssignFile(dosya,'Data.PTH');
    {$I-}
    Reset(dosya);
    {$I+}
   if IOResult = 0 then begin
      ReadLn(dosya,yol);
      CloseFile(dosya);
Try
      Data.IBData.DatabaseName:=yol;
      Data.IBData.Connected:=True;
      Data.IBTrans.Active:=True;
      Data.Sicil.Active:=True;
      Data.Makbuz.Active:=True;
      Data.Odalar.Active:=True;
      Data.Meslek.Active:=True;
      Data.Sabit.Active:=True;
      Data.Gelir.Active:=True;
      Data.GelirSabit.Active:=True;
      Data.Gider.Active:=True;
      Data.GiderSabit.Active:=True;

except
        On exception do
        raise;
end;
    end
    else begin
       MessageDlg('Data.pth dosyası bulunamadı.Program kapatılacak', mtWarning, [mbOk], 0);
       Data.IBData.Connected:=False;
       Application.Terminate;
    end;
end;
Sevgiler..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

sair ustam,

akşama çalışmaya gideceğim ve ilk işim (tabiki asıl işimin gerektirdiği bir iş olmazsa) kodu uygulamak olacak. Sonuçtan haberdar edeceğim.

yardımın için teşekkür ederim.
kolay gelsin
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustam,

onactivate tarafında da aynı hatayı aldım ve şunu fark ettim database yolu aktarılmıyor. client bilgisayara programı kopyaladım ve text dosyaya ip adresi ile yolu yazdım. prg çalışmadı, form üzerinde database ye ip eklediğimde çalıştı baradan da text teki yolu okumadığını anladım, oysaki onshow da olduğunu görmüştüm. ama şimdide ikileme girdim acaba oldumuydu olmadımı idi.

ama aynı olayı yani data.pth bulunamadı hatasını onactivate tarafında da verdi. burada aklıma bişi takıldı. kod sadece bumu procedur veya fonction mu da olmalı. sen bundan bahsetmiyorsun demekki sadece kod bu.

bide aklıma şu geliyor denedim ama olmadı
AssignFile(dosya,'Data.PTH'); kısmı benim projenin exe yolu şöyle d:\OlayYeriIncBrProjesi\Proje\OlayYeriIncBrProjesi.exe ve diğer dosalar. Data.PTH dosyasını bu exe nin yanına oluşturdum.

AssignFile(dosya,'Data.PTH'); burada ise direkt data.pth yazıyor. yani yol tam olarak yazılmıyor. eksiklikmi bilmiyorum. hata buradan olabilirmi.

saygılarımla
kolay gelsin.
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Data.Pth Dosyası Program Exe sinin olduğu klasörde bulunacak.. IOREsult değerini kontrol et, şayet IOresult değeri Sıfırdan başka bir değer döndürüyorsa Data.PTH dosyası bulunamıyor demektir.... AssignFile(dosya,'Data.PTH') satırında dosya kontrol edilir, eğer varsa IOREsult değeri sıfır olur. Yoksa farklı bir değer alır... Eğer bunlar değeri düzgün döndürüyorsa "Yol" değişkenini kontrol et. Yol değişkeni Database in path ini döndürmesi gerekiyor.. Eğer düzgün değer dönmüyorsa Data.Pth dosyası okunamıyor demektir. Dosyanın içindeki satırı kontrol et. İlk satırda hiç boşluk olmadan başlamalı... Yani data.pth dosyasını açtığında ilk satır düzgün başlamalı..
Sevgiler..
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bir fikir belirtmek istemiştim. Acaba bir INI dosyasında bu bilgiler saklansa, okunması ve yazılması daha sorunsuz ve kolay olmaz mıydı acaba?

İyi günler dilerim.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

ustam,

bu sorun beni baya üzdü, bu kadar yardımına rağmen sorun oluşması tuhafıma gidiyor, senide yordum.

break point koyarak f8 ile adım adım gittiğimde sonuna kadar gidiyor ve end den sonra bahsettiğim hatayı veriyor. dosyayı bulamıyor ve sonlandırıyor. yani kodların arasında bi yerde stop etse hatayı bilicez. data.pth dosyasını kontrol ediyorum yol doğru bi hata yok ilk satıra boşluksuz yazıyorum.

data.pth dosyasını, windowsta sağ tıklayarak yeni+metin belgesinden oluşturuyorum. sanıyorum bu doğru, bildiğim bu text dosyasıdır. söylediğin gibi proje nin exe sinin bulunduğu yerde. şimdi denedim, onshow da ve onactivate de mesaj bloğu olursa hemen bulunamadı mesajı veriyor, mesaj bloğu olmazda çalıştırırsam data.pth yi zaten bulamadığı için program içinde databasename ye ne yazdım ise ona göre çalışıyor. doğru sürüçüde ise çalışıyor değilse çalışmıyor.

data.pth deki yol şu
E:\OlayYeriIncBrProjesi\Veri Deposu\DATA.FDB
burada sadece sürücü adını değiştiriyorum

hatam nerede bilmiyoru doğrusu senin başını ağrıttım kusura bakma
saygılarımla kolay gelsin
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Sanırım Olc sen dosyanın uzantısını değiştiremiyorsun data.pth.txt olarak kaytediyorsun. Yeni bir text dosyası oluştur içeriğini doldurtuktan sonra Farklı kaydet Kayıt Türü tüm dosyaları seç ve isim alanına data.pth yap.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustalarım,

öncelikle çok ama çok teşekkürler. bu kadar basit bi hatadan dolayı utanmalıyım. aslında böle bi şeyi bilmiyordum. farklı kaydet olayında text dosyasının uzantısı değişecek. çünkü text dosyadan okutma olarak konuya girdiğimizden olayı text dosyası oluştur ve hallet gibi düşündüm.

şair ve husonet ustama çok teşekkür eder işlerinde başarılar dilerim.
Cevapla