IBDatabaseINI

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

IBDatabaseINI

Mesaj gönderen haydarxxx »

Slm uzun zamandır arıyorum tarıyorum ama bir türlü bu işede vakıf olamadım Firebir ü ağda kullanıyorum ama bu ayarları elle yapıyorum yani Database için databasename olarak IP veya Server Makina Adı + ':' + Data Yolu şeklinde kullanıyorum bu yolu otomatik olarak delphiye kodla yaptırmak istiyorum.Bu gerçekleştiğinde aynı exe nin clint bir makinada da çalışmasını istiyorum.Konuyu inifile olarak araştırıldı ama arkadaşlar bir çok kod yazmış ama açıklama olmadığı için de anlamakta zorlanıyorum.Kısacası inifile nasıl hazırlanır hazırlanmış olan inifile den nasıl bilgi alınır ve IP veya Server Makina Adı yerine bu bilgi databasename ye nasıl getiriliyor.(Veya başka bir yolu varsa o)

Makaleler de geçen IBDatabaseINI bileşeni standart mıdır nereden bulabiliriz.Kısacası yaptığımız bir proje hangi bilgisayarlar ağına kurulursa kurulsun otomatik olarak anamakina üzerinden bağlanabilsinler tabi gerekli düzenlemeyi biz programımıza katmak sureti ile...

viewtopic.php?t=9817&highlight=ini:

şöyle tane tane açıklayacak bir arkadaş çok makbule geçer ve memnun olurum.( Bu konuda makale yazmayı düşünen bir arkadaş yok mu ? Yazıldı ise ben mi bulamıyorum)
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

tam anlayamadım hangi ağa kurulursa kurulsun ana makinaya otomatik bağlansın demişsin?bu pek mümkün değil. program nerden bilsin o ağdaki bilgilerin bulunduğu ana makinanın adını?

yapman gereken şey şu;

bir tane ini dosyası hazırla(notepad 'den) aşağıdaki gibi;

[AYAR]
SERVER =MUHASEBE

burda muhasebe programın bilgilerinin bulunduğu bilgisayarın adı.bu ini dosyasını pogramının bulunduğu klasöre kopyala.sonra programında ana formun oncreate veya onshow olayına aşağıdaki kodu yaz..

Kod: Tümünü seç


uses bölümüne inifiles eklemeyi unutma..

procedure TForm1.FormShow(Sender: TObject);
Var
SERVER_ADI : String;
INIDosya : TIniFile;
begin
INIDosya := TIniFile.Create('C:\PROGRAM\DATABASE.ini');
SERVER_ADI := INIDosya.ReadString('AYAR','SERVER','');
INIDosya.Free;
IBDATABASE.DatabaseName:=SERVER_ADI+':C:\program\data\data.GDB';
IBDATABASE.open;
end;
burda kullanıcıların yapması gereken programı kurduktan sonra bu ini dosyasını açıp kurdukları ağdaki ana makinenin adını yazıp kaydedip,programı tekrar çalıştırmalı.istersen progrmın açılışında server bilgisi girilmemiş ise bir pencere açıp ana makine adını giriniz diye sordur.

forma bir edit koy(kullanıcılar buraya ana makine adını girecekler) kaydet ve kapat diye iki buton.kaydet butonuna aşağıdaki kodları yaz..

Kod: Tümünü seç


procedure TForm1.cxButton1Click(Sender: TObject);
Var
INIDosya : TIniFile;
begin
INIDosya := TIniFile.Create('C:\program\database.ini');
INIDosya.WriteString('AYAR','server',e1.Text);
INIDosya.Free;
cxButton1.Enabled:=false;
end;
böylece kullanıcı edite ana makine adını girer ve kaydete basınca ana makine adı ini dosyasında server yazan kısmın karşısına yazılır.

kolay gelsin
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

haydarxxx aynı dertten bende muzdaribim.Ama sendende Serkandanda Allah razı olsun.Eğer olayı doğru anladıysam, günlerdir arayıpta bulamadığım bilgileri ikinizin sayesinde buldum galiba.Kafamda bir ışık yandı.Bakalım becerebilecek miyim.

Ayrıca şu kod belki işinize yarar.Ağdaki ana makinanın ismini aşağıdaki kodla bulabilirsiniz.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Makine_ismi:array[0..255] of char;
  BufferSize:DWORD;
begin
  BufferSize:=SizeOf(Makine_ismi);
  GetComputerName(@Makine_ismi,BufferSize);
  Showmessage(Makine_ismi);
end;
Ağ ortamında login olmuş kullanıcı ismini bulma

Kod: Tümünü seç



procedure TForm1.Button1Click(Sender: TObject);
var
  Kullanici_ismi:array[0..255] of char;
  BufferSize:DWORD;
begin
  BufferSize:=SizeOf(Kullanici_ismi);
  GetUserName(@Kullanici_ismi,BufferSize);
  Showmessage(Kullanici_ismi);
end;



Kodlar için DelphiTurkiye.com'a teşekkürler.
En son palandoken tarafından 11 Kas 2006 11:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Serkan teşekkürler açıklaöalrın için en kısa zamanda deneyip cevap atacağım.palandoken o kod bende vardı en azında bu kodla serkanın dediği anamakina adını yakalatma ve otomatik ini dosyasına kaydetme işini yaptırtabiliriz. :wink:
Bakalım becerebilecekmiyim :roll: Tabi bunu için önce iş yerine bir uğramak gerekir 8) malum şu an evdeyim :)
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

