Setup programı kullanmadan database yükleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Setup programı kullanmadan database yükleme

Mesaj gönderen hido »

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
En son hido tarafından 29 Haz 2014 02:36 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen warder »

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

Kod: Tümünü seç

BIRISIM RCDATA "birdll.dll"
BASKAISIM RCDATA "ikidll.dll"
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.

Kod: Tümünü seç

	if (!FileExists(".\\birdll.dll")) {
		TResourceStream * fsRes = new TResourceStream((int)HInstance, "BIRISIM", (WideChar*)RT_RCDATA);
		fsRes->SaveToFile(".\\birdll.dll");
	}
Aşağıda TResourceStream içerisinde neleri nasıl parametrelendireceğinizi görebilirsiniz.

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...
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen hido »

:bravo: Databseyi ve dll leri exe ye nasıl gömebilirim :N(
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

hido yazdı::bravo: Databseyi ve dll leri exe ye nasıl gömebilirim :N(
@wader gereken cevabı vermiş, dediği şekilde EXE'ye (Resource olarak) gömebilirsiniz.

- 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
(2) Bu RC dosyasını DOS Command mode'da aşağıdaki komut ile RES dosyası haline dönüştüreceksiniz.

Kod: Tümünü seç

BRCC32 RES.RC
- BRCC32.EXE dosyası PATH içerisinde değilse aşağıdaki yerlerden kullanın. (Delphi 2007 için örnekliyorum)
32 Bit Windows ise

Kod: Tümünü seç

"c:\Program Files\CodeGear\RAD Studio\5.0\bin\brcc32.exe" RES.RC
64 Bir Windows ise

Kod: Tümünü seç

"c:\Program Files (x86)\CodeGear\RAD Studio\5.0\bin\brcc32.exe" RES.RC
Bunlar da olmadı, zaten Delphi BIN klasöründe olduğunu görmüş oldunuz oradan bir yol yazarsınız.

(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'}
(5) Projeyi derlediğinizde otomatik olarak EXE içerisine bu dosyalar eklenmiş oldu. Artık @wader'in anltattığı şekilde bunu RESOURCE içerisinden verdiğiniz isimler (alias) ile çağırıp diske kaydedebilirsiniz.

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;
Başarılar. :bravo:
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen hido »

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ü...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

- 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.

Kod: Tümünü seç

DLLDOSYA   rcdata sqlite3.dll
VERITABANI rcdata database.s3db
(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.
Dosya ekleri
SQLITE_Resource.rar
Resource içine ekleme örneği
(8.08 KiB) 120 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen brs »

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...
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen warder »

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...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

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?
Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.

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. :roll:

Şöyle bir yapı vardı önceleri görmüştüm. Örnekteki şekliyle

Kod: Tümünü seç

{$R 'EKLE\RES.RES' 'EKLE\RES.RC'}
Kendiliğinden yoksa BRCC32'yi kendisinin çalıştıracağına işaret ediyordu ancak bu çalışmadığından elle müdahale ediyorum. Yeni delphi sürümlerinde denemedim doğrusu. Belki de çözüldü de ben bilmiyorum.


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;
* ikinci satırına aşağıdaki şekilde ekleyince

Kod: Tümünü seç

{$R 'EKLE\RES.res' 'EKLE\RES.RC'}
kendiliğinden RC dosyasını derleyip RES oluşturdu... :idea: Ancak tek bir şartla... Project menüsünden ADD TO PROJECT ile ilgili RC dosyasını seçerseniz...
Sağdaki ProjectGroup penceresinde Resource görünür olursa çalışıyor.
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen sadettinpolat »

mrmarman yazdı:
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?
Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.
delphi 2009 ile birlikte project menusu altina resources menusu eklendi. buradan daha kolay yapilabilir

http://docwiki.embarcadero.com/RADStudi ... /Resources
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

sadettinpolat yazdı:
mrmarman yazdı:
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?
Malesef hocam, illaki de bizim BRCC32 ile bunu RES formatına dönüştürmemiz gerekiyor. Keşke öyle olsaydı.
delphi 2010 ile birlikte project menusu altina resources menusu eklendi. buradan daha kolay yapilabilir
Delphi 2007'de de yukarıda mesajın sonuna eklediğim şekilde
Project menüsünden ADD TO PROJECT ile ilgili RC dosyasını seçip eklemek imkanı varmış... :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen warder »

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.. :)
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

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.
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen hido »

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...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Setup programı kullanmadan database yükleme

Mesaj gönderen mrmarman »

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.
Resim
Resim ....Resim
Cevapla