INTERBASE ve/veya FIREBIRD 'te DATABASE YOLU neden?

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
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

INTERBASE ve/veya FIREBIRD 'te DATABASE YOLU neden?

Mesaj gönderen goksenin »

Selamunaleykum,
Ben uzun zamandır MS-SQL veri tabanını kullanarak program geliştirdim. Kullananlar bilirler MS-SQL de oluşturduğunuz bir database 'e bağlanmak için bağlanmak isrtediğiniz database'in buluynduğu bilgisayar adını ve sadece database in ismini vermeniz yeterli oluyor...yani databasein disk üzerinde (c:\yolxxx\databaseadi) bulunduğu yeri söylemenize gerek kalmıyor çünkü zeatem MS-SQL server bu yolu otomatik olarak biliyor durumdadır.

Acaba INTERBASE veya FIREBIRD te server database yolunu kendisi tutmuyor mu Create Database te zaten bu yolu veriyorum server bunu aklında tuması gerekmiyormu tutuyorsa bu bilgiyii nerde saklıyor (bu bilgiyi nasıl alabiliriz server üzerinden ve hangi componenti kullanmalı)...

Bununla ilgili birşeyler bilen varsa payklaşırsa sevinirim.

Göksenin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

fazla detaylı incelemedim ancak ben Interbase/Firebird veritabanlarım için şöyle bir yol izliyorum.

1. Proramın .exe'sinin bulunduğu klasörde Data isimli bir alt klasör oluşturup, veritabanını buraya koyuyorum.

2. Daha sonra veritabanı ismini ve yolunu veren parametreyi koddan ayarlıyorum,

... := ExtractFilePath(Application.ExeName) + 'Data\filanca.gdb';

gibi. Böylece kullanıcı programı nereye kurarsa kursun, program çalışıyor.

* ExtractFilePath(Application.ExeName) = programın çalıştığı klasörü döndürüyor.

Kolay gelsin.
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

Admin'in cevabına karşılık soru

Mesaj gönderen goksenin »

yol belirlerken dediğiniz yol kullanılabilinir ancak bu sadece interbase database i exe ile aynı bilgisayarda ise uygulanacak bir yöntemdir...

ya clientlar tarafın ne yapacaz server tarafındaki database in yolunuda vermemiz gerekiyor...
halbuki dediğim gibi mssql de client tarafında sadece mssql connectivitie veya client tool ları kurmak ve delphi dende database aliası ve server ismini vermek yetiyordu server database aliasından (ismi yani yolu deil.)
kendisinde bu aliasla ilgili databasein özelliklerini biliyordu ve kullanıcı adınız ve şifreniz doğru ise olayı bitiriyordunuz yani birde parametre olarak databasein disk üzerindeki yolunu client tarafında delphide yazmanıza gerek yoktu...
interbasete ise client tarafında program açılırken databasein yolunu tarif ettirmeniz ve daha sonra bunu kullanmak üzere *.ini file gibi bir metod kullanmanız gerekiyor...
onun için bende acaba dedim ki interbase ve/veya firebird serverlar üzerinden o anda kullanılan databaselerin isimileri ve yollarını (gerçi artık anladığım kadarıyla interbase tabanlı serverlarda yolu ile database adı aynı şey ki bu dez avantajlı bir durum...) verebilecek veya yayınlayan bir service var mı???

bu programı tasarlarken kullanabileceğim önemli bir strateji yani program kullanıcısına hiçbirşey bırakmama adına ve kullanım kolaylığı açısından...

bilgisi olan varsa paylaşırsa memnun olurum...
hayırlı çalışmalar...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

zannederim dediginiz gibi bir servis yok yada ben rastlamadım
ama alternatif bir yaklasımla serverda sizin degismez olarak belirlediginiz
bir klasoru clientlardaki programda da sabit olarak vermeniz;
extra bi ayar yapmanıza gerek kalmaz.
mesela serverda D:\fbData\mydb.gdb seklinde olsun
client programlarınızda da bu yolu sabit olarak girin
nede olsa server da bu db nin yolu gezici degil programı da yazan sizsiniz...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet tespitleriniz dogru. Interbase'de server üzerindeki database'in full path'îni de vermeniz gerekiyor.

Oysa MsSQL'de ve benim yoğun olarak kullandigim Sybase'de client ayarlarinda database server'i ve database adini vermek yetiyor cünkü server tarafinda onceden ilgili database'in full path'ini server engine'e gosteriyorsunuz ve server engine de bunu bildigi icin ve de daima database'i acik tuttugu icin client'in path ile alakasi olmuyor.