haydarxxx başta herşey çok karmaşıktı ama yeni yeni taşlar yerine oturmaya başladı.

Neyse sana kolay gelsin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
erdoganturkmen

Mesaj gönderen erdoganturkmen »

s.a. Merhabalar. Sayın hocalarım kusura bakmayın ama bu firebird ile yapılan projeyi ağda çalıştırmak için neler yapmak gerekiyo hala anlamış değilim. Forumda çok aradım birkaç veri elde ettim ama açıkçası beceremedim :shock: Yaardımcı olursanız sevinirim. İyi çalışmalar
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

erdoganturkmen bende acemiyim. Bu konuda bende çok uğraştım ama galiba anladım.Yanlışım varsa ustalar düzeltsin lütfen.
yapılması gereken şey ana makinaya exe dosyasını ve firebird'ü kurmak.Terminal makinalarada exe'yi ve gds32.dll dosyasını kopyalamak.

Benim ana makina adı ADEMBABA
program c:\Octasis dizinine kurulu
exe adı Octasis.exe
FireBird veritabanı adı OCTASIS.FDB yolu ise c:\Octasis\Data\OCTASIS.FDB

Ana makinada ayrıca şunları yapmak gerekiyor.
Not Defterini kullanarak içeriği

[AYAR]
SERVER=ADEMBABA

olan bir ini dosyası oluşturdum.Tabi bu ADEMBABA benim makinamın adı.Program başka makinalara kurulduğunda makina adı başka olacağından bu değerin ya elle yada program içinden kodla değiştirilmesi gerekiyor.Uygun olanı kodla değiştirmek.

programın ana sayfasının OnCreate olayına aşağıdaki kodu yazdım.Uses'a InıFiles eklemeyi unutma.

Kod: Tümünü seç


Var 
  Yol : AnsiString ; 
  SERVER_ADI : String; 
  INIDosya : TIniFile; 

  Makine_ismi:array[0..255] of char; 
  BufferSize:DWORD; 
begin 
  if FileExists(ExtractFilePath(Application.ExeName)+'Ayar.ini') then//dosya varsa ana makina adını dosyadan al
    begin 
      Yol := ExtractFilePath(Application.ExeName)+'Ayar.ini' ; 
      INIDosya := TIniFile.Create( Yol ); 
      SERVER_ADI := INIDosya.ReadString('AYAR','SERVER',''); 
      INIDosya.Free; 
      ShowMessage(SERVER_ADI); 
    End 
  Else // eğer dosya yoksa oluştur. 
    Begin 
      //alttaki iki satır kod makinanın ağdaki adını bulacak 
      BufferSize:=SizeOf(Makine_ismi); 
      GetComputerName(@Makine_ismi,BufferSize); 

      Yol := ExtractFilePath(Application.ExeName)+'Ayar.ini' ;
      INIDosya := TIniFile.Create(Yol); 
      INIDosya.WriteString('AYAR','SERVER',Makine_ismi); 
      INIDosya.Free; 

      //dosya yoktu ve oluşturduk.Şimdi dosya adını tekrar okutalım. 

      Yol := ExtractFilePath(Application.ExeName)+'Ayar.ini' ; 
      INIDosya := TIniFile.Create( Yol ); 
      SERVER_ADI := INIDosya.ReadString('AYAR','SERVER',''); 
      INIDosya.Free; 
      ShowMessage(SERVER_ADI); //Bu mesajları daha sonra silersin
    End; 
end; 



şimdi IBDatabase'nin ayarlarını yapalım

Kod: Tümünü seç

 
  IBDatabase1.DatabaseName := SERVER_ADI+':'+ExtractFilePath(Application.ExeName)+'Data\OCTASIS.FDB'; 
  IBDatabase.DefaultTransaction := IBTransaction1 ; 
  IBTransaction1.DefaultDatabase := IBDatabase1 ; 
  IBDatabase1.LoginPrompt := False ; 
  IBDatabase.Connected := True ; 




daha sonra IBTable , IBQuery vb.ayarları geliyor.Bunların biliyorsun varsayıyorum.

Artık bu kodlarla ben Octasis.exe'yi ve OCTASIS.FDB'yi ağdaki ana bilgisayara kurucam.ağdaki diğer bilgisayarlarada sadece Octasis.exe'yi ve Gds32.dll'yi kurucam.Ağdaki diğer bilgisayarlar IBDatabase'in Databasename'ine SERVER_ADI olarak ana bilgisayarın adını yazdığımız için OCTASIS.FDB'yi kullancak.

erdoganturkmen olaydan benim anladığım bu.Ustalarda bir baksınlar doğru anlamışmıyım.
Kolay gelsin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Slm Arkadaşlar
ağ olayına sonunda geçebildik
Serkan teşekkür ediyorum.Firebifrd ağda çalışması için sırası ile yapılacakları aşağıya yazıyorum kendinize göre uyarlayabilirsiniz.

*Anamakinamın Ağdaki adı UMUT
*Setup yapmadan ağda çalıştırma işlemi üzerinden anlatıyorum.Projeden
*Data yolum C:\KursKayıt\Data.fdb
*Terminal makinası için exe yapmayacağım


1.Formunuzun üzerine bir edit yerleştirin.Buraya anamakinamızın yani şu an projemizin çalıştığı bilgisayarın adını yazacağız.Burada şunuda belirteyim Palandokenin verdiği kod ile bu edit e ağdaki makinanın adını alabilirsiniz ama bu seferde aynı exe yi ağda kullanacağımız için doğru bir işlem olmayacak.Kısacası kullanıcıya mutlaka bu edit e makina adını girdirmelisiniz bir kereye maksus bu yeterli

2.Forma bir buton koyuyoruz ve uses bölümüne inifiles eklemeyi unutmayın

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
INIDosya : TIniFile;
begin
INIDosya := TIniFile.Create('C:\KursKayıt\database.ini');
INIDosya.WriteString('AYAR','SERVER',edit3.Text);
INIDosya.Free;
end;
3.Formdaki Ibdatabasenin databasename sine herhangi bir şey yazmammıza gerek yok bunu zaten ini dosyasından alacak

4.

Kod: Tümünü seç

procedure TForm1.FormShow(Sender: TObject); 
INIDosya := TIniFile.Create('C:\KursKayıt\database.ini');
SERVER_ADI := INIDosya.ReadString('AYAR','SERVER','');
INIDosya.Free;
IBDATABASE1.DatabaseName:=SERVER_ADI+':C:\KursKayıt\Data\data.fDB';
form2.IBDATABASE1.DatabaseName:=SERVER_ADI+':C:\KursKayıt\Data\data.fDB';
end;
form açılışında dabasename yolunu ini dosyasından aldırıyoruz.Ama burada şu işlemleride yapmayı unutmayın projenin data yolları kapalı olduğu için formunuzdaki tüm IBTransaction,Ibdatabase,Ibquery veya Ibtable gibi bileşenlerin activilerini açtırmanız gerekir örneğin benim

IBDatabase1.Open;
IBTransaction1.Active:=true;
QRY_OGRENCI.Active:=true;
QRY_FOTO.Active:=true;
QRY_DERSLER.Active:=true;
QRY_TAKSIT.Active:=true;
TBL_HAVUZ.Active:=true;
IBTable1.Active:=true;
IBQuery1.Active:=true;
IBQuery2.Active:=true;
IBQuery3.Active:=true
IBQuery4.Active:=true;
IBQuery5.Active:=true;
IBQuery6.Active:=true;
şeklinde bütün bileşenleri true durumuna geçiriyorum artık run demeden önce bir kere ye mahsusuz ini dosyazısını hazırlamak gerekir çünkü şu anda Ibdatabase name ini dosyası olmadığı için bulamayacak o yüzden ini dosyası hazırlalım ama bundan sonraki ini dosyasını kullanıcıya program hazırlatacak

5.İni dosyası için not defterini açıyoruz ve içine
[AYAR]
SERVER=UMUT (Siz buraya kendi makina adını yazını)

kaydet diyoruz uzantısını txt yerine ini olarak belirliyoruz.

6.Bunuda yaptık isek Artık programa run deyip çalıştıralım projenizin açılmış olması gerekir.Eğer datalrınızı görebiliyorsanız anamak daki ayarlarımız tammadır.Projeyinizi kapatın.Projenizin olduğu klosöre ağ paylaşımı verin.Burdaki exe niz ile ini doyanısı kopyalayın

Geçelim ağ olayına yani terminaldeki makinelere bunun için terminal makinaya firebird kuruyoruz

7.Ağdaki makinya bende olduğu gibi c:\KursKayıt adında bir klosör açın ve kopyaladığınız database.ini dosyasını ve exe nizi buraya yapıştırın

8.dikkat ettiyseniz datalar anamakta kaldı çünkü ağdan oraya terminal ulaşacak.Tabi bu işi çok rahatlıkla temel bilgisayar bilgisi olan bir kullanıcıya tarif ederek programınızı ağda kullandırtabilirsiniz.

9.Ağdan veri girdiğinizde diğer makinalrında okuyabilmesi için ağda refresh olayını araştırmak ta size kaldı bu aşamada ama buradan başlayabilirsiniz

viewtopic.php?t=17470&highlight=refresh

10.Eğer bir hata yapmadık ise şu anada anamakta ve teminaldeki exelerin çalışmış olması gerekir.

herkeze kolay gelsin
Cevapla