Setup programı kullanmadan database yükleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Setup programı kullanmadan database yükleme
Merhaba... Bir çok delphi kullanıcıları için saçma bir soru olabilir ama kafama takıldı cevap bulamadım için sormak istedim....
Yapmış olduğum programın database var ve dll kullanarak sorunsuz olarak program çalışıyor, fakat bu programı başka bir bilgisayara yüklemek istediğimde farklı setup hazırlama program yardımıyla kurulum sağlıyorum...
Sorum ise: Setup programı kullanmadan bir bilgisayara database ve dll sorunsuz olarak nasıl yükleme yapabilirim databaseyi ve dll yi exe ye gömmek mümkün mü program çalıştırıldığında database otomatik olarak C:\ yüklenecek
Not: Database sqlite ve sqlite.dll gömmek istiyorum
Yapmış olduğum programın database var ve dll kullanarak sorunsuz olarak program çalışıyor, fakat bu programı başka bir bilgisayara yüklemek istediğimde farklı setup hazırlama program yardımıyla kurulum sağlıyorum...
Sorum ise: Setup programı kullanmadan bir bilgisayara database ve dll sorunsuz olarak nasıl yükleme yapabilirim databaseyi ve dll yi exe ye gömmek mümkün mü program çalıştırıldığında database otomatik olarak C:\ yüklenecek
Not: Database sqlite ve sqlite.dll gömmek istiyorum
En son hido tarafından 29 Haz 2014 02:36 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Setup programı kullanmadan database yükleme
istediğiniz mümkün. Böylece exe nizi taşınabilir hale getirebilirsiniz.
Başlangıçta istediğiniz dizinde var mı diye kontrol edip, yoksa bir kopya çıkarabilirsiniz.
İçerisine gömdüğünüz unsurlar kadar boyutu büyüyecektir.
resource dosyası adı gibi bu amaçla kullanılabilir.
C++ için *.rc dosyasının içeriğini
hazırlayıp projenize eklerseniz BIRISIM ve BASKAISIM isimleri proje içinde kullanılabilir olup temsil ettiği dosyalar exe ye gömülür.
OnCreate içerisinde veya istediğiniz yerde aşağıdaki örneğin Delphi cesi gibi kullanabilirsiniz.
Aşağıda TResourceStream içerisinde neleri nasıl parametrelendireceğinizi görebilirsiniz.
Başlangıçta istediğiniz dizinde var mı diye kontrol edip, yoksa bir kopya çıkarabilirsiniz.
İçerisine gömdüğünüz unsurlar kadar boyutu büyüyecektir.
resource dosyası adı gibi bu amaçla kullanılabilir.
C++ için *.rc dosyasının içeriğini
Kod: Tümünü seç
BIRISIM RCDATA "birdll.dll"
BASKAISIM RCDATA "ikidll.dll"
OnCreate içerisinde veya istediğiniz yerde aşağıdaki örneğin Delphi cesi gibi kullanabilirsiniz.
Kod: Tümünü seç
if (!FileExists(".\\birdll.dll")) {
TResourceStream * fsRes = new TResourceStream((int)HInstance, "BIRISIM", (WideChar*)RT_RCDATA);
fsRes->SaveToFile(".\\birdll.dll");
}
Kod: Tümünü seç
ResType Type of resource
RT_ACCELERATOR Accelerator table
RT_BITMAP Bitmap resource
RT_DIALOG Dialog box
RT_FONT Font resource
RT_FONTDIR Font directory resource
RT_MENU Menu resource
RT_RCDATA Application-defined resource (raw data)
RT_STRING String-table entry
RT_MESSAGETABLE Message-table entry
RT_CURSOR Hardware-dependent cursor resource
RT_GROUP_CURSOR Hardware-independent cursor resource
RT_ICON Hardware-dependent icon resource
RT_GROUP_ICON Hardware-independent icon resource
RT_VERSION Version resource
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Re: Setup programı kullanmadan database yükleme


Re: Setup programı kullanmadan database yükleme
@wader gereken cevabı vermiş, dediği şekilde EXE'ye (Resource olarak) gömebilirsiniz.hido yazdı:Databseyi ve dll leri exe ye nasıl gömebilirim
- Ancak RESOURCE olarak gömülen DLL ve/veya DATABASE, kullanılabilmesi için öncelikle her defasında fiziksel olarak dosya haline dönüştülür ve ondan sonra DLL ise dinamik olarak loadlibrary edilir, database ise direkt bağlantı kurabilirsiniz.
- Sadece EXE projenin ilk çalıştığı yerde bu DLL ve DATABASE dosyalarının eksik oluşu fark edildiğinde bir klasör oluşturup oraya bu DLL ve DATABASE dosyasını kopyalasın, her defasında da bu klasöre bakılsın şeklinde bir planınız varsa buraya kadar olan kısım işinizi görecektir.
- Eğer bu veritabanı pasif bir veritabanı ise : Yani herhangi bir kayıt yapılmıyor, kümülatif bir veri bloğunu sadece okumak için kullanıyorsanız sorun yok.
- Bir dahaki sefere başka bir yere taşınacak ise o zaman EXE ile birlikte bu klasörün de taşınması gerekir ki veritabanının son hali artık EXE içindeki değil de bu klasör içindeki şekildedir.
- VEYA veritabanındaki verilere ekleme, silme veya değiştirme yapılacak ise o zaman önce fiziksel olarak resource içerisinde çıkartılmış veritabanı kullanıldıktan sonra, proje kapanırken ek bir işlem yapılarak yeni ve son halininin yeniden EXE içerisine gömülmesi gereklidir.
ŞİMDİ NASIL YAPILDIĞINDAN BAHSEDELİM
Örnekte pasif kurulum anlatıcam, veritabanının son halinin kod ile EXE içerisine geri paketlenmesi imkanı da var. Bunu dileyen olursa daha geniş bir zamanda RESOURCE işlemlerine yönelik genel bilgiyi de kapsayan makale halinde şekilde yazarım.
- Diğer forumda (DelphiDunyasi.NET) yazmıştım ama kapanınca makaleler de proje örneklerim de orada mahsur kaldı. GOOGLE taraması ile bu bilgiye geçmişten sanırım ulaşabilirsiniz. Zaten başka kaynaklarda da geçiyor.
(1) Önce veritabanı dosyasının ve DLL dosyasının olduğu klasörde bir text dosyası oluşturacaksınız. Bu dosyanın uzantısı dilediğiniz şekilde olabilir ama genel geçer standart olarak .RC olarak kabul görür.
Örnek TEXT dosya içeriği: (örneğimizde bu dosyalar EKLE isimli klasör içinde olduğunu varsayalım. Daha sonra proje içerisinde bu klasör ismi lazım olacak
Kod: Tümünü seç
DLLDOSYA rcdata SQLite3.DLL
VERITABANI rcdata database.S3DB
Kod: Tümünü seç
BRCC32 RES.RC
32 Bit Windows ise
Kod: Tümünü seç
"c:\Program Files\CodeGear\RAD Studio\5.0\bin\brcc32.exe" RES.RC
Kod: Tümünü seç
"c:\Program Files (x86)\CodeGear\RAD Studio\5.0\bin\brcc32.exe" RES.RC
(3) Artık elinizde RES.RES isminde bir dosya oluşmuş demektir. Oluşmazsa iki ihtimal vardır. Birinci ihtimal bu dosyalardan bulunamayan vardır. İkinci ihtmal ise BRCC32.EXE dosyası konumu bulunamamıştır.
(4) Bu RES.RES dosyasını dilerseniz ana formunuzun PAS dosyasında, dilerseniz benim tercih ettiğim şekliyle ( gözümün önünde olsun diye ) DPR proje dosyasına aşağıdaki şekilde bir satır eklemelisiniz.
Kod: Tümünü seç
{$R *.res}
{$R 'EKLE\RES.RES'}
Aynısı ama bir de Delphi dilindeki karşılığını yazayım.
Kod: Tümünü seç
implementation
{$R *.dfm}
{$R 'EKLE\RES.RES'}
procedure TForm1.FormCreate(Sender: TObject);
Var
strKlasor : String;
ResStream : TResourceStream;
begin
strKlasor := ExtractFilePath(Application.ExeName) + 'DATA\';
if NOT DirectoryExists(strKlasor) then
begin
ForceDirectories( strKlasor ); // Klasörü Oluşturduk.
// SQLite DLL dosyası Fiziksel olarak açılacak.
ResStream := TResourceStream.Create(HInstance, 'DLLDOSYA', RT_RCDATA);
ResStream.SaveToFile( strKlasor + 'SQLite3.DLL');
ResStream.Free;
// Veritabanı Dosyası Fiziksel olarak açılacak.
ResStream := TResourceStream.Create(HInstance, 'VERITABANI', RT_RCDATA);
ResStream.SaveToFile( strKlasor + 'database.s3db');
ResStream.Free;
end;
// Artık veritabanı bağlantılarını yapabilirsiniz...
end;

Re: Setup programı kullanmadan database yükleme
Hocam elinize sağlık... Database ve dll ler sadece exe tıklandığında bilgisayara bir kez yüklenecek program her açıldığında kontrol edilecek silinmiş ise yeniden yükleyecek database veri olarak çok sayıda veri tutacak yalnız kafam bir türlü almadı databaseleri ve dll exe ye nasıl entegre edeceğim anlayamadım bir türlü...
Re: Setup programı kullanmadan database yükleme
- Bu anlattığım işlemi yap RES dosyasını bir gör.
- Bu mesaj ekinde örnek proje koydum.
(1) EKLE klasörüne EXE'ye eklenecek dosyaları kopyala.
(2) RC dosyasını Windows NotePad ile açıp bu dosyaların isimlerini karşılıklarına yaz. Örnekte aşağıdaki şekildeler.
- RCDATA yazısından sonraki isimler dosya isimleridir.
- Baştakiler ise ALIAS yani kısa tanımlayıcı rumuz/isimlerdir. Kod içerisinden bu ALIAS ile ulaşabilirsin.
(3) iki tane BAT dosyası bar. Birisi 32 Bit Windows için Program Files klasörüne bakar, diğeri 64 Bit Windows için Program Files (x86) klasörüne bakar. Çalıştırıp RES dosyasının oluştuğunu gör.
(4) Projeni açıp çalıştır. İçinde bahsettiğim eklemeleri yaptım.
Sen de bunun aynısını yapacaksın. Projeni derleriğinde bu dosyalar da RES olarak kendiliğinden eklenmiş olacaktır. Ekstra bir işleme gerek yok.
- Bu mesaj ekinde örnek proje koydum.
(1) EKLE klasörüne EXE'ye eklenecek dosyaları kopyala.
(2) RC dosyasını Windows NotePad ile açıp bu dosyaların isimlerini karşılıklarına yaz. Örnekte aşağıdaki şekildeler.
- RCDATA yazısından sonraki isimler dosya isimleridir.
- Baştakiler ise ALIAS yani kısa tanımlayıcı rumuz/isimlerdir. Kod içerisinden bu ALIAS ile ulaşabilirsin.
Kod: Tümünü seç
DLLDOSYA rcdata sqlite3.dll
VERITABANI rcdata database.s3db
(4) Projeni açıp çalıştır. İçinde bahsettiğim eklemeleri yaptım.
Sen de bunun aynısını yapacaksın. Projeni derleriğinde bu dosyalar da RES olarak kendiliğinden eklenmiş olacaktır. Ekstra bir işleme gerek yok.
- Dosya ekleri
-
- SQLITE_Resource.rar
- Resource içine ekleme örneği
- (8.08 KiB) 120 kere indirildi
Re: Setup programı kullanmadan database yükleme
mrmarman hocam çok güzel bir paylaşım yapmışsın elinize bilginize sağlık bu konu gerçekte benim de aklıma takılıyordu fakat hiç bir fikrim olmadığından ne yapacağımı bilmiyorum sizden çok rica ediyorum zahmet olmaz ise basit kullanıcı girişi olan bir video hazırlamanız mümkünmü acaba daha akılda kalıcı olur...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Setup programı kullanmadan database yükleme
Hocam bir de merak ettim. rc dosyasını projeye ekleyince komut satırı işlemlerini Delphi otomatik yapıp res dosyasını oluşturmuyor mu?
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Re: Setup programı kullanmadan database yükleme
Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.warder yazdı:Hocam bir de merak ettim. rc dosyasını projeye ekleyince komut satırı işlemlerini Delphi otomatik yapıp res dosyasını oluşturmuyor mu?
Ben de zaman zaman kendi projelerimde (özellikle OCR isteyen projelerdeki resim örneklerinde) RC dosyasına eklentiler/değişiklikler yapıyorum. BRCC32 olayını ihmal ettiğimi, değişiklik projeye yansımayıp da saç baş yolduktan sonra aklıma geliyor.

Şöyle bir yapı vardı önceleri görmüştüm. Örnekteki şekliyle
Kod: Tümünü seç
{$R 'EKLE\RES.RES' 'EKLE\RES.RC'}
Güncelleme :
Şimdi google taraması ile birşey buldum çalıştı... Şöyle ki
* DPR dosyasının ilk satırı PROGRAM ADI şeklindedir ya.
Kod: Tümünü seç
program SQLITE_Resource;
Kod: Tümünü seç
{$R 'EKLE\RES.res' 'EKLE\RES.RC'}

Sağdaki ProjectGroup penceresinde Resource görünür olursa çalışıyor.
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Re: Setup programı kullanmadan database yükleme
delphi 2009 ile birlikte project menusu altina resources menusu eklendi. buradan daha kolay yapilabilirmrmarman yazdı:Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.warder yazdı:Hocam bir de merak ettim. rc dosyasını projeye ekleyince komut satırı işlemlerini Delphi otomatik yapıp res dosyasını oluşturmuyor mu?
http://docwiki.embarcadero.com/RADStudi ... /Resources
Re: Setup programı kullanmadan database yükleme
Delphi 2007'de de yukarıda mesajın sonuna eklediğim şekildesadettinpolat yazdı:delphi 2010 ile birlikte project menusu altina resources menusu eklendi. buradan daha kolay yapilabilirmrmarman yazdı:Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.warder yazdı:Hocam bir de merak ettim. rc dosyasını projeye ekleyince komut satırı işlemlerini Delphi otomatik yapıp res dosyasını oluşturmuyor mu?
Project menüsünden ADD TO PROJECT ile ilgili RC dosyasını seçip eklemek imkanı varmış...

Re: Setup programı kullanmadan database yükleme
C++ Builder ile de öyle oluyor. Projeye ekleyince gerisi geliyor..
Kardeş IDE olduklarından Delphi de aynısıdır diye düşünmüştüm ama @mrmarman hocam eski versiyonlarda boğuşup bazı kolaylıklardan mahrum kalıyor anladığım kadarıyla..
Kardeş IDE olduklarından Delphi de aynısıdır diye düşünmüştüm ama @mrmarman hocam eski versiyonlarda boğuşup bazı kolaylıklardan mahrum kalıyor anladığım kadarıyla..

... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Re: Setup programı kullanmadan database yükleme
Uzun yıllar proje geliştiren ve eski projeleri unicode desteği ihtiyacı olmayan birisi yeni versiyona geçerken iki defa düşünür.
Örnek kodları burada paylaşırken bile iki şeye dikkat ediyorum.
(1) Delphi 2007'den ileri sürüm kullanmıyorum.
(2) Delphi'nin standart bileşenlerini kullanıyorum.
bu ikisi geçmiş-gelmiş her sürüme uyum gösteriyor. Delphi XE serisini Android dışında pek kullanmıyorum. Sorular gelirse de test için kullanıyorum.

Örnek kodları burada paylaşırken bile iki şeye dikkat ediyorum.
(1) Delphi 2007'den ileri sürüm kullanmıyorum.
(2) Delphi'nin standart bileşenlerini kullanıyorum.
bu ikisi geçmiş-gelmiş her sürüme uyum gösteriyor. Delphi XE serisini Android dışında pek kullanmıyorum. Sorular gelirse de test için kullanıyorum.
Re: Setup programı kullanmadan database yükleme
brs yazdı:mrmarman hocam çok güzel bir paylaşım yapmışsın elinize bilginize sağlık bu konu gerçekte benim de aklıma takılıyordu fakat hiç bir fikrim olmadığından ne yapacağımı bilmiyorum sizden çok rica ediyorum zahmet olmaz ise basit kullanıcı girişi olan bir video hazırlamanız mümkünmü acaba daha akılda kalıcı olur...
Mrmarman hocam Brs arkadaşıma katılıyorum zahmet olmaz ise video ile uygulamalı anlatabilir misiniz...
Re: Setup programı kullanmadan database yükleme
RESOURCE oluşturmak ve kullanımı için mi Video?
Buna uygun bir proje yazar üzerinde gösteririm ama videoluk bir numarası yok ki... Bir kaç ekran resmi koymak bile anlatmak için fazla fazla yeterlidir.
Cevap olarak yazdığım açıklamayı uyfun zamanda makale kısmında paylaşırım. Bugün mesaim uzun sürecek. Gün batımı çekimim var. Bu da geç saatlerde otele döneceğim anlamına geliyor. Sonra bir on dakika ayırırım.
Buna uygun bir proje yazar üzerinde gösteririm ama videoluk bir numarası yok ki... Bir kaç ekran resmi koymak bile anlatmak için fazla fazla yeterlidir.
Cevap olarak yazdığım açıklamayı uyfun zamanda makale kısmında paylaşırım. Bugün mesaim uzun sürecek. Gün batımı çekimim var. Bu da geç saatlerde otele döneceğim anlamına geliyor. Sonra bir on dakika ayırırım.