Ama interbase'in bu durumunu bir dez avantaj degil de farklı bir yoğurt yeme olarak değerlendirmek lazım.

Zira onun da soyle bir avantajı var. Mesela Sybase'de server engine 'e ilgili database'in path'ini gosterip server engine'i start ettiginizde database'i acar ve client'lardan baglanti talebi gelemsini bekler. Eger siz Sybase server'a yeni bir database tanitmak isterseniz bunun icin server'da ilgili ayari yapmaniz gerekir ki artik acilirken o database'de start edilebilsin. Tabi database'ler surekli acik oldugu icin de herhangi bir client bagli olmasa bile database acik oldugu icin o database'i kopyalamayamazsiniz.

Oysa interbase'de server engine start oldugunda kendi uzerindeki hic bir database'e dokunmaz. Taaa ki bir client sendeki su database'i bana sun diyene kadar. O an server o database'i acar ve sunmaya baslar. Son baglanti kopunca da database'i serbest birakir. Bu sebeple de herhangi bir clietn bagli degilken interbase server'daki database'leri istediginiz gibi kopyalayabilir yenisiyle degistirebilir veya server'da sunulmakta olmayan bir veritabanini sadece server'a kopyalayip client ayari ile client'tan cagirabilir ve server'in opnu sunmasini saglayabilirsiniz.


Yine de bu database isimleri belki bir service ile de tutuluyor olabilir ve belki sizin projeniz acisindan avantajli olabilir ama ben interbase'in bu veritabanlarini server'i stop etmeye gerek kalmaksizin kopyalanabilem ozelligini begeniyorum ve zaman zaman da isime yariyor.

ama tabi sizin projenin yapisi itibariyle bu durumun hosunuza gitmemesi de normal...

Kolay gelsin....
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Öyle bir servis yok. Yada ben henüz görmedim. Fahretti'in dediği gibi bence dez avantaj değil aksine avantaj.
Son kullanıcı hiç bir ayar yapmasına gerek yok. Hatta ben Tüm terminallere FB Server kuruyorum. Manager ı da çalıştırıyorum. Bunun dezavantajı sadece 5 mb kadar kayıp. Avantajıysa eğer ana makina göçerse yada bir problem olursa sadece gdb yi telde bile copy-paste ile başka bir makinaya aktarttıp, işlerine devam etirtmek.
Ben az tembelim :P kısa bir function yazdım. Exenin adıyla aynı bir ini file a path i yazdırtıyorum. bunuda openfile ile yapıyorum gdb nin adını aldırtıyorum ini ye yazarkende bunun path ini yazıyorum. her ilk açılıştada bu iniyi kontrol edip varsa bağlan yoksa sor gibi basit bir kotrol yapıyorum
Database in BeforeConnect inede bir function yazdım. Eğer gelen path bir networkse yani "\\" ile başlıyorsa kotrolü yapıp server adını yazıyorum

eğer bir alias tanıtmak gerekseydi. her yani şirket yada yeni database için kullanıcıya bunu yaptırtmak gerekirdi.
Eğer database uzuntısını özelleştirip mesala "UGS" yapıp yazdığınız programıda windowsda register edersen(birlikte aç) kullanıcı için süer rahatlık olur. IB/FB yi ben bu yüzden çok pratik buluyorum
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

Mesaj gönderen safak »

Firebird de alias.conf icersinde tanımlama yapabilirsiniz.
cenmuter
Üye
Mesajlar: 7
Kayıt: 05 Oca 2004 05:16

Mesaj gönderen cenmuter »

Merhaba arkadaşlar,

Ben de şu kodu kullanıyorum dışardan bilgi okutmak için ve çalışıyor:

void __fastcall TDataModule4::DataModuleCreate(TObject *Sender)
{
//HARICI DOSYADAN BİLGİ OKUMA
FILE *f;
if ((f=fopen("txt\\VeriAdi.txt","rt"))==NULL)
ShowMessage("Dosya açılamadı...");
char x[255];
fgets(x,255,f);
DataModule4->IBDatabase1->DatabaseName=x;
fclose(f);
}

Root 'ta bulunan txt dosyanın altındaki VeriAdi.txt dosyasını çağırıyor. Bu dosyadaki bilgileri okuyor. Bu dosyada, Veritabanın(xxx.gdb) bulunduğu yol yazılıdır.Böylece Client veya Server konumlarını buradan ayarlıyorum.
Buna bu sitedeki Veritabanı menüsünden esinlenerek buldum.
Teşekkürler
Cevapla