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.
INTERBASE ve/veya FIREBIRD 'te DATABASE YOLU neden?
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.
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.
Admin'in cevabına karşılık soru
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...
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...
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...
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...
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....
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....
Ö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
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
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

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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
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
